Browse Source

Remove all Jupiter string usage; update submodule; various minor fixes

master
Jessica James 3 years ago
parent
commit
96530d778e
  1. 1
      src/Bot/include/Console_Command.h
  2. 2
      src/Bot/include/IRC_Bot.h
  3. 1
      src/Bot/include/IRC_Command.h
  4. 2
      src/Bot/include/ServerManager.h
  5. 12
      src/Bot/src/IRC_Bot.cpp
  6. 11
      src/Bot/src/Main.cpp
  7. 6
      src/Bot/src/ServerManager.cpp
  8. 2
      src/Jupiter
  9. 6
      src/Plugins/ChannelRelay/ChannelRelay.cpp
  10. 1
      src/Plugins/ChannelRelay/ChannelRelay.h
  11. 37
      src/Plugins/CoreCommands/CoreCommands.cpp
  12. 122
      src/Plugins/ExtraCommands/ExtraCommands.cpp
  13. 107
      src/Plugins/FunCommands/FunCommands.cpp
  14. 15
      src/Plugins/HTTPServer/HTTPServer.cpp
  15. 2
      src/Plugins/HTTPServer/HTTPServer.h
  16. 5
      src/Plugins/IRC.Core/IRC_Core.cpp
  17. 1
      src/Plugins/IRC.Core/IRC_Core.h
  18. 9
      src/Plugins/Plugin.Example/Example.cpp
  19. 1
      src/Plugins/Plugin.Template/Example.h
  20. 45
      src/Plugins/PluginManager/PluginManager.cpp
  21. 7
      src/Plugins/RenX/RenX.AlwaysRecord/RenX_AlwaysRecord.cpp
  22. 1
      src/Plugins/RenX/RenX.AlwaysRecord/RenX_AlwaysRecord.h
  23. 3
      src/Plugins/RenX/RenX.Announcements/RenX_Announcements.cpp
  24. 2
      src/Plugins/RenX/RenX.Announcements/RenX_Announcements.h
  25. 1
      src/Plugins/RenX/RenX.ChatLogging/RenX_ChatLogging.h
  26. 29
      src/Plugins/RenX/RenX.CommandLogging/RenX_CommandLogging.cpp
  27. 1
      src/Plugins/RenX/RenX.CommandLogging/RenX_CommandLogging.h
  28. 1105
      src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp
  29. 21
      src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp
  30. 3
      src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h
  31. 1
      src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h
  32. 10
      src/Plugins/RenX/RenX.Core/RenX_Core.cpp
  33. 7
      src/Plugins/RenX/RenX.Core/RenX_ExemptionDatabase.cpp
  34. 1
      src/Plugins/RenX/RenX.Core/RenX_ExemptionDatabase.h
  35. 631
      src/Plugins/RenX/RenX.Core/RenX_Functions.cpp
  36. 7
      src/Plugins/RenX/RenX.Core/RenX_Functions.h
  37. 8
      src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp
  38. 1
      src/Plugins/RenX/RenX.Core/RenX_GameCommand.h
  39. 14
      src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp
  40. 1
      src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h
  41. 2
      src/Plugins/RenX/RenX.Core/RenX_Map.h
  42. 14
      src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h
  43. 2
      src/Plugins/RenX/RenX.Core/RenX_Plugin.cpp
  44. 3
      src/Plugins/RenX/RenX.Core/RenX_Plugin.h
  45. 501
      src/Plugins/RenX/RenX.Core/RenX_Server.cpp
  46. 16
      src/Plugins/RenX/RenX.Core/RenX_Server.h
  47. 360
      src/Plugins/RenX/RenX.Core/RenX_Tags.cpp
  48. 1
      src/Plugins/RenX/RenX.Core/RenX_Tags.h
  49. 3
      src/Plugins/RenX/RenX.Core/RenX_TeamInfo.h
  50. 13
      src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp
  51. 12
      src/Plugins/RenX/RenX.ExtraLogging/RenX_ExtraLogging.cpp
  52. 1
      src/Plugins/RenX/RenX.ExtraLogging/RenX_ExtraLogging.h
  53. 1
      src/Plugins/RenX/RenX.Greetings/RenX_Greetings.cpp
  54. 2
      src/Plugins/RenX/RenX.Greetings/RenX_Greetings.h
  55. 4
      src/Plugins/RenX/RenX.HybridUUID/RenX_HybridUUID.cpp
  56. 1
      src/Plugins/RenX/RenX.HybridUUID/RenX_HybridUUID.h
  57. 82
      src/Plugins/RenX/RenX.IRCJoin/RenX_IRCJoin.cpp
  58. 13
      src/Plugins/RenX/RenX.IRCJoin/RenX_IRCJoin.h
  59. 3
      src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp
  60. 1
      src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h
  61. 17
      src/Plugins/RenX/RenX.Ladder.All-Time/RenX_Ladder_All_Time.cpp
  62. 1
      src/Plugins/RenX/RenX.Ladder.All-Time/RenX_Ladder_All_Time.h
  63. 23
      src/Plugins/RenX/RenX.Ladder.Daily/RenX_Ladder_Daily.cpp
  64. 1
      src/Plugins/RenX/RenX.Ladder.Daily/RenX_Ladder_Daily.h
  65. 20
      src/Plugins/RenX/RenX.Ladder.Monthly/RenX_Ladder_Monthly.cpp
  66. 1
      src/Plugins/RenX/RenX.Ladder.Monthly/RenX_Ladder_Monthly.h
  67. 104
      src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp
  68. 8
      src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.h
  69. 26
      src/Plugins/RenX/RenX.Ladder.Weekly/RenX_Ladder_Weekly.cpp
  70. 1
      src/Plugins/RenX/RenX.Ladder.Weekly/RenX_Ladder_Weekly.h
  71. 23
      src/Plugins/RenX/RenX.Ladder.Yearly/RenX_Ladder_Yearly.cpp
  72. 1
      src/Plugins/RenX/RenX.Ladder.Yearly/RenX_Ladder_Yearly.h
  73. 39
      src/Plugins/RenX/RenX.Ladder/RenX_Ladder.cpp
  74. 1
      src/Plugins/RenX/RenX.Ladder/RenX_Ladder.h
  75. 14
      src/Plugins/RenX/RenX.Listen/RenX_Listen.cpp
  76. 1
      src/Plugins/RenX/RenX.Listen/RenX_Listen.h
  77. 412
      src/Plugins/RenX/RenX.Logging/RenX_Logging.cpp
  78. 117
      src/Plugins/RenX/RenX.Medals/RenX_Medals.cpp
  79. 15
      src/Plugins/RenX/RenX.Medals/RenX_Medals.h
  80. 82
      src/Plugins/RenX/RenX.MinPlayers/RenX_MinPlayers.cpp
  81. 1
      src/Plugins/RenX/RenX.MinPlayers/RenX_MinPlayers.h
  82. 318
      src/Plugins/RenX/RenX.ModSystem/RenX_ModSystem.cpp
  83. 2
      src/Plugins/RenX/RenX.ModSystem/RenX_ModSystem.h
  84. 3
      src/Plugins/RenX/RenX.NicknameUUID/RenX_NicknameUUID.cpp
  85. 1
      src/Plugins/RenX/RenX.NicknameUUID/RenX_NicknameUUID.h
  86. 1
      src/Plugins/RenX/RenX.Plugin.Template/Example.h
  87. 34
      src/Plugins/RenX/RenX.Relay/RenX_Relay.cpp
  88. 1
      src/Plugins/RenX/RenX.Relay/RenX_Relay.h
  89. 161
      src/Plugins/RenX/RenX.ServerList/RenX_ServerList.cpp
  90. 5
      src/Plugins/RenX/RenX.ServerList/RenX_ServerList.h
  91. 44
      src/Plugins/RenX/RenX.SetJoin/RenX_SetJoin.cpp
  92. 48
      src/Plugins/RenX/RenX.Warn/RenX_Warn.cpp
  93. 1
      src/Plugins/RenX/RenX.Warn/RenX_Warn.h
  94. 60
      src/Plugins/SetJoin/SetJoin.cpp

1
src/Bot/include/Console_Command.h

@ -24,6 +24,7 @@
* @brief Provides an extendable command system specialized for console-based commands. * @brief Provides an extendable command system specialized for console-based commands.
*/ */
#include <iostream>
#include "Jupiter/GenericCommand.h" #include "Jupiter/GenericCommand.h"
#include "Jupiter_Bot.h" #include "Jupiter_Bot.h"

2
src/Bot/include/IRC_Bot.h

@ -24,10 +24,10 @@
* @brief Provides extendable bot-like interfacing with the IRC client. * @brief Provides extendable bot-like interfacing with the IRC client.
*/ */
#include <vector>
#include "Jupiter_Bot.h" #include "Jupiter_Bot.h"
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/Rehash.h" #include "Jupiter/Rehash.h"
#include "Jupiter/String.hpp"
/** Forward Declaration */ /** Forward Declaration */
class IRCCommand; class IRCCommand;

1
src/Bot/include/IRC_Command.h

@ -26,7 +26,6 @@
#include "Jupiter/GenericCommand.h" #include "Jupiter/GenericCommand.h"
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/String.hpp"
#include "Jupiter_Bot.h" #include "Jupiter_Bot.h"
#include "ServerManager.h" #include "ServerManager.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"

2
src/Bot/include/ServerManager.h

@ -25,9 +25,9 @@
*/ */
#include <memory> #include <memory>
#include <vector>
#include "Jupiter_Bot.h" #include "Jupiter_Bot.h"
#include "Jupiter/Thinker.h" #include "Jupiter/Thinker.h"
#include "Jupiter/Readable_String.h"
/** Forward declarations */ /** Forward declarations */
class IRC_Bot; class IRC_Bot;

12
src/Bot/src/IRC_Bot.cpp

@ -24,15 +24,15 @@
#include "Jupiter/Config.h" #include "Jupiter/Config.h"
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Functions.h" #include "Jupiter/Functions.h"
#include "Jupiter/Readable_String.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
#include "IRC_Command.h" #include "IRC_Command.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
IRC_Bot::IRC_Bot(Jupiter::Config *in_primary_section, Jupiter::Config *in_secondary_section) IRC_Bot::IRC_Bot(Jupiter::Config *in_primary_section, Jupiter::Config *in_secondary_section)
: Client(in_primary_section, in_secondary_section) { : Client(in_primary_section, in_secondary_section) {
m_commandPrefix = this->readConfigValue("Prefix"_jrs); m_commandPrefix = this->readConfigValue("Prefix"sv);
for (const auto& command : IRCMasterCommandList) { for (const auto& command : IRCMasterCommandList) {
m_commands.emplace_back(command->copy()); m_commands.emplace_back(command->copy());
@ -105,14 +105,14 @@ void IRC_Bot::setCommandAccessLevels(IRCCommand *in_command) {
return; return;
} }
Jupiter::Config *section = in_section->getSection("Commands"_jrs); Jupiter::Config *section = in_section->getSection("Commands"sv);
if (section == nullptr) { if (section == nullptr) {
return; return;
} }
for (auto& entry : section->getTable()) { for (auto& entry : section->getTable()) {
size_t tmp_index; size_t tmp_index;
Jupiter::ReferenceString tmp_key, tmp_sub_key; std::string_view tmp_key, tmp_sub_key;
IRCCommand *command; IRCCommand *command;
tmp_index = entry.first.find('.'); tmp_index = entry.first.find('.');
@ -174,10 +174,10 @@ void IRC_Bot::OnChat(std::string_view in_channel, std::string_view nick, std::st
IRCCommand::active_server = this; IRCCommand::active_server = this;
int command_access = cmd->getAccessLevel(channel); int command_access = cmd->getAccessLevel(channel);
if (command_access < 0) { if (command_access < 0) {
this->sendNotice(nick, "Error: Command disabled."_jrs); this->sendNotice(nick, "Error: Command disabled."sv);
} }
else if (Jupiter::IRC::Client::getAccessLevel(*channel, nick) < command_access) { else if (Jupiter::IRC::Client::getAccessLevel(*channel, nick) < command_access) {
this->sendNotice(nick, "Access Denied."_jrs); this->sendNotice(nick, "Access Denied."sv);
} }
else { else {
cmd->trigger(this, in_channel, nick, message_split.second); cmd->trigger(this, in_channel, nick, message_split.second);

11
src/Bot/src/Main.cpp

@ -39,7 +39,6 @@
#include <Windows.h> #include <Windows.h>
#endif // _WIN32 #endif // _WIN32
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
Jupiter::INIConfig o_config; Jupiter::INIConfig o_config;
@ -91,13 +90,13 @@ void inputLoop() {
void initialize_plugins() { void initialize_plugins() {
std::cout << "Loading plugins..." << std::endl; std::cout << "Loading plugins..." << std::endl;
std::string_view plugin_list_str = Jupiter::g_config->get("Plugins"_jrs); std::string_view plugin_list_str = Jupiter::g_config->get("Plugins"sv);
if (plugin_list_str.empty()) { if (plugin_list_str.empty()) {
std::cout << "No plugins to load!" << std::endl; std::cout << "No plugins to load!" << std::endl;
} }
else { else {
// initialize plugins // initialize plugins
auto plugin_names = jessilib::word_split<std::vector, Jupiter::ReferenceString>(plugin_list_str, WHITESPACE_SV); auto plugin_names = jessilib::word_split_view(plugin_list_str, WHITESPACE_SV);
std::cout << "Attempting to load " << plugin_names.size() << " plugins..." << std::endl; std::cout << "Attempting to load " << plugin_names.size() << " plugins..." << std::endl;
for (const auto& plugin_name : plugin_names) { for (const auto& plugin_name : plugin_names) {
@ -206,10 +205,10 @@ int main(int argc, char* argv[]) {
printf("Config loaded (%fms)." ENDL, time_taken); printf("Config loaded (%fms)." ENDL, time_taken);
if (plugins_directory.empty()) if (plugins_directory.empty())
plugins_directory = o_config.get("PluginsDirectory"_jrs); plugins_directory = o_config.get("PluginsDirectory"sv);
if (configs_directory.empty()) if (configs_directory.empty())
configs_directory = o_config.get("ConfigsDirectory"_jrs); configs_directory = o_config.get("ConfigsDirectory"sv);
if (!plugins_directory.empty()) { if (!plugins_directory.empty()) {
Jupiter::Plugin::setDirectory(plugins_directory); Jupiter::Plugin::setDirectory(plugins_directory);
@ -226,7 +225,7 @@ int main(int argc, char* argv[]) {
printf("Initialization completed in %f milliseconds." ENDL, static_cast<double>(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - Jupiter::g_start_time).count()) / 1000.0 ); printf("Initialization completed in %f milliseconds." ENDL, static_cast<double>(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - Jupiter::g_start_time).count()) / 1000.0 );
if (!consoleCommands.empty()) { if (!consoleCommands.empty()) {
printf("%zu Console Commands have been initialized%s" ENDL, consoleCommands.size(), getConsoleCommand("help"_jrs) == nullptr ? "." : "; type \"help\" for more information."); printf("%zu Console Commands have been initialized%s" ENDL, consoleCommands.size(), getConsoleCommand("help"sv) == nullptr ? "." : "; type \"help\" for more information.");
} }
if (!IRCMasterCommandList.empty()) { if (!IRCMasterCommandList.empty()) {
printf("%zu IRC Commands have been loaded into the master list." ENDL, IRCMasterCommandList.size()); printf("%zu IRC Commands have been loaded into the master list." ENDL, IRCMasterCommandList.size());

6
src/Bot/src/ServerManager.cpp

@ -22,7 +22,7 @@
#include "IRC_Bot.h" #include "IRC_Bot.h"
#include "IRC_Command.h" #include "IRC_Command.h"
using namespace Jupiter::literals; using namespace std::literals;
ServerManager g_serverManager; ServerManager g_serverManager;
ServerManager *serverManager = &g_serverManager; ServerManager *serverManager = &g_serverManager;
@ -72,7 +72,7 @@ size_t ServerManager::removeCommand(std::string_view command) {
void ServerManager::OnConfigRehash() { void ServerManager::OnConfigRehash() {
for (const auto& server : m_servers) { for (const auto& server : m_servers) {
server->setPrimaryConfigSection(m_config->getSection(server->getConfigSection())); server->setPrimaryConfigSection(m_config->getSection(server->getConfigSection()));
server->setSecondaryConfigSection(m_config->getSection("Defualt"_jrs)); server->setSecondaryConfigSection(m_config->getSection("Defualt"sv));
server->setCommandAccessLevels(); server->setCommandAccessLevels();
} }
} }
@ -104,7 +104,7 @@ IRC_Bot *ServerManager::getServer(size_t serverIndex) {
} }
bool ServerManager::addServer(std::string_view serverConfig) { bool ServerManager::addServer(std::string_view serverConfig) {
auto server = std::make_unique<IRC_Bot>(m_config->getSection(serverConfig), m_config->getSection("Default"_jrs)); auto server = std::make_unique<IRC_Bot>(m_config->getSection(serverConfig), m_config->getSection("Default"sv));
if (server->connect()) { if (server->connect()) {
m_servers.push_back(std::move(server)); m_servers.push_back(std::move(server));
return true; return true;

2
src/Jupiter

@ -1 +1 @@
Subproject commit 273bb80abfe378654d6f3f2b7a1eeaab2549faaf Subproject commit 77762980cce5bda4035b15cc552ec8a4c5b2175e

6
src/Plugins/ChannelRelay/ChannelRelay.cpp

@ -18,16 +18,16 @@
#include "jessilib/word_split.hpp" #include "jessilib/word_split.hpp"
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/String.hpp" #include "Jupiter/Functions.h"
#include "Jupiter/Readable_String.h"
#include "ServerManager.h" #include "ServerManager.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
#include "ChannelRelay.h" #include "ChannelRelay.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool ChannelRelayPlugin::initialize() { bool ChannelRelayPlugin::initialize() {
std::string_view types_string = this->config.get("Types"_jrs); std::string_view types_string = this->config.get("Types"sv);
std::vector<std::string_view> split_types = jessilib::word_split_view(types_string, WHITESPACE_SV); std::vector<std::string_view> split_types = jessilib::word_split_view(types_string, WHITESPACE_SV);
if (split_types.empty()) { if (split_types.empty()) {

1
src/Plugins/ChannelRelay/ChannelRelay.h

@ -20,7 +20,6 @@
#define _CHANNELRELAY_H_HEADER #define _CHANNELRELAY_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
class ChannelRelayPlugin : public Jupiter::Plugin class ChannelRelayPlugin : public Jupiter::Plugin
{ {

37
src/Plugins/CoreCommands/CoreCommands.cpp

@ -22,13 +22,12 @@
#include "CoreCommands.h" #include "CoreCommands.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
// Help Console Command // Help Console Command
HelpConsoleCommand::HelpConsoleCommand() { HelpConsoleCommand::HelpConsoleCommand() {
this->addTrigger(STRING_LITERAL_AS_REFERENCE("help")); this->addTrigger("help"sv);
} }
void HelpConsoleCommand::trigger(std::string_view parameters) { void HelpConsoleCommand::trigger(std::string_view parameters) {
@ -54,7 +53,7 @@ void HelpConsoleCommand::trigger(std::string_view parameters) {
} }
std::string_view HelpConsoleCommand::getHelp(std::string_view ) { std::string_view HelpConsoleCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Lists commands, or sends command-specific help. Syntax: help [command]"); static constexpr std::string_view defaultHelp = "Lists commands, or sends command-specific help. Syntax: help [command]"sv;
return defaultHelp; return defaultHelp;
} }
@ -63,7 +62,7 @@ CONSOLE_COMMAND_INIT(HelpConsoleCommand)
// Help IRC Command. // Help IRC Command.
void HelpIRCCommand::create() { void HelpIRCCommand::create() {
this->addTrigger("help"_jrs); this->addTrigger("help"sv);
} }
void HelpIRCCommand::trigger(IRC_Bot *source, std::string_view in_channel, std::string_view nick, std::string_view parameters) { void HelpIRCCommand::trigger(IRC_Bot *source, std::string_view in_channel, std::string_view nick, std::string_view parameters) {
@ -75,14 +74,14 @@ void HelpIRCCommand::trigger(IRC_Bot *source, std::string_view in_channel, std::
for (int i = 0; i <= access; i++) { for (int i = 0; i <= access; i++) {
auto cmds = source->getAccessCommands(channel, i); auto cmds = source->getAccessCommands(channel, i);
if (cmds.size() != 0) { if (cmds.size() != 0) {
Jupiter::StringL triggers = source->getTriggers(cmds); std::string triggers = source->getTriggers(cmds);
if (triggers.size() >= 0) { if (triggers.size() >= 0) {
source->sendNotice(nick, string_printf("Access level %d commands: %.*s", i, triggers.size(), source->sendNotice(nick, string_printf("Access level %d commands: %.*s", i, triggers.size(),
triggers.data())); triggers.data()));
} }
} }
} }
source->sendNotice(nick, "For command-specific help, use: help <command>"_jrs); source->sendNotice(nick, "For command-specific help, use: help <command>"sv);
} }
else { else {
auto command_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto command_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
@ -91,19 +90,19 @@ void HelpIRCCommand::trigger(IRC_Bot *source, std::string_view in_channel, std::
int command_access = cmd->getAccessLevel(channel); int command_access = cmd->getAccessLevel(channel);
if (command_access < 0) if (command_access < 0)
source->sendNotice(nick, "Error: Command disabled."_jrs); source->sendNotice(nick, "Error: Command disabled."sv);
else if (access < command_access) else if (access < command_access)
source->sendNotice(nick, "Access Denied."_jrs); source->sendNotice(nick, "Access Denied."sv);
else else
source->sendNotice(nick, cmd->getHelp(command_split.second)); source->sendNotice(nick, cmd->getHelp(command_split.second));
} }
else source->sendNotice(nick, "Error: Command not found."_jrs); else source->sendNotice(nick, "Error: Command not found."sv);
} }
} }
} }
std::string_view HelpIRCCommand::getHelp(std::string_view ) { std::string_view HelpIRCCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Syntax: help [command]"); static constexpr std::string_view defaultHelp = "Syntax: help [command]"sv;
return defaultHelp; return defaultHelp;
} }
@ -112,12 +111,12 @@ IRC_COMMAND_INIT(HelpIRCCommand)
// Version Command // Version Command
VersionGenericCommand::VersionGenericCommand() { VersionGenericCommand::VersionGenericCommand() {
this->addTrigger(STRING_LITERAL_AS_REFERENCE("version")); this->addTrigger("version"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("versioninfo")); this->addTrigger("versioninfo"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyright")); this->addTrigger("copyright"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("copyrightinfo")); this->addTrigger("copyrightinfo"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("client")); this->addTrigger("client"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("clientinfo")); this->addTrigger("clientinfo"sv);
} }
Jupiter::GenericCommand::ResponseLine *VersionGenericCommand::trigger(std::string_view parameters) { Jupiter::GenericCommand::ResponseLine *VersionGenericCommand::trigger(std::string_view parameters) {
@ -127,7 +126,7 @@ Jupiter::GenericCommand::ResponseLine *VersionGenericCommand::trigger(std::strin
} }
std::string_view VersionGenericCommand::getHelp(std::string_view ) { std::string_view VersionGenericCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays version and copyright information"); static constexpr std::string_view defaultHelp = "Displays version and copyright information"sv;
return defaultHelp; return defaultHelp;
} }
@ -137,7 +136,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(VersionGenericCommand)
// Rehash Command // Rehash Command
RehashGenericCommand::RehashGenericCommand() { RehashGenericCommand::RehashGenericCommand() {
this->addTrigger(STRING_LITERAL_AS_REFERENCE("rehash")); this->addTrigger("rehash"sv);
} }
Jupiter::GenericCommand::ResponseLine *RehashGenericCommand::trigger(std::string_view parameters) { Jupiter::GenericCommand::ResponseLine *RehashGenericCommand::trigger(std::string_view parameters) {
@ -150,7 +149,7 @@ Jupiter::GenericCommand::ResponseLine *RehashGenericCommand::trigger(std::string
} }
std::string_view RehashGenericCommand::getHelp(std::string_view ) { std::string_view RehashGenericCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Rehashes configuration data from a file. Syntax: rehash [file]"); static constexpr std::string_view defaultHelp = "Rehashes configuration data from a file. Syntax: rehash [file]"sv;
return defaultHelp; return defaultHelp;
} }

122
src/Plugins/ExtraCommands/ExtraCommands.cpp

@ -18,19 +18,19 @@
#include <cstring> #include <cstring>
#include "jessilib/word_split.hpp" #include "jessilib/word_split.hpp"
#include "jessilib/unicode.hpp"
#include "Jupiter/Functions.h" #include "Jupiter/Functions.h"
#include "ExtraCommands.h" #include "ExtraCommands.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
// Select Command // Select Command
SelectGenericCommand::SelectGenericCommand() SelectGenericCommand::SelectGenericCommand()
{ {
this->addTrigger("select"_jrs); this->addTrigger("select"sv);
this->addTrigger("ircselect"_jrs); this->addTrigger("ircselect"sv);
} }
Jupiter::GenericCommand::ResponseLine *SelectGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *SelectGenericCommand::trigger(std::string_view parameters)
@ -38,7 +38,7 @@ Jupiter::GenericCommand::ResponseLine *SelectGenericCommand::trigger(std::string
if (parameters.empty()) if (parameters.empty())
{ {
if (IRCCommand::selected_server == nullptr) if (IRCCommand::selected_server == nullptr)
return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicSuccess);
return new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " is currently selected."s, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " is currently selected."s, GenericCommand::DisplayType::PublicSuccess);
} }
if (IRCCommand::active_server == IRCCommand::selected_server) if (IRCCommand::active_server == IRCCommand::selected_server)
@ -46,17 +46,15 @@ Jupiter::GenericCommand::ResponseLine *SelectGenericCommand::trigger(std::string
IRCCommand::selected_server = serverManager->getServer(parameters); IRCCommand::selected_server = serverManager->getServer(parameters);
if (IRCCommand::selected_server == nullptr) if (IRCCommand::selected_server == nullptr)
return new Jupiter::GenericCommand::ResponseLine("Error: IRC server \""s + parameters + "\" not found. No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine(jessilib::join<std::string>("Error: IRC server \""sv, parameters, "\" not found. No IRC server is currently selected."sv), GenericCommand::DisplayType::PublicError);
if (IRCCommand::active_server == nullptr) if (IRCCommand::active_server == nullptr)
IRCCommand::active_server = IRCCommand::selected_server; IRCCommand::active_server = IRCCommand::selected_server;
return new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " is now selected."s, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " is now selected."s, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view SelectGenericCommand::getHelp(std::string_view ) std::string_view SelectGenericCommand::getHelp(std::string_view ) {
{ return "Selects an IRC server if specified, responds with the currently selected server otherwise. Syntax: select [server]"sv;
static Jupiter::ReferenceString defaultHelp = "Selects an IRC server if specified, responds with the currently selected server otherwise. Syntax: select [server]"_jrs;
return defaultHelp;
} }
GENERIC_COMMAND_INIT(SelectGenericCommand) GENERIC_COMMAND_INIT(SelectGenericCommand)
@ -66,18 +64,18 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(SelectGenericCommand)
DeselectGenericCommand::DeselectGenericCommand() DeselectGenericCommand::DeselectGenericCommand()
{ {
this->addTrigger("deselect"_jrs); this->addTrigger("deselect"sv);
this->addTrigger("ircdeselect"_jrs); this->addTrigger("ircdeselect"sv);
this->addTrigger("dselect"_jrs); this->addTrigger("dselect"sv);
this->addTrigger("ircdselect"_jrs); this->addTrigger("ircdselect"sv);
this->addTrigger("unselect"_jrs); this->addTrigger("unselect"sv);
this->addTrigger("ircunselect"_jrs); this->addTrigger("ircunselect"sv);
} }
Jupiter::GenericCommand::ResponseLine *DeselectGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *DeselectGenericCommand::trigger(std::string_view parameters)
{ {
if (IRCCommand::selected_server == nullptr) if (IRCCommand::selected_server == nullptr)
return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicSuccess);
Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " has been deselected."s, GenericCommand::DisplayType::PublicSuccess); Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine(std::string{IRCCommand::selected_server->getConfigSection()} + " has been deselected."s, GenericCommand::DisplayType::PublicSuccess);
IRCCommand::selected_server = nullptr; IRCCommand::selected_server = nullptr;
@ -85,10 +83,8 @@ Jupiter::GenericCommand::ResponseLine *DeselectGenericCommand::trigger(std::stri
return ret; return ret;
} }
std::string_view DeselectGenericCommand::getHelp(std::string_view ) std::string_view DeselectGenericCommand::getHelp(std::string_view ) {
{ return "Deselects the currently selected IRC server. Syntax: deselect"sv;
static Jupiter::ReferenceString defaultHelp = "Deselects the currently selected IRC server. Syntax: deselect"_jrs;
return defaultHelp;
} }
GENERIC_COMMAND_INIT(DeselectGenericCommand) GENERIC_COMMAND_INIT(DeselectGenericCommand)
@ -98,8 +94,8 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(DeselectGenericCommand)
RawGenericCommand::RawGenericCommand() RawGenericCommand::RawGenericCommand()
{ {
this->addTrigger("raw"_jrs); this->addTrigger("raw"sv);
this->addTrigger("sendraw"_jrs); this->addTrigger("sendraw"sv);
} }
Jupiter::GenericCommand::ResponseLine *RawGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *RawGenericCommand::trigger(std::string_view parameters)
@ -110,18 +106,18 @@ Jupiter::GenericCommand::ResponseLine *RawGenericCommand::trigger(std::string_vi
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
if (parameters.empty()) if (parameters.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: raw <message>"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: raw <message>"sv, GenericCommand::DisplayType::PrivateError);
server->send(parameters); server->send(parameters);
return new Jupiter::GenericCommand::ResponseLine("Data has been successfully sent to server."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Data has been successfully sent to server."sv, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view RawGenericCommand::getHelp(std::string_view ) std::string_view RawGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a line of data to the selected IRC server. Syntax: raw <message>"); static constexpr std::string_view defaultHelp = "Sends a line of data to the selected IRC server. Syntax: raw <message>"sv;
return defaultHelp; return defaultHelp;
} }
@ -132,9 +128,9 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(RawGenericCommand)
IRCMessageGenericCommand::IRCMessageGenericCommand() IRCMessageGenericCommand::IRCMessageGenericCommand()
{ {
this->addTrigger("ircmsg"_jrs); this->addTrigger("ircmsg"sv);
this->addTrigger("ircmessage"_jrs); this->addTrigger("ircmessage"sv);
this->addTrigger("privmsg"_jrs); this->addTrigger("privmsg"sv);
} }
Jupiter::GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(std::string_view parameters)
@ -145,19 +141,19 @@ Jupiter::GenericCommand::ResponseLine *IRCMessageGenericCommand::trigger(std::st
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (parameters_split.second.empty()) if (parameters_split.second.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg <destination> <message>"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ircmsg <destination> <message>"sv, GenericCommand::DisplayType::PrivateError);
server->sendMessage(parameters_split.first, parameters_split.second); server->sendMessage(parameters_split.first, parameters_split.second);
return new Jupiter::GenericCommand::ResponseLine("Message successfully sent."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Message successfully sent."sv, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view IRCMessageGenericCommand::getHelp(std::string_view ) std::string_view IRCMessageGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sends a message to an IRC user or channel on the selected IRC server. Syntax: ircmsg <destination> <message>"); static constexpr std::string_view defaultHelp = "Sends a message to an IRC user or channel on the selected IRC server. Syntax: ircmsg <destination> <message>"sv;
return defaultHelp; return defaultHelp;
} }
@ -168,7 +164,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(IRCMessageGenericCommand)
JoinGenericCommand::JoinGenericCommand() JoinGenericCommand::JoinGenericCommand()
{ {
this->addTrigger("Join"_jrs); this->addTrigger("Join"sv);
} }
Jupiter::GenericCommand::ResponseLine *JoinGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *JoinGenericCommand::trigger(std::string_view parameters)
@ -179,10 +175,10 @@ Jupiter::GenericCommand::ResponseLine *JoinGenericCommand::trigger(std::string_v
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
if (parameters.empty()) if (parameters.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join <channel> [password]"_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: Too Few Parameters. Syntax: join <channel> [password]"sv, GenericCommand::DisplayType::PublicError);
auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (parameters_split.second.empty()) { if (parameters_split.second.empty()) {
@ -192,12 +188,12 @@ Jupiter::GenericCommand::ResponseLine *JoinGenericCommand::trigger(std::string_v
server->joinChannel(parameters_split.first, parameters_split.second); server->joinChannel(parameters_split.first, parameters_split.second);
} }
return new Jupiter::GenericCommand::ResponseLine("Request to join channel has been sent."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Request to join channel has been sent."sv, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view JoinGenericCommand::getHelp(std::string_view ) std::string_view JoinGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Joins a channel. Syntax: join <channel> [password]"); static constexpr std::string_view defaultHelp = "Joins a channel. Syntax: join <channel> [password]"sv;
return defaultHelp; return defaultHelp;
} }
@ -208,7 +204,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(JoinGenericCommand)
PartGenericCommand::PartGenericCommand() PartGenericCommand::PartGenericCommand()
{ {
this->addTrigger("Part"_jrs); this->addTrigger("Part"sv);
} }
Jupiter::GenericCommand::ResponseLine *PartGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *PartGenericCommand::trigger(std::string_view parameters)
@ -219,10 +215,10 @@ Jupiter::GenericCommand::ResponseLine *PartGenericCommand::trigger(std::string_v
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
if (parameters.empty()) if (parameters.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part <channel> [message]"_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: part <channel> [message]"sv, GenericCommand::DisplayType::PublicError);
auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (parameters_split.second.empty()) { if (parameters_split.second.empty()) {
@ -232,12 +228,12 @@ Jupiter::GenericCommand::ResponseLine *PartGenericCommand::trigger(std::string_v
server->partChannel(parameters_split.first, parameters_split.second); server->partChannel(parameters_split.first, parameters_split.second);
} }
return new Jupiter::GenericCommand::ResponseLine("Part command successfuly sent."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Part command successfuly sent."sv, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view PartGenericCommand::getHelp(std::string_view ) std::string_view PartGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Parts from a channel. Syntax: part <channel> [message]"); static constexpr std::string_view defaultHelp = "Parts from a channel. Syntax: part <channel> [message]"sv;
return defaultHelp; return defaultHelp;
} }
@ -248,7 +244,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(PartGenericCommand)
DebugInfoGenericCommand::DebugInfoGenericCommand() DebugInfoGenericCommand::DebugInfoGenericCommand()
{ {
this->addTrigger("debuginfo"_jrs); this->addTrigger("debuginfo"sv);
} }
Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(std::string_view parameters)
@ -259,7 +255,7 @@ Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(std::str
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine("Prefixes: "s += server->getPrefixes(), GenericCommand::DisplayType::PublicSuccess); Jupiter::GenericCommand::ResponseLine *ret = new Jupiter::GenericCommand::ResponseLine("Prefixes: "s += server->getPrefixes(), GenericCommand::DisplayType::PublicSuccess);
Jupiter::GenericCommand::ResponseLine *line = new Jupiter::GenericCommand::ResponseLine("Prefix Modes: "s += server->getPrefixModes(), GenericCommand::DisplayType::PublicSuccess); Jupiter::GenericCommand::ResponseLine *line = new Jupiter::GenericCommand::ResponseLine("Prefix Modes: "s += server->getPrefixModes(), GenericCommand::DisplayType::PublicSuccess);
@ -292,7 +288,7 @@ Jupiter::GenericCommand::ResponseLine *DebugInfoGenericCommand::trigger(std::str
std::string_view DebugInfoGenericCommand::getHelp(std::string_view ) std::string_view DebugInfoGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "DEBUG COMMAND - Spits out some information about channels. Syntax: debuginfo"); static constexpr std::string_view defaultHelp = "DEBUG COMMAND - Spits out some information about channels. Syntax: debuginfo"sv;
return defaultHelp; return defaultHelp;
} }
@ -303,7 +299,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(DebugInfoGenericCommand)
ExitGenericCommand::ExitGenericCommand() ExitGenericCommand::ExitGenericCommand()
{ {
this->addTrigger("exit"_jrs); this->addTrigger("exit"sv);
} }
Jupiter::GenericCommand::ResponseLine *ExitGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *ExitGenericCommand::trigger(std::string_view parameters)
@ -313,7 +309,7 @@ Jupiter::GenericCommand::ResponseLine *ExitGenericCommand::trigger(std::string_v
std::string_view ExitGenericCommand::getHelp(std::string_view ) std::string_view ExitGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Closes the bot's application process. Syntax: exit"); static constexpr std::string_view defaultHelp = "Closes the bot's application process. Syntax: exit"sv;
return defaultHelp; return defaultHelp;
} }
@ -324,8 +320,8 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(ExitGenericCommand)
IRCConnectGenericCommand::IRCConnectGenericCommand() IRCConnectGenericCommand::IRCConnectGenericCommand()
{ {
this->addTrigger("IRCConnect"_jrs); this->addTrigger("IRCConnect"sv);
this->addTrigger("IRCReconnect"_jrs); this->addTrigger("IRCReconnect"sv);
} }
Jupiter::GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(std::string_view parameters)
@ -338,25 +334,25 @@ Jupiter::GenericCommand::ResponseLine *IRCConnectGenericCommand::trigger(std::st
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
server->disconnect("Connect command used; reconnecting..."_jrs, false); server->disconnect("Connect command used; reconnecting..."sv, false);
return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."sv, GenericCommand::DisplayType::PublicSuccess);
} }
IRC_Bot *server = serverManager->getServer(parameters); IRC_Bot *server = serverManager->getServer(parameters);
if (server != nullptr) if (server != nullptr)
{ {
server->disconnect("Connect command used; reconnecting..."_jrs, false); server->disconnect("Connect command used; reconnecting..."sv, false);
return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Disconnected from IRC server."sv, GenericCommand::DisplayType::PublicSuccess);
} }
if (serverManager->addServer(parameters)) if (serverManager->addServer(parameters))
return new Jupiter::GenericCommand::ResponseLine("Connection successfully established; server added to server list."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Connection successfully established; server added to server list."sv, GenericCommand::DisplayType::PublicSuccess);
return new Jupiter::GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: Unable to find configuration settings for server, or connection refused."sv, GenericCommand::DisplayType::PublicError);
} }
std::string_view IRCConnectGenericCommand::getHelp(std::string_view ) std::string_view IRCConnectGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Connects/reconnects to an IRC server, based on config entry. Syntax: IRCConnect [server=here]"); static constexpr std::string_view defaultHelp = "Connects/reconnects to an IRC server, based on config entry. Syntax: IRCConnect [server=here]"sv;
return defaultHelp; return defaultHelp;
} }
@ -367,7 +363,7 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(IRCConnectGenericCommand)
IRCDisconnectGenericCommand::IRCDisconnectGenericCommand() IRCDisconnectGenericCommand::IRCDisconnectGenericCommand()
{ {
this->addTrigger("IRCDisconnect"_jrs); this->addTrigger("IRCDisconnect"sv);
} }
Jupiter::GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(std::string_view parameters) Jupiter::GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(std::string_view parameters)
@ -378,15 +374,15 @@ Jupiter::GenericCommand::ResponseLine *IRCDisconnectGenericCommand::trigger(std:
else if (IRCCommand::active_server != nullptr) else if (IRCCommand::active_server != nullptr)
server = IRCCommand::active_server; server = IRCCommand::active_server;
else else
return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: No IRC server is currently selected."sv, GenericCommand::DisplayType::PublicError);
server->disconnect("Disconnect command used."_jrs, true); server->disconnect("Disconnect command used."sv, true);
return new Jupiter::GenericCommand::ResponseLine("Disconnected from server."_jrs, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine("Disconnected from server."sv, GenericCommand::DisplayType::PublicSuccess);
} }
std::string_view IRCDisconnectGenericCommand::getHelp(std::string_view ) std::string_view IRCDisconnectGenericCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Disconnects from an IRC server, based on config entry. Syntax: IRCDisconnect"); static constexpr std::string_view defaultHelp = "Disconnects from an IRC server, based on config entry. Syntax: IRCDisconnect"sv;
return defaultHelp; return defaultHelp;
} }

107
src/Plugins/FunCommands/FunCommands.cpp

@ -24,121 +24,122 @@
#include "FunCommands.h" #include "FunCommands.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
// 8ball // 8ball
void EightBallIRCCommand::create() void EightBallIRCCommand::create()
{ {
this->addTrigger("8ball"_jrs); this->addTrigger("8ball"sv);
this->addTrigger("8balls"_jrs); this->addTrigger("8balls"sv);
this->addTrigger("eightBall"_jrs); this->addTrigger("eightBall"sv);
} }
void EightBallIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) void EightBallIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters)
{ {
Jupiter::StringS msg; std::string msg;
switch (rand() % 31) switch (rand() % 31)
{ {
case 0: case 0:
msg.set("No."_jrs); msg = "No."sv;
break; break;
case 1: case 1:
msg.set("Yes."_jrs); msg = "Yes."sv;
break; break;
case 2: case 2:
msg.set("Maybe."_jrs); msg = "Maybe."sv;
break; break;
case 3: case 3:
msg.set("Seven."_jrs); msg = "Seven."sv;
break; break;
case 4: case 4:
msg.set("Consider counseling."_jrs); msg = "Consider counseling."sv;
break; break;
case 5: case 5:
msg.set("Look into a realationship. A real one."_jrs); msg = "Look into a realationship. A real one."sv;
break; break;
case 6: case 6:
msg.set("Quit asking me these deep questions, before I get deeply into you."_jrs); msg = "Quit asking me these deep questions, before I get deeply into you."sv;
break; break;
case 7: case 7:
msg.set("Fuck you."_jrs); msg = "Fuck you."sv;
break; break;
case 8: case 8:
msg.set("Fuck me."_jrs); msg = "Fuck me."sv;
break; break;
case 9: case 9:
msg.set("Good thing I bend that way!"_jrs); msg = "Good thing I bend that way!"sv;
break; break;
case 10: case 10:
msg = "Hai "s + nick + "!"; msg = jessilib::join<std::string>("Hai "sv, nick, "!"sv);
break; break;
case 11: case 11:
msg = "Let's ban "s + nick + "!"; msg = jessilib::join<std::string>("Let's ban "sv, nick, "!"sv);
break; break;
case 12: case 12:
msg.set("Fuck your lineage."_jrs); msg = "Fuck your lineage."sv;
break; break;
case 13: case 13:
if (channel == "#Jail"sv) if (channel == "#Jail"sv) {
msg.set("Ask me those kind of questions in #Politics"_jrs); msg = "Ask me those kind of questions in #Politics"sv;
else }
msg.set("Ask me those kind of questions in #Jail"_jrs); else {
msg = "Ask me those kind of questions in #Jail"sv;
}
break; break;
case 14: case 14:
msg.set("I don't talk to slut-mongers."_jrs); msg = "I don't talk to slut-mongers."sv;
break; break;
case 15: case 15:
msg.set("I only talk to slut-mongers."_jrs); msg = "I only talk to slut-mongers."sv;
break; break;
case 16: case 16:
msg.set("Nuclear launch detected."_jrs); msg = "Nuclear launch detected."sv;
break; break;
case 17: case 17:
msg.set("404 - Not found."_jrs); msg = "404 - Not found."sv;
break; break;
case 18: case 18:
msg.set("I hurr u liek mudkipz?"_jrs); msg = "I hurr u liek mudkipz?"sv;
break; break;
case 19: case 19:
msg.set("Fortune might be in your favor."_jrs); msg = "Fortune might be in your favor."sv;
break; break;
case 20: case 20:
msg.set("Fortune might not be in your favor."_jrs); msg = "Fortune might not be in your favor."sv;
break; break;
case 21: case 21:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, you're going to hell."_jrs); msg = "Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, you're going to hell."sv;
break; break;
case 22: case 22:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, yes!"_jrs); msg = "Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, yes!"sv;
break; break;
case 23: case 23:
msg.set("Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, it's approximately as likely as getting a \"yes\" from me."_jrs); msg = "Based on the tragectory of James Bond (9007) in relationship to the 9th circle of hell located on the 3rd planet of Sol, it's approximately as likely as getting a \"yes\" from me."sv;
break; break;
case 24: case 24:
msg.set("Fucking campers."_jrs); msg = "Fucking campers."sv;
break; break;
case 25: case 25:
msg.set("The 8ball seems to be stuck. Try again later. (Dang, you can't even get an 8ball to work for you? That's pretty sad yo)"_jrs); msg = "The 8ball seems to be stuck. Try again later. (Dang, you can't even get an 8ball to work for you? That's pretty sad yo)"sv;
break; break;
case 26: case 26:
msg.set("The 8ball says... Go away? Wow, it really must not like you. Go away."_jrs); msg = "The 8ball says... Go away? Wow, it really must not like you. Go away."sv;
break; break;
case 27: case 27:
msg.set("Swag"_jrs); msg = "Swag"sv;
break; break;
case 28: case 28:
msg.set("Based on the orbit and trajectory of the 33rd moon of the planet assinine 6, no."_jrs); msg = "Based on the orbit and trajectory of the 33rd moon of the planet assinine 6, no."sv;
break; break;
case 29: case 29:
msg.set("Based on the orbin and trajectory of the moon assinsix 9, yes!"_jrs); msg = "Based on the orbin and trajectory of the moon assinsix 9, yes!"sv;
break; break;
case 30: case 30:
msg.set("Come visit me on the 5th planet away from Sol, and I'll give you whatever you want."_jrs); msg = "Come visit me on the 5th planet away from Sol, and I'll give you whatever you want."sv;
break; break;
default: default:
msg.set("Nothingness. You suck. Go rot."_jrs); msg = "Nothingness. You suck. Go rot."sv;
break; break;
} }
source->sendMessage(channel, msg); source->sendMessage(channel, msg);
@ -146,7 +147,7 @@ void EightBallIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std
std::string_view EightBallIRCCommand::getHelp(std::string_view ) std::string_view EightBallIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Accurately answers your question 60% of the time, EVERY time. Syntax: 8ball [question]"); static constexpr std::string_view defaultHelp = "Accurately answers your question 60% of the time, EVERY time. Syntax: 8ball [question]"sv;
return defaultHelp; return defaultHelp;
} }
@ -156,43 +157,43 @@ IRC_COMMAND_INIT(EightBallIRCCommand)
ResolveGenericCommand::ResolveGenericCommand() ResolveGenericCommand::ResolveGenericCommand()
{ {
this->addTrigger("resolve"_jrs); this->addTrigger("resolve"sv);
} }
Jupiter::GenericCommand::ResponseLine *ResolveGenericCommand::trigger(std::string_view parameters) { Jupiter::GenericCommand::ResponseLine *ResolveGenericCommand::trigger(std::string_view parameters) {
auto command_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto command_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (command_split.second.empty()) { if (command_split.second.empty()) {
return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve <hostname|ip> <address>"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: resolve <hostname|ip> <address>"sv, GenericCommand::DisplayType::PrivateError);
} }
std::string_view subcommand = command_split.first; std::string_view subcommand = command_split.first;
if (jessilib::equalsi(subcommand, "hostname"sv) if (jessilib::equalsi(subcommand, "hostname"sv)
|| jessilib::equalsi(subcommand, "host"sv)) || jessilib::equalsi(subcommand, "host"sv))
{ {
Jupiter::ReferenceString resolved = Jupiter::Socket::resolveHostname(static_cast<std::string>(command_split.second).c_str(), 0); std::string_view resolved = Jupiter::Socket::resolveHostname(static_cast<std::string>(command_split.second).c_str(), 0);
if (resolved.empty()) if (resolved.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."sv, GenericCommand::DisplayType::PublicError);
return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess);
} }
else if (jessilib::equalsi(subcommand, "ip"sv)) else if (jessilib::equalsi(subcommand, "ip"sv))
{ {
Jupiter::ReferenceString resolved = Jupiter::Socket::resolveAddress(static_cast<std::string>(command_split.second).c_str(), 0); std::string_view resolved = Jupiter::Socket::resolveAddress(static_cast<std::string>(command_split.second).c_str(), 0);
if (resolved.empty()) if (resolved.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."_jrs, GenericCommand::DisplayType::PublicError); return new Jupiter::GenericCommand::ResponseLine("Error: Unable to resolve."sv, GenericCommand::DisplayType::PublicError);
return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine(resolved, GenericCommand::DisplayType::PublicSuccess);
} }
return new Jupiter::GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Invalid type. You can only resolve hostnames and IP addresses."sv, GenericCommand::DisplayType::PrivateError);
} }
std::string_view ResolveGenericCommand::getHelp(std::string_view parameters) std::string_view ResolveGenericCommand::getHelp(std::string_view parameters)
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Resolves an IP address or hostname. Syntax: resolve <hostname|ip> <address>"); static constexpr std::string_view defaultHelp = "Resolves an IP address or hostname. Syntax: resolve <hostname|ip> <address>"sv;
static STRING_LITERAL_AS_NAMED_REFERENCE(hostHelp, "Resolves a hostname to an IP address. Syntax: resolve hostname <address>"); static constexpr std::string_view hostHelp = "Resolves a hostname to an IP address. Syntax: resolve hostname <address>"sv;
static STRING_LITERAL_AS_NAMED_REFERENCE(ipHelp, "Reverse-resolves an IP address to a hostname. Syntax: resolve ip <address>"); static constexpr std::string_view ipHelp = "Reverse-resolves an IP address to a hostname. Syntax: resolve ip <address>"sv;
if (jessilib::equalsi(parameters, "hostname"_jrs) || jessilib::equalsi(parameters, "host"_jrs)) if (jessilib::equalsi(parameters, "hostname"sv) || jessilib::equalsi(parameters, "host"sv))
return hostHelp; return hostHelp;
if (jessilib::equalsi(parameters, "ip"_jrs)) if (jessilib::equalsi(parameters, "ip"sv))
return ipHelp; return ipHelp;
return defaultHelp; return defaultHelp;

15
src/Plugins/HTTPServer/HTTPServer.cpp

@ -18,32 +18,27 @@
#include "HTTPServer.h" #include "HTTPServer.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool HTTPServerPlugin::initialize() { bool HTTPServerPlugin::initialize() {
return HTTPServerPlugin::server.bind(this->config.get("BindAddress"_jrs, "0.0.0.0"sv), this->config.get<uint16_t>("BindPort"_jrs, 80)); return HTTPServerPlugin::server.bind(this->config.get("BindAddress"sv, "0.0.0.0"sv), this->config.get<uint16_t>("BindPort"sv, 80));
} }
int HTTPServerPlugin::think() int HTTPServerPlugin::think() {
{
return HTTPServerPlugin::server.think(); return HTTPServerPlugin::server.think();
} }
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
HTTPServerPlugin pluginInstance; HTTPServerPlugin pluginInstance;
HTTPServerPlugin &getHTTPServerPlugin() HTTPServerPlugin &getHTTPServerPlugin() {
{
return pluginInstance; return pluginInstance;
} }
Jupiter::HTTP::Server &getHTTPServer() Jupiter::HTTP::Server &getHTTPServer() {
{
return pluginInstance.server; return pluginInstance.server;
} }
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

2
src/Plugins/HTTPServer/HTTPServer.h

@ -25,8 +25,6 @@
*/ */
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/String.hpp"
#include "Jupiter/HTTP_Server.h" #include "Jupiter/HTTP_Server.h"
#include "Jupiter_Bot.h" #include "Jupiter_Bot.h"

5
src/Plugins/IRC.Core/IRC_Core.cpp

@ -18,11 +18,12 @@
#include "jessilib/word_split.hpp" #include "jessilib/word_split.hpp"
#include "Jupiter/GenericCommand.h" #include "Jupiter/GenericCommand.h"
#include "Jupiter/Functions.h"
#include "ServerManager.h" #include "ServerManager.h"
#include "IRC_Command.h" #include "IRC_Command.h"
#include "IRC_Core.h" #include "IRC_Core.h"
using namespace Jupiter::literals; using namespace std::literals;
IRCCorePlugin::~IRCCorePlugin() { IRCCorePlugin::~IRCCorePlugin() {
// Destroy all IRC connections on plugin unload // Destroy all IRC connections on plugin unload
@ -33,7 +34,7 @@ IRCCorePlugin::~IRCCorePlugin() {
bool IRCCorePlugin::initialize() { bool IRCCorePlugin::initialize() {
// TODO: initialize() isn't bringing in generic commands from already-loaded plugins // TODO: initialize() isn't bringing in generic commands from already-loaded plugins
std::string_view serverList = this->config.get("Servers"_jrs); std::string_view serverList = this->config.get("Servers"sv);
if (!serverList.empty()) { if (!serverList.empty()) {
serverManager->setConfig(this->config); serverManager->setConfig(this->config);

1
src/Plugins/IRC.Core/IRC_Core.h

@ -20,7 +20,6 @@
#define _IRC_CORE_H_HEADER #define _IRC_CORE_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
class IRCCorePlugin : public Jupiter::Plugin class IRCCorePlugin : public Jupiter::Plugin
{ {

9
src/Plugins/Plugin.Example/Example.cpp

@ -9,28 +9,27 @@
#include "Example.h" #include "Example.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
using namespace Jupiter::literals;
void ExamplePlugin::OnConnect(Jupiter::IRC::Client *server) void ExamplePlugin::OnConnect(Jupiter::IRC::Client *server)
{ {
server->sendNotice("Agent"_jrs, "Honey, I'm home!"_jrs); server->sendNotice("Agent"sv, "Honey, I'm home!"sv);
} }
// Example IRC Command Implementation // Example IRC Command Implementation
void ExampleIRCCommand::create() void ExampleIRCCommand::create()
{ {
this->addTrigger("example"_jrs); this->addTrigger("example"sv);
} }
void ExampleIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) void ExampleIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters)
{ {
source->sendMessage(channel, "This is an example command!"_jrs); source->sendMessage(channel, "This is an example command!"sv);
} }
std::string_view ExampleIRCCommand::getHelp(std::string_view ) std::string_view ExampleIRCCommand::getHelp(std::string_view )
{ {
static auto helpmsg = "This is just an example command. It takes no parameters!"_jrs; static auto helpmsg = "This is just an example command. It takes no parameters!"sv;
return helpmsg; return helpmsg;
} }

1
src/Plugins/Plugin.Template/Example.h

@ -10,7 +10,6 @@
#define _EXAMPLE_H_HEADER #define _EXAMPLE_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
class TPlugin : public Jupiter::Plugin class TPlugin : public Jupiter::Plugin
{ {

45
src/Plugins/PluginManager/PluginManager.cpp

@ -23,15 +23,14 @@
#include "jessilib/unicode.hpp" #include "jessilib/unicode.hpp"
#include "PluginManager.h" #include "PluginManager.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
// Plugin Generic Command // Plugin Generic Command
PluginGenericCommand::PluginGenericCommand() { PluginGenericCommand::PluginGenericCommand() {
this->addTrigger(STRING_LITERAL_AS_REFERENCE("plugin")); this->addTrigger("plugin"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("plugins")); this->addTrigger("plugins"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("module")); this->addTrigger("module"sv);
this->addTrigger(STRING_LITERAL_AS_REFERENCE("modules")); this->addTrigger("modules"sv);
} }
Jupiter::GenericCommand::ResponseLine *PluginGenericCommand::trigger(std::string_view parameters) { Jupiter::GenericCommand::ResponseLine *PluginGenericCommand::trigger(std::string_view parameters) {
@ -61,23 +60,23 @@ Jupiter::GenericCommand::ResponseLine *PluginGenericCommand::trigger(std::string
auto split_params = jessilib::word_split_once_view(parameters_view, WHITESPACE_SV); auto split_params = jessilib::word_split_once_view(parameters_view, WHITESPACE_SV);
if (jessilib::starts_withi(parameters_view, "load "sv)) { if (jessilib::starts_withi(parameters_view, "load "sv)) {
if (Jupiter::Plugin::load(split_params.second) == nullptr) { if (Jupiter::Plugin::load(split_params.second) == nullptr) {
return result->set("Error: Failed to load plugin."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Failed to load plugin."sv, GenericCommand::DisplayType::PublicError);
} }
return result->set("Plugin successfully loaded."_jrs, GenericCommand::DisplayType::PublicSuccess); return result->set("Plugin successfully loaded."sv, GenericCommand::DisplayType::PublicSuccess);
} }
if (jessilib::starts_withi(parameters_view, "unload "sv)) { if (jessilib::starts_withi(parameters_view, "unload "sv)) {
auto plugin = find_plugin(split_params.second); auto plugin = find_plugin(split_params.second);
if (plugin == nullptr) { if (plugin == nullptr) {
return result->set("Error: Plugin does not exist."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Plugin does not exist."sv, GenericCommand::DisplayType::PublicError);
} }
if (!Jupiter::Plugin::free(plugin)) { if (!Jupiter::Plugin::free(plugin)) {
return result->set("Error: Failed to unload plugin."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Failed to unload plugin."sv, GenericCommand::DisplayType::PublicError);
} }
return result->set("Plugin successfully unloaded."_jrs, GenericCommand::DisplayType::PublicSuccess); return result->set("Plugin successfully unloaded."sv, GenericCommand::DisplayType::PublicSuccess);
} }
if (jessilib::starts_withi(parameters_view, "reload"sv)) { if (jessilib::starts_withi(parameters_view, "reload"sv)) {
@ -88,45 +87,45 @@ Jupiter::GenericCommand::ResponseLine *PluginGenericCommand::trigger(std::string
Jupiter::reinitialize_plugins(); Jupiter::reinitialize_plugins();
}, true); }, true);
return result->set("Triggering full plugin reload..."_jrs, GenericCommand::DisplayType::PublicSuccess); return result->set("Triggering full plugin reload..."sv, GenericCommand::DisplayType::PublicSuccess);
} }
else { else {
// A specific plugin // A specific plugin
auto plugin = find_plugin(split_params.second); auto plugin = find_plugin(split_params.second);
if (plugin == nullptr) { if (plugin == nullptr) {
return result->set("Error: Plugin does not exist."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Plugin does not exist."sv, GenericCommand::DisplayType::PublicError);
} }
std::string_view plugin_name = plugin->getName(); std::string_view plugin_name = plugin->getName();
if (!Jupiter::Plugin::free(plugin)) { if (!Jupiter::Plugin::free(plugin)) {
return result->set("Error: Failed to unload plugin."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Failed to unload plugin."sv, GenericCommand::DisplayType::PublicError);
} }
if (Jupiter::Plugin::load(plugin_name) == nullptr) { if (Jupiter::Plugin::load(plugin_name) == nullptr) {
return result->set("Error: Failed to load plugin."_jrs, GenericCommand::DisplayType::PublicError); return result->set("Error: Failed to load plugin."sv, GenericCommand::DisplayType::PublicError);
} }
return result->set("Plugin successfully reloaded."_jrs, GenericCommand::DisplayType::PublicSuccess); return result->set("Plugin successfully reloaded."sv, GenericCommand::DisplayType::PublicSuccess);
} }
} }
return result->set("Error: Invalid Syntax. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>, <reload> [all|plugin]}"_jrs, GenericCommand::DisplayType::PrivateError); return result->set("Error: Invalid Syntax. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>, <reload> [all|plugin]}"sv, GenericCommand::DisplayType::PrivateError);
} }
std::string_view PluginGenericCommand::getHelp(std::string_view parameters) { std::string_view PluginGenericCommand::getHelp(std::string_view parameters) {
static STRING_LITERAL_AS_NAMED_REFERENCE(loadHelp, "Loads a plugin by file name. Do not include a file extension. Syntax: plugin load <plugin>"); static constexpr std::string_view loadHelp = "Loads a plugin by file name. Do not include a file extension. Syntax: plugin load <plugin>"sv;
static STRING_LITERAL_AS_NAMED_REFERENCE(unloadHelp, "Unloads a plugin by name. Syntax: plugin unload <plugin>"); static constexpr std::string_view unloadHelp = "Unloads a plugin by name. Syntax: plugin unload <plugin>"sv;
static STRING_LITERAL_AS_NAMED_REFERENCE(listHelp, "Lists all of the plugins currently loaded. Syntax: plugin [list]"); static constexpr std::string_view listHelp = "Lists all of the plugins currently loaded. Syntax: plugin [list]"sv;
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Manages plugins. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>, <reload> [plugin]}"); static constexpr std::string_view defaultHelp = "Manages plugins. Syntax: plugin {[list], <load> <plugin>, <unload> <plugin>, <reload> [plugin]}"sv;
if (jessilib::equalsi(parameters, STRING_LITERAL_AS_REFERENCE("load"))) { if (jessilib::equalsi(parameters, "load"sv)) {
return loadHelp; return loadHelp;
} }
if (jessilib::equalsi(parameters, STRING_LITERAL_AS_REFERENCE("unload"))) { if (jessilib::equalsi(parameters, "unload"sv)) {
return unloadHelp; return unloadHelp;
} }
if (jessilib::equalsi(parameters, STRING_LITERAL_AS_REFERENCE("list"))) { if (jessilib::equalsi(parameters, "list"sv)) {
return listHelp; return listHelp;
} }

7
src/Plugins/RenX/RenX.AlwaysRecord/RenX_AlwaysRecord.cpp

@ -19,11 +19,10 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_AlwaysRecord.h" #include "RenX_AlwaysRecord.h"
using namespace Jupiter::literals; using namespace std::literals;
void RenX_AlwaysRecord::RenX_OnMapStart(RenX::Server &server, std::string_view ) void RenX_AlwaysRecord::RenX_OnMapStart(RenX::Server &server, std::string_view ) {
{ server.send("demorec"sv);
server.send("demorec"_jrs);
} }
// Plugin instantiation and entry point. // Plugin instantiation and entry point.

1
src/Plugins/RenX/RenX.AlwaysRecord/RenX_AlwaysRecord.h

@ -20,7 +20,6 @@
#define _RENX_ALWAYSRECORD_H_HEADER #define _RENX_ALWAYSRECORD_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_AlwaysRecord : public RenX::Plugin class RenX_AlwaysRecord : public RenX::Plugin

3
src/Plugins/RenX/RenX.Announcements/RenX_Announcements.cpp

@ -22,7 +22,6 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
RenX_AnnouncementsPlugin pluginInstance; RenX_AnnouncementsPlugin pluginInstance;
@ -83,7 +82,7 @@ bool RenX_AnnouncementsPlugin::initialize()
fputs("[RenX.Announcements] ERROR: No announcements loaded." ENDL, stderr); fputs("[RenX.Announcements] ERROR: No announcements loaded." ENDL, stderr);
return false; return false;
} }
std::chrono::milliseconds delay = std::chrono::seconds(this->config.get<long long>("Delay"_jrs, 60)); std::chrono::milliseconds delay = std::chrono::seconds(this->config.get<long long>("Delay"sv, 60));
RenX_AnnouncementsPlugin::timer = new Jupiter::Timer(0, delay, announce_); RenX_AnnouncementsPlugin::timer = new Jupiter::Timer(0, delay, announce_);
if (RenX_AnnouncementsPlugin::random == false) if (RenX_AnnouncementsPlugin::random == false)
RenX_AnnouncementsPlugin::lastLine = RenX_AnnouncementsPlugin::announcementsFile.getLineCount() - 1; RenX_AnnouncementsPlugin::lastLine = RenX_AnnouncementsPlugin::announcementsFile.getLineCount() - 1;

2
src/Plugins/RenX/RenX.Announcements/RenX_Announcements.h

@ -22,8 +22,6 @@
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Timer.h" #include "Jupiter/Timer.h"
#include "Jupiter/File.h" #include "Jupiter/File.h"
#include "Jupiter/String.hpp"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_AnnouncementsPlugin : public RenX::Plugin class RenX_AnnouncementsPlugin : public RenX::Plugin

1
src/Plugins/RenX/RenX.ChatLogging/RenX_ChatLogging.h

@ -10,7 +10,6 @@
#define _RENX_CHATLOG_H_HEADER #define _RENX_CHATLOG_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_ChatLogPlugin : public RenX::Plugin class RenX_ChatLogPlugin : public RenX::Plugin

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

@ -9,16 +9,16 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <string> #include <string>
#include "jessilib/unicode.hpp"
#include "RenX_CommandLogging.h" #include "RenX_CommandLogging.h"
#include "RenX_GameCommand.h" #include "RenX_GameCommand.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
using namespace Jupiter::literals; using namespace std::literals;
void RenX_CommandLoggingPlugin::PrepFile() void RenX_CommandLoggingPlugin::PrepFile() {
{
// Check if date changed (Format: YYYY-MM-DD) // Check if date changed (Format: YYYY-MM-DD)
std::string current_date = getTimeFormat("%F"); std::string current_date = getTimeFormat("%F");
std::string full_date = getTimeFormat("%c"); std::string full_date = getTimeFormat("%c");
@ -44,39 +44,30 @@ void RenX_CommandLoggingPlugin::PrepFile()
<< std::endl; << std::endl;
} }
bool RenX_CommandLoggingPlugin::initialize() bool RenX_CommandLoggingPlugin::initialize() {
{ RenX_CommandLoggingPlugin::min_access = this->config.get<int>("MinPlayerLevelToLog"sv, 1);
RenX_CommandLoggingPlugin::min_access = this->config.get<int>("MinPlayerLevelToLog"_jrs, 1); RenX_CommandLoggingPlugin::min_cmd_access = this->config.get<int>("MinCommandLevelToLog"sv, 1);
RenX_CommandLoggingPlugin::min_cmd_access = this->config.get<int>("MinCommandLevelToLog"_jrs, 1);
PrepFile(); PrepFile();
return fs.is_open(); return fs.is_open();
} }
RenX_CommandLoggingPlugin::~RenX_CommandLoggingPlugin() RenX_CommandLoggingPlugin::~RenX_CommandLoggingPlugin() {
{
if (fs.is_open()) { if (fs.is_open()) {
fs.close(); fs.close();
} }
} }
void RenX_CommandLoggingPlugin::RenX_OnCommandTriggered(RenX::Server& server, std::string_view trigger, RenX::PlayerInfo& player, std::string_view parameters, RenX::GameCommand& command) void RenX_CommandLoggingPlugin::RenX_OnCommandTriggered(RenX::Server& server, std::string_view trigger, RenX::PlayerInfo& player, std::string_view parameters, RenX::GameCommand& command) {
{
if (player.access < min_access || command.getAccessLevel() < min_cmd_access) { if (player.access < min_access || command.getAccessLevel() < min_cmd_access) {
return; return;
} }
WriteToLog(server, player, static_cast<std::string>(trigger) + " " + parameters); WriteToLog(server, player, jessilib::join<std::string>(trigger, " "sv, parameters));
} }
std::ostream& operator<<(std::ostream& in_stream, std::string_view in_string) { void RenX_CommandLoggingPlugin::WriteToLog(RenX::Server& server, const RenX::PlayerInfo& player, std::string_view message) {
in_stream.write(in_string.data(), in_string.size());
return in_stream;
}
void RenX_CommandLoggingPlugin::WriteToLog(RenX::Server& server, const RenX::PlayerInfo& player, std::string_view message)
{
// Check if new file needs to be opened // Check if new file needs to be opened
PrepFile(); PrepFile();

1
src/Plugins/RenX/RenX.CommandLogging/RenX_CommandLogging.h

@ -10,7 +10,6 @@
#define _RENX_CMDLOGGING_H_HEADER #define _RENX_CMDLOGGING_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_CommandLoggingPlugin : public RenX::Plugin class RenX_CommandLoggingPlugin : public RenX::Plugin

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

File diff suppressed because it is too large

21
src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp

@ -19,12 +19,13 @@
#include <ctime> #include <ctime>
#include <cstdio> #include <cstdio>
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/DataBuffer.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_BanDatabase.h" #include "RenX_BanDatabase.h"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
using namespace Jupiter::literals; using namespace std::literals;
RenX::BanDatabase _banDatabase; RenX::BanDatabase _banDatabase;
RenX::BanDatabase *RenX::banDatabase = &_banDatabase; RenX::BanDatabase *RenX::banDatabase = &_banDatabase;
@ -54,15 +55,15 @@ void RenX::BanDatabase::process_data(Jupiter::DataBuffer &buffer, FILE *file, fp
entry->ip = buffer.pop<uint32_t>(); entry->ip = buffer.pop<uint32_t>();
entry->prefix_length = buffer.pop<uint8_t>(); entry->prefix_length = buffer.pop<uint8_t>();
if (m_read_version >= 5U) if (m_read_version >= 5U)
entry->hwid = buffer.pop<Jupiter::String_Strict, char>(); entry->hwid = buffer.pop<std::string>();
entry->rdns = buffer.pop<Jupiter::String_Strict, char>(); entry->rdns = buffer.pop<std::string>();
entry->name = buffer.pop<Jupiter::String_Strict, char>(); entry->name = buffer.pop<std::string>();
entry->banner = buffer.pop<Jupiter::String_Strict, char>(); entry->banner = buffer.pop<std::string>();
entry->reason = buffer.pop<Jupiter::String_Strict, char>(); entry->reason = buffer.pop<std::string>();
// Read varData from buffer to entry // Read varData from buffer to entry
for (size_t varData_entries = buffer.pop<size_t>(); varData_entries != 0; --varData_entries) { for (size_t varData_entries = buffer.pop<size_t>(); varData_entries != 0; --varData_entries) {
entry->varData[buffer.pop<Jupiter::String_Strict, char>()] = buffer.pop<Jupiter::String_Strict, char>(); entry->varData[buffer.pop<std::string>()] = buffer.pop<std::string>();
} }
m_entries.push_back(std::move(entry)); m_entries.push_back(std::move(entry));
@ -177,12 +178,14 @@ void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo &player
entry->reason = reason; entry->reason = reason;
// add plugin data // add plugin data
Jupiter::String pluginData; std::string pluginData;
for (Plugin* plugin : RenX::getCore()->getPlugins()) { for (Plugin* plugin : RenX::getCore()->getPlugins()) {
if (plugin->RenX_OnBan(*server, player, pluginData)) { if (plugin->RenX_OnBan(*server, player, pluginData)) {
if (!pluginData.empty()) {
entry->varData[plugin->getName()] = pluginData; entry->varData[plugin->getName()] = pluginData;
} }
} }
}
m_entries.push_back(std::move(entry)); m_entries.push_back(std::move(entry));
write(m_entries.back().get()); write(m_entries.back().get());
@ -240,7 +243,7 @@ const std::vector<std::unique_ptr<RenX::BanDatabase::Entry>>& RenX::BanDatabase:
} }
bool RenX::BanDatabase::initialize() { bool RenX::BanDatabase::initialize() {
m_filename = static_cast<std::string>(RenX::getCore()->getConfig().get("BanDB"_jrs, "Bans.db"_jrs)); m_filename = RenX::getCore()->getConfig().get("BanDB"sv, "Bans.db"s);
return this->process_file(m_filename); return this->process_file(m_filename);
} }

3
src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h

@ -22,7 +22,6 @@
#include <cstdint> #include <cstdint>
#include <unordered_map> #include <unordered_map>
#include "Jupiter/Database.h" #include "Jupiter/Database.h"
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
/** DLL Linkage Nagging */ /** DLL Linkage Nagging */
@ -78,7 +77,7 @@ namespace RenX
*/ */
struct RENX_API Entry struct RENX_API Entry
{ {
using VarDataTableType = std::unordered_map<Jupiter::StringS, Jupiter::StringS, Jupiter::default_hash_function>; using VarDataTableType = std::unordered_map<std::string, std::string, Jupiter::default_hash_function, std::equal_to<>>;
fpos_t pos; /** Position of the entry in the database */ fpos_t pos; /** Position of the entry in the database */
uint16_t flags /** Flags affecting this ban entry (See below for flags) */ = 0x00; uint16_t flags /** Flags affecting this ban entry (See below for flags) */ = 0x00;

1
src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h

@ -24,7 +24,6 @@
* @brief Defines the BuildingInfo structure. * @brief Defines the BuildingInfo structure.
*/ */
#include "Jupiter/String.hpp"
#include "Jupiter/Config.h" #include "Jupiter/Config.h"
#include "RenX.h" #include "RenX.h"

10
src/Plugins/RenX/RenX.Core/RenX_Core.cpp

@ -30,7 +30,7 @@
#include "RenX_ExemptionDatabase.h" #include "RenX_ExemptionDatabase.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals; using namespace std::literals;
RenX::Core pluginInstance; RenX::Core pluginInstance;
RenX::Core *RenXInstance = &pluginInstance; RenX::Core *RenXInstance = &pluginInstance;
@ -45,8 +45,8 @@ bool RenX::Core::initialize() {
RenX::tags->initialize(); RenX::tags->initialize();
RenX::initTranslations(this->config); RenX::initTranslations(this->config);
std::string_view serverList = this->config.get("Servers"_jrs); std::string_view serverList = this->config.get("Servers"sv);
m_commandsFile.read(this->config.get("CommandsFile"_jrs, "RenXGameCommands.ini"_jrs)); m_commandsFile.read(this->config.get("CommandsFile"sv, "RenXGameCommands.ini"sv));
auto server_entries = jessilib::word_split_view(serverList, WHITESPACE_SV); auto server_entries = jessilib::word_split_view(serverList, WHITESPACE_SV);
for (const auto& entry : server_entries) { for (const auto& entry : server_entries) {
@ -89,7 +89,7 @@ size_t RenX::Core::getServerIndex(RenX::Server *server) {
} }
} }
return Jupiter::INVALID_INDEX; return SIZE_MAX;
} }
RenX::Server* RenX::Core::getServer(size_t index) { RenX::Server* RenX::Core::getServer(size_t index) {
@ -137,7 +137,7 @@ size_t RenX::Core::removeServer(RenX::Server *server) {
} }
} }
return Jupiter::INVALID_INDEX; return SIZE_MAX;
} }
bool RenX::Core::hasServer(RenX::Server* in_server) { bool RenX::Core::hasServer(RenX::Server* in_server) {

7
src/Plugins/RenX/RenX.Core/RenX_ExemptionDatabase.cpp

@ -18,12 +18,13 @@
#include <cstdio> #include <cstdio>
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/DataBuffer.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_ExemptionDatabase.h" #include "RenX_ExemptionDatabase.h"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
using namespace Jupiter::literals; using namespace std::literals;
RenX::ExemptionDatabase g_exemptionDatabase; RenX::ExemptionDatabase g_exemptionDatabase;
RenX::ExemptionDatabase *RenX::exemptionDatabase = &g_exemptionDatabase; RenX::ExemptionDatabase *RenX::exemptionDatabase = &g_exemptionDatabase;
@ -40,7 +41,7 @@ void RenX::ExemptionDatabase::process_data(Jupiter::DataBuffer &buffer, FILE *fi
entry->steamid = buffer.pop<uint64_t>(); entry->steamid = buffer.pop<uint64_t>();
entry->ip = buffer.pop<uint32_t>(); entry->ip = buffer.pop<uint32_t>();
entry->prefix_length = buffer.pop<uint8_t>(); entry->prefix_length = buffer.pop<uint8_t>();
entry->setter = buffer.pop<Jupiter::String_Strict, char>(); entry->setter = buffer.pop<std::string>();
m_entries.push_back(std::move(entry)); m_entries.push_back(std::move(entry));
} }
@ -167,7 +168,7 @@ const std::vector<std::unique_ptr<RenX::ExemptionDatabase::Entry>>& RenX::Exempt
} }
bool RenX::ExemptionDatabase::initialize() { bool RenX::ExemptionDatabase::initialize() {
m_filename = static_cast<std::string>(RenX::getCore()->getConfig().get("ExemptionDB"_jrs, "Exemptions.db"_jrs)); m_filename = RenX::getCore()->getConfig().get("ExemptionDB"sv, "Exemptions.db"s);
return this->process_file(m_filename); return this->process_file(m_filename);
} }

1
src/Plugins/RenX/RenX.Core/RenX_ExemptionDatabase.h

@ -22,7 +22,6 @@
#include <cstdint> #include <cstdint>
#include <chrono> #include <chrono>
#include "Jupiter/Database.h" #include "Jupiter/Database.h"
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
/** DLL Linkage Nagging */ /** DLL Linkage Nagging */

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

@ -26,23 +26,22 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
/** Team color translations */ /** Team color translations */
Jupiter::ReferenceString NodColor = "04"; static std::string_view NodColor = "04";
Jupiter::ReferenceString GDIColor = "08"; static std::string_view GDIColor = "08";
Jupiter::ReferenceString OtherColor = "14"; static std::string_view OtherColor = "14";
/** Short team name translations */ /** Short team name translations */
Jupiter::ReferenceString NodShortName = "Nod"; static std::string_view NodShortName = "Nod";
Jupiter::ReferenceString GDIShortName = "GDI"; static std::string_view GDIShortName = "GDI";
Jupiter::ReferenceString OtherShortName = "N/A"; static std::string_view OtherShortName = "N/A";
/** Long team name translations */ /** Long team name translations */
Jupiter::ReferenceString NodLongName = "Brotherhood of Nod"; static std::string_view NodLongName = "Brotherhood of Nod";
Jupiter::ReferenceString GDILongName = "Global Defense Initiative"; static std::string_view GDILongName = "Global Defense Initiative";
Jupiter::ReferenceString OtherLongName = "Unknown"; static std::string_view OtherLongName = "Unknown";
/** RenegadeX RCON protocol message deliminator */ /** RenegadeX RCON protocol message deliminator */
const char RenX::DelimC = '\x02'; const char RenX::DelimC = '\x02';
@ -51,304 +50,304 @@ const std::string_view RenX::DevBotName = "DevBot"sv;
/** WinType translations */ /** WinType translations */
Jupiter::ReferenceString scoreWinTypeTranslation = "Domination (High Score)"; static std::string_view scoreWinTypeTranslation = "Domination (High Score)";
Jupiter::ReferenceString baseWinTypeTranslation = "Conquest (Base Destruction)"; static std::string_view baseWinTypeTranslation = "Conquest (Base Destruction)";
Jupiter::ReferenceString beaconWinTypeTranslation = "Espionage (Beacon)"; static std::string_view beaconWinTypeTranslation = "Espionage (Beacon)";
Jupiter::ReferenceString tieWinTypeTranslation = "Draw (Tie)"; static std::string_view tieWinTypeTranslation = "Draw (Tie)";
Jupiter::ReferenceString shutdownWinTypeTranslation = "Ceasefire (Shutdown)"; static std::string_view shutdownWinTypeTranslation = "Ceasefire (Shutdown)";
Jupiter::ReferenceString surrenderWinTypeTranslation = "Forfeit (Surrender)"; static std::string_view surrenderWinTypeTranslation = "Forfeit (Surrender)";
Jupiter::ReferenceString unknownWinTypeTranslation = "Aliens (Unknown)"; static std::string_view unknownWinTypeTranslation = "Aliens (Unknown)";
/** WinType plain translations */ /** WinType plain translations */
Jupiter::ReferenceString scoreWinTypePlainTranslation = "High Score"; static std::string_view scoreWinTypePlainTranslation = "High Score";
Jupiter::ReferenceString baseWinTypePlainTranslation = "Base Destruction"; static std::string_view baseWinTypePlainTranslation = "Base Destruction";
Jupiter::ReferenceString beaconWinTypePlainTranslation = "Beacon"; static std::string_view beaconWinTypePlainTranslation = "Beacon";
Jupiter::ReferenceString tieWinTypePlainTranslation = "Tie"; static std::string_view tieWinTypePlainTranslation = "Tie";
Jupiter::ReferenceString shutdownWinTypePlainTranslation = "Shutdown"; static std::string_view shutdownWinTypePlainTranslation = "Shutdown";
Jupiter::ReferenceString surrenderWinTypePlainTranslation = "Surrender"; static std::string_view surrenderWinTypePlainTranslation = "Surrender";
Jupiter::ReferenceString unknownWinTypePlainTranslation = "Unknown"; static std::string_view unknownWinTypePlainTranslation = "Unknown";
/** Vote translations */ /** Vote translations */
Jupiter::ReferenceString translated_VoteMenuChoice_AddBots = STRING_LITERAL_AS_REFERENCE("Add Bots"); static constexpr std::string_view translated_VoteMenuChoice_AddBots = "Add Bots"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_ChangeMap = STRING_LITERAL_AS_REFERENCE("Change Map"); static constexpr std::string_view translated_VoteMenuChoice_ChangeMap = "Change Map"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_Donate = STRING_LITERAL_AS_REFERENCE("Donate"); static constexpr std::string_view translated_VoteMenuChoice_Donate = "Donate"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_Kick = STRING_LITERAL_AS_REFERENCE("Kick"); static constexpr std::string_view translated_VoteMenuChoice_Kick = "Kick"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_RemoveBots = STRING_LITERAL_AS_REFERENCE("Remove Bots"); static constexpr std::string_view translated_VoteMenuChoice_RemoveBots = "Remove Bots"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_RestartMatch = STRING_LITERAL_AS_REFERENCE("Restart Match"); static constexpr std::string_view translated_VoteMenuChoice_RestartMatch = "Restart Match"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_StartMatch = STRING_LITERAL_AS_REFERENCE("Start Match"); static constexpr std::string_view translated_VoteMenuChoice_StartMatch = "Start Match"sv;
Jupiter::ReferenceString translated_VoteMenuChoice_Survey = STRING_LITERAL_AS_REFERENCE("Survey"); static constexpr std::string_view translated_VoteMenuChoice_Survey = "Survey"sv;
/** Object / damage type translations */ /** Object / damage type translations */
/** Nod Vehicles */ /** Nod Vehicles */
Jupiter::ReferenceString translated_Vehicle_Harvester_Nod = STRING_LITERAL_AS_REFERENCE("Nod Harvester"); static constexpr std::string_view translated_Vehicle_Harvester_Nod = "Nod Harvester"sv;
Jupiter::ReferenceString translated_Vehicle_Buggy = STRING_LITERAL_AS_REFERENCE("Buggy"); static constexpr std::string_view translated_Vehicle_Buggy = "Buggy"sv;
Jupiter::ReferenceString translated_Vehicle_Artillery = STRING_LITERAL_AS_REFERENCE("Mobile Artillery"); static constexpr std::string_view translated_Vehicle_Artillery = "Mobile Artillery"sv;
Jupiter::ReferenceString translated_Vehicle_APC_Nod = STRING_LITERAL_AS_REFERENCE("Nod APC"); static constexpr std::string_view translated_Vehicle_APC_Nod = "Nod APC"sv;
Jupiter::ReferenceString translated_Vehicle_LightTank = STRING_LITERAL_AS_REFERENCE("Light Tank"); static constexpr std::string_view translated_Vehicle_LightTank = "Light Tank"sv;
Jupiter::ReferenceString translated_Vehicle_FlameTank = STRING_LITERAL_AS_REFERENCE("Flame Tank"); static constexpr std::string_view translated_Vehicle_FlameTank = "Flame Tank"sv;
Jupiter::ReferenceString translated_Vehicle_StealthTank = STRING_LITERAL_AS_REFERENCE("Stealth Tank"); static constexpr std::string_view translated_Vehicle_StealthTank = "Stealth Tank"sv;
Jupiter::ReferenceString translated_Vehicle_Chinook_Nod = STRING_LITERAL_AS_REFERENCE("Nod Chinook"); static constexpr std::string_view translated_Vehicle_Chinook_Nod = "Nod Chinook"sv;
Jupiter::ReferenceString translated_Vehicle_Apache = STRING_LITERAL_AS_REFERENCE("Apache"); static constexpr std::string_view translated_Vehicle_Apache = "Apache"sv;
Jupiter::ReferenceString translated_Vehicle_ReconBike = STRING_LITERAL_AS_REFERENCE("Recon Bike"); static constexpr std::string_view translated_Vehicle_ReconBike = "Recon Bike"sv;
Jupiter::ReferenceString translated_Vehicle_TickTank = STRING_LITERAL_AS_REFERENCE("Tick Tank"); static constexpr std::string_view translated_Vehicle_TickTank = "Tick Tank"sv;
/** GDI Vehicles */ /** GDI Vehicles */
Jupiter::ReferenceString translated_Vehicle_Harvester_GDI = STRING_LITERAL_AS_REFERENCE("GDI Harvester"); static constexpr std::string_view translated_Vehicle_Harvester_GDI = "GDI Harvester"sv;
Jupiter::ReferenceString translated_Vehicle_Humvee = STRING_LITERAL_AS_REFERENCE("Humvee"); static constexpr std::string_view translated_Vehicle_Humvee = "Humvee"sv;
Jupiter::ReferenceString translated_Vehicle_MRLS = STRING_LITERAL_AS_REFERENCE("Mobile Rocket Launcher System"); static constexpr std::string_view translated_Vehicle_MRLS = "Mobile Rocket Launcher System"sv;
Jupiter::ReferenceString translated_Vehicle_APC_GDI = STRING_LITERAL_AS_REFERENCE("GDI APC"); static constexpr std::string_view translated_Vehicle_APC_GDI = "GDI APC"sv;
Jupiter::ReferenceString translated_Vehicle_MediumTank = STRING_LITERAL_AS_REFERENCE("Medium Tank"); static constexpr std::string_view translated_Vehicle_MediumTank = "Medium Tank"sv;
Jupiter::ReferenceString translated_Vehicle_MammothTank = STRING_LITERAL_AS_REFERENCE("Mammoth Tank"); static constexpr std::string_view translated_Vehicle_MammothTank = "Mammoth Tank"sv;
Jupiter::ReferenceString translated_Vehicle_Chinook_GDI = STRING_LITERAL_AS_REFERENCE("GDI Chinook"); static constexpr std::string_view translated_Vehicle_Chinook_GDI = "GDI Chinook"sv;
Jupiter::ReferenceString translated_Vehicle_Orca = STRING_LITERAL_AS_REFERENCE("Orca"); static constexpr std::string_view translated_Vehicle_Orca = "Orca"sv;
Jupiter::ReferenceString translated_Vehicle_HoverMRLS = STRING_LITERAL_AS_REFERENCE("Hover MRLS"); static constexpr std::string_view translated_Vehicle_HoverMRLS = "Hover MRLS"sv;
Jupiter::ReferenceString translated_Vehicle_Titan = STRING_LITERAL_AS_REFERENCE("Titan"); static constexpr std::string_view translated_Vehicle_Titan = "Titan"sv;
Jupiter::ReferenceString translated_Vehicle_Wolverine = STRING_LITERAL_AS_REFERENCE("Wolverine"); static constexpr std::string_view translated_Vehicle_Wolverine = "Wolverine"sv;
/** Other Vehicles */ /** Other Vehicles */
Jupiter::ReferenceString translated_Vehicle_A10_DmgType_GattlingGun = STRING_LITERAL_AS_REFERENCE("A10 Thunderbolt Gattling Gun"); static constexpr std::string_view translated_Vehicle_A10_DmgType_GattlingGun = "A10 Thunderbolt Gattling Gun"sv;
Jupiter::ReferenceString translated_Vehicle_A10_DmgType_Bomb = STRING_LITERAL_AS_REFERENCE("A10 Thunderbolt Bomb"); static constexpr std::string_view translated_Vehicle_A10_DmgType_Bomb = "A10 Thunderbolt Bomb"sv;
Jupiter::ReferenceString translated_Vehicle_AC130_DmgType_HeavyCannon = STRING_LITERAL_AS_REFERENCE("AC130 Heavy Cannon"); static constexpr std::string_view translated_Vehicle_AC130_DmgType_HeavyCannon = "AC130 Heavy Cannon"sv;
Jupiter::ReferenceString translated_Vehicle_AC130_DmgType_AutoCannon = STRING_LITERAL_AS_REFERENCE("AC130 Auto Cannon"); static constexpr std::string_view translated_Vehicle_AC130_DmgType_AutoCannon = "AC130 Auto Cannon"sv;
/** Weapons */ /** Weapons */
Jupiter::ReferenceString translated_Weapon_HeavyPistol = STRING_LITERAL_AS_REFERENCE("Heavy Pistol"); static constexpr std::string_view translated_Weapon_HeavyPistol = "Heavy Pistol"sv;
Jupiter::ReferenceString translated_Weapon_Carbine = STRING_LITERAL_AS_REFERENCE("Carbine"); static constexpr std::string_view translated_Weapon_Carbine = "Carbine"sv;
Jupiter::ReferenceString translated_Weapon_Airstrike_GDI = STRING_LITERAL_AS_REFERENCE("GDI Airstrike"); static constexpr std::string_view translated_Weapon_Airstrike_GDI = "GDI Airstrike"sv;
Jupiter::ReferenceString translated_Weapon_Airstrike_Nod = STRING_LITERAL_AS_REFERENCE("Nod Airstrike"); static constexpr std::string_view translated_Weapon_Airstrike_Nod = "Nod Airstrike"sv;
Jupiter::ReferenceString translated_Weapon_TiberiumFlechetteRifle = STRING_LITERAL_AS_REFERENCE("Tiberium Flechette Gun"); static constexpr std::string_view translated_Weapon_TiberiumFlechetteRifle = "Tiberium Flechette Gun"sv;
Jupiter::ReferenceString translated_Weapon_TiberiumAutoRifle = STRING_LITERAL_AS_REFERENCE("Tiberium Automatic Rifle"); static constexpr std::string_view translated_Weapon_TiberiumAutoRifle = "Tiberium Automatic Rifle"sv;
Jupiter::ReferenceString translated_Weapon_TiberiumAutoRifle_Blue = STRING_LITERAL_AS_REFERENCE("Blue Tiberium Automatic Rifle Burst"); static constexpr std::string_view translated_Weapon_TiberiumAutoRifle_Blue = "Blue Tiberium Automatic Rifle Burst"sv;
Jupiter::ReferenceString translated_Weapon_EMPGrenade = STRING_LITERAL_AS_REFERENCE("EMP Grenade"); static constexpr std::string_view translated_Weapon_EMPGrenade = "EMP Grenade"sv;
Jupiter::ReferenceString translated_Weapon_SmokeGrenade = STRING_LITERAL_AS_REFERENCE("Smoke Grenade"); static constexpr std::string_view translated_Weapon_SmokeGrenade = "Smoke Grenade"sv;
Jupiter::ReferenceString translated_Weapon_TimedC4 = STRING_LITERAL_AS_REFERENCE("Timed C4"); static constexpr std::string_view translated_Weapon_TimedC4 = "Timed C4"sv;
Jupiter::ReferenceString translated_Weapon_RemoteC4 = STRING_LITERAL_AS_REFERENCE("Remote C4"); static constexpr std::string_view translated_Weapon_RemoteC4 = "Remote C4"sv;
Jupiter::ReferenceString translated_Weapon_ProxyC4 = STRING_LITERAL_AS_REFERENCE("Proximity C4"); static constexpr std::string_view translated_Weapon_ProxyC4 = "Proximity C4"sv;
Jupiter::ReferenceString translated_Weapon_ATMine = STRING_LITERAL_AS_REFERENCE("Anti-Tank Mine"); static constexpr std::string_view translated_Weapon_ATMine = "Anti-Tank Mine"sv;
Jupiter::ReferenceString translated_Weapon_IonCannonBeacon = STRING_LITERAL_AS_REFERENCE("Ion Cannon Beacon"); static constexpr std::string_view translated_Weapon_IonCannonBeacon = "Ion Cannon Beacon"sv;
Jupiter::ReferenceString translated_Weapon_NukeBeacon = STRING_LITERAL_AS_REFERENCE("Nuclear Missile Beacon"); static constexpr std::string_view translated_Weapon_NukeBeacon = "Nuclear Missile Beacon"sv;
Jupiter::ReferenceString translated_Weapon_DeployedC4 = STRING_LITERAL_AS_REFERENCE("Timed C4"); static constexpr std::string_view translated_Weapon_DeployedC4 = "Timed C4"sv;
Jupiter::ReferenceString translated_Weapon_DeployedTimedC4 = STRING_LITERAL_AS_REFERENCE("Timed C4"); static constexpr std::string_view translated_Weapon_DeployedTimedC4 = "Timed C4"sv;
Jupiter::ReferenceString translated_Weapon_DeployedRemoteC4 = STRING_LITERAL_AS_REFERENCE("Remote C4"); static constexpr std::string_view translated_Weapon_DeployedRemoteC4 = "Remote C4"sv;
Jupiter::ReferenceString translated_Weapon_DeployedProxyC4 = STRING_LITERAL_AS_REFERENCE("Proximity C4"); static constexpr std::string_view translated_Weapon_DeployedProxyC4 = "Proximity C4"sv;
Jupiter::ReferenceString translated_Weapon_DeployedATMine = STRING_LITERAL_AS_REFERENCE("Anti-Tank Mine"); static constexpr std::string_view translated_Weapon_DeployedATMine = "Anti-Tank Mine"sv;
Jupiter::ReferenceString translated_Weapon_DeployedIonCannonBeacon = STRING_LITERAL_AS_REFERENCE("Ion Cannon Beacon"); static constexpr std::string_view translated_Weapon_DeployedIonCannonBeacon = "Ion Cannon Beacon"sv;
Jupiter::ReferenceString translated_Weapon_DeployedNukeBeacon = STRING_LITERAL_AS_REFERENCE("Nuclear Missile Beacon"); static constexpr std::string_view translated_Weapon_DeployedNukeBeacon = "Nuclear Missile Beacon"sv;
Jupiter::ReferenceString translated_Weapon_CrateNuke = STRING_LITERAL_AS_REFERENCE("Nuclear Crate Explosion"); static constexpr std::string_view translated_Weapon_CrateNuke = "Nuclear Crate Explosion"sv;
Jupiter::ReferenceString translated_Weapon_DevNuke = STRING_LITERAL_AS_REFERENCE("Nuclear Dev Explosion"); static constexpr std::string_view translated_Weapon_DevNuke = "Nuclear Dev Explosion"sv;
/** Projectiles */ /** Projectiles */
Jupiter::ReferenceString translated_Projectile_EMPGrenade = STRING_LITERAL_AS_REFERENCE("EMP Grenade"); static constexpr std::string_view translated_Projectile_EMPGrenade = "EMP Grenade"sv;
Jupiter::ReferenceString translated_Projectile_SmokeGrenade = STRING_LITERAL_AS_REFERENCE("Smoke Grenade"); static constexpr std::string_view translated_Projectile_SmokeGrenade = "Smoke Grenade"sv;
/** GDI Characters */ /** GDI Characters */
Jupiter::ReferenceString translated_GDI_Deadeye = STRING_LITERAL_AS_REFERENCE("Deadeye"); static constexpr std::string_view translated_GDI_Deadeye = "Deadeye"sv;
Jupiter::ReferenceString translated_GDI_Engineer = STRING_LITERAL_AS_REFERENCE("GDI Engineer"); static constexpr std::string_view translated_GDI_Engineer = "GDI Engineer"sv;
Jupiter::ReferenceString translated_GDI_Grenadier = STRING_LITERAL_AS_REFERENCE("Grenadier"); static constexpr std::string_view translated_GDI_Grenadier = "Grenadier"sv;
Jupiter::ReferenceString translated_GDI_Gunner = STRING_LITERAL_AS_REFERENCE("Gunner"); static constexpr std::string_view translated_GDI_Gunner = "Gunner"sv;
Jupiter::ReferenceString translated_GDI_Havoc = STRING_LITERAL_AS_REFERENCE("Havoc"); static constexpr std::string_view translated_GDI_Havoc = "Havoc"sv;
Jupiter::ReferenceString translated_GDI_Hotwire = STRING_LITERAL_AS_REFERENCE("Hotwire"); static constexpr std::string_view translated_GDI_Hotwire = "Hotwire"sv;
Jupiter::ReferenceString translated_GDI_Marksman = STRING_LITERAL_AS_REFERENCE("GDI Marksman"); static constexpr std::string_view translated_GDI_Marksman = "GDI Marksman"sv;
Jupiter::ReferenceString translated_GDI_McFarland = STRING_LITERAL_AS_REFERENCE("McFarland"); static constexpr std::string_view translated_GDI_McFarland = "McFarland"sv;
Jupiter::ReferenceString translated_GDI_Mobius = STRING_LITERAL_AS_REFERENCE("Mobius"); static constexpr std::string_view translated_GDI_Mobius = "Mobius"sv;
Jupiter::ReferenceString translated_GDI_Officer = STRING_LITERAL_AS_REFERENCE("GDI Officer"); static constexpr std::string_view translated_GDI_Officer = "GDI Officer"sv;
Jupiter::ReferenceString translated_GDI_Patch = STRING_LITERAL_AS_REFERENCE("Patch"); static constexpr std::string_view translated_GDI_Patch = "Patch"sv;
Jupiter::ReferenceString translated_GDI_RocketSoldier = STRING_LITERAL_AS_REFERENCE("GDI Rocket Soldier"); static constexpr std::string_view translated_GDI_RocketSoldier = "GDI Rocket Soldier"sv;
Jupiter::ReferenceString translated_GDI_Shotgunner = STRING_LITERAL_AS_REFERENCE("GDI Shotgunner"); static constexpr std::string_view translated_GDI_Shotgunner = "GDI Shotgunner"sv;
Jupiter::ReferenceString translated_GDI_Soldier = STRING_LITERAL_AS_REFERENCE("GDI Soldier"); static constexpr std::string_view translated_GDI_Soldier = "GDI Soldier"sv;
Jupiter::ReferenceString translated_GDI_Sydney = STRING_LITERAL_AS_REFERENCE("Sydney"); static constexpr std::string_view translated_GDI_Sydney = "Sydney"sv;
/** Nod Characters */ /** Nod Characters */
Jupiter::ReferenceString translated_Nod_BlackHandSniper = STRING_LITERAL_AS_REFERENCE("Black Hand Sniper"); static constexpr std::string_view translated_Nod_BlackHandSniper = "Black Hand Sniper"sv;
Jupiter::ReferenceString translated_Nod_ChemicalTrooper = STRING_LITERAL_AS_REFERENCE("Chemical Trooper"); static constexpr std::string_view translated_Nod_ChemicalTrooper = "Chemical Trooper"sv;
Jupiter::ReferenceString translated_Nod_Engineer = STRING_LITERAL_AS_REFERENCE("Nod Engineer"); static constexpr std::string_view translated_Nod_Engineer = "Nod Engineer"sv;
Jupiter::ReferenceString translated_Nod_FlameTrooper = STRING_LITERAL_AS_REFERENCE("Flame Trooper"); static constexpr std::string_view translated_Nod_FlameTrooper = "Flame Trooper"sv;
Jupiter::ReferenceString translated_Nod_LaserChainGunner = STRING_LITERAL_AS_REFERENCE("Laser Chain Gunner"); static constexpr std::string_view translated_Nod_LaserChainGunner = "Laser Chain Gunner"sv;
Jupiter::ReferenceString translated_Nod_Marksman = STRING_LITERAL_AS_REFERENCE("Nod Marksman"); static constexpr std::string_view translated_Nod_Marksman = "Nod Marksman"sv;
Jupiter::ReferenceString translated_Nod_Mendoza = STRING_LITERAL_AS_REFERENCE("Mendoza"); static constexpr std::string_view translated_Nod_Mendoza = "Mendoza"sv;
Jupiter::ReferenceString translated_Nod_Officer = STRING_LITERAL_AS_REFERENCE("Nod Officer"); static constexpr std::string_view translated_Nod_Officer = "Nod Officer"sv;
Jupiter::ReferenceString translated_Nod_Raveshaw = STRING_LITERAL_AS_REFERENCE("Raveshaw"); static constexpr std::string_view translated_Nod_Raveshaw = "Raveshaw"sv;
Jupiter::ReferenceString translated_Nod_RocketSoldier = STRING_LITERAL_AS_REFERENCE("Nod Rocket Soldier"); static constexpr std::string_view translated_Nod_RocketSoldier = "Nod Rocket Soldier"sv;
Jupiter::ReferenceString translated_Nod_Sakura = STRING_LITERAL_AS_REFERENCE("Sakura"); static constexpr std::string_view translated_Nod_Sakura = "Sakura"sv;
Jupiter::ReferenceString translated_Nod_Shotgunner = STRING_LITERAL_AS_REFERENCE("Nod Shotgunner"); static constexpr std::string_view translated_Nod_Shotgunner = "Nod Shotgunner"sv;
Jupiter::ReferenceString translated_Nod_Soldier = STRING_LITERAL_AS_REFERENCE("Nod Soldier"); static constexpr std::string_view translated_Nod_Soldier = "Nod Soldier"sv;
Jupiter::ReferenceString translated_Nod_StealthBlackHand = STRING_LITERAL_AS_REFERENCE("Stealth Black Hand"); static constexpr std::string_view translated_Nod_StealthBlackHand = "Stealth Black Hand"sv;
Jupiter::ReferenceString translated_Nod_Technician = STRING_LITERAL_AS_REFERENCE("Technician"); static constexpr std::string_view translated_Nod_Technician = "Technician"sv;
/** Non-weapon damage types */ /** Non-weapon damage types */
Jupiter::ReferenceString translated_DmgType_Suicided = STRING_LITERAL_AS_REFERENCE("Suicide"); static constexpr std::string_view translated_DmgType_Suicided = "Suicide"sv;
Jupiter::ReferenceString translated_DmgType_Fell = STRING_LITERAL_AS_REFERENCE("Fall"); static constexpr std::string_view translated_DmgType_Fell = "Fall"sv;
Jupiter::ReferenceString translated_DmgType_Tiberium = STRING_LITERAL_AS_REFERENCE("Tiberium"); static constexpr std::string_view translated_DmgType_Tiberium = "Tiberium"sv;
Jupiter::ReferenceString translated_DmgType_TiberiumBleed = STRING_LITERAL_AS_REFERENCE("Tiberium Decay"); static constexpr std::string_view translated_DmgType_TiberiumBleed = "Tiberium Decay"sv;
Jupiter::ReferenceString translated_DmgType_TiberiumBleed_Blue = STRING_LITERAL_AS_REFERENCE("Blue Tiberium Decay"); static constexpr std::string_view translated_DmgType_TiberiumBleed_Blue = "Blue Tiberium Decay"sv;
Jupiter::ReferenceString translated_DmgType_RanOver = STRING_LITERAL_AS_REFERENCE("Crushed"); static constexpr std::string_view translated_DmgType_RanOver = "Crushed"sv;
/** Infantry weapons */ /** Infantry weapons */
Jupiter::ReferenceString translated_DmgType_Pistol = STRING_LITERAL_AS_REFERENCE("Pistol"); static constexpr std::string_view translated_DmgType_Pistol = "Pistol"sv;
Jupiter::ReferenceString translated_DmgType_SMG = STRING_LITERAL_AS_REFERENCE("Machine Pistol"); static constexpr std::string_view translated_DmgType_SMG = "Machine Pistol"sv;
Jupiter::ReferenceString translated_DmgType_HeavyPistol = STRING_LITERAL_AS_REFERENCE("Heavy Pistol"); static constexpr std::string_view translated_DmgType_HeavyPistol = "Heavy Pistol"sv;
Jupiter::ReferenceString translated_DmgType_Carbine = STRING_LITERAL_AS_REFERENCE("Carbine"); static constexpr std::string_view translated_DmgType_Carbine = "Carbine"sv;
Jupiter::ReferenceString translated_DmgType_TiberiumFlechetteRifle = STRING_LITERAL_AS_REFERENCE("Tiberium Flechette Gun"); // Not a rifle. static constexpr std::string_view translated_DmgType_TiberiumFlechetteRifle = "Tiberium Flechette Gun"sv; // Not a rifle.
Jupiter::ReferenceString translated_DmgType_TiberiumAutoRifle = STRING_LITERAL_AS_REFERENCE("Tiberium Automatic Rifle"); static constexpr std::string_view translated_DmgType_TiberiumAutoRifle = "Tiberium Automatic Rifle"sv;
Jupiter::ReferenceString translated_DmgType_TiberiumAutoRifle_Blue = STRING_LITERAL_AS_REFERENCE("Blue Tiberium Automatic Rifle Burst"); static constexpr std::string_view translated_DmgType_TiberiumAutoRifle_Blue = "Blue Tiberium Automatic Rifle Burst"sv;
Jupiter::ReferenceString translated_DmgType_TiberiumAutoRifle_Flechette_Blue = STRING_LITERAL_AS_REFERENCE("Blue Tiberium Automatic Rifle"); static constexpr std::string_view translated_DmgType_TiberiumAutoRifle_Flechette_Blue = "Blue Tiberium Automatic Rifle"sv;
Jupiter::ReferenceString translated_DmgType_Grenade = STRING_LITERAL_AS_REFERENCE("Grenade"); static constexpr std::string_view translated_DmgType_Grenade = "Grenade"sv;
Jupiter::ReferenceString translated_DmgType_TimedC4 = STRING_LITERAL_AS_REFERENCE("Timed C4"); static constexpr std::string_view translated_DmgType_TimedC4 = "Timed C4"sv;
Jupiter::ReferenceString translated_DmgType_RemoteC4 = STRING_LITERAL_AS_REFERENCE("Remote C4"); static constexpr std::string_view translated_DmgType_RemoteC4 = "Remote C4"sv;
Jupiter::ReferenceString translated_DmgType_ProxyC4 = STRING_LITERAL_AS_REFERENCE("Proximity C4"); static constexpr std::string_view translated_DmgType_ProxyC4 = "Proximity C4"sv;
Jupiter::ReferenceString translated_DmgType_ATMine = STRING_LITERAL_AS_REFERENCE("Anti-Tank Mine"); static constexpr std::string_view translated_DmgType_ATMine = "Anti-Tank Mine"sv;
Jupiter::ReferenceString translated_DmgType_EMPGrenade = STRING_LITERAL_AS_REFERENCE("EMP Grenade"); static constexpr std::string_view translated_DmgType_EMPGrenade = "EMP Grenade"sv;
Jupiter::ReferenceString translated_DmgType_BurnC4 = STRING_LITERAL_AS_REFERENCE("C4 Burn"); static constexpr std::string_view translated_DmgType_BurnC4 = "C4 Burn"sv;
Jupiter::ReferenceString translated_DmgType_FireBleed = STRING_LITERAL_AS_REFERENCE("Fire Burn"); // Caused by C4 or flame weapons static constexpr std::string_view translated_DmgType_FireBleed = "Fire Burn"sv; // Caused by C4 or flame weapons
Jupiter::ReferenceString translated_DmgType_AutoRifle = STRING_LITERAL_AS_REFERENCE("Automatic Rifle"); static constexpr std::string_view translated_DmgType_AutoRifle = "Automatic Rifle"sv;
Jupiter::ReferenceString translated_DmgType_Shotgun = STRING_LITERAL_AS_REFERENCE("Shotgun"); static constexpr std::string_view translated_DmgType_Shotgun = "Shotgun"sv;
Jupiter::ReferenceString translated_DmgType_FlameThrower = STRING_LITERAL_AS_REFERENCE("Flamethrower"); static constexpr std::string_view translated_DmgType_FlameThrower = "Flamethrower"sv;
Jupiter::ReferenceString translated_DmgType_GrenadeLauncher = STRING_LITERAL_AS_REFERENCE("Grenade Launcher"); static constexpr std::string_view translated_DmgType_GrenadeLauncher = "Grenade Launcher"sv;
Jupiter::ReferenceString translated_DmgType_MarksmanRifle = STRING_LITERAL_AS_REFERENCE("Marksman's Rifle"); static constexpr std::string_view translated_DmgType_MarksmanRifle = "Marksman's Rifle"sv;
Jupiter::ReferenceString translated_DmgType_ChainGun = STRING_LITERAL_AS_REFERENCE("Chain Gun"); static constexpr std::string_view translated_DmgType_ChainGun = "Chain Gun"sv;
Jupiter::ReferenceString translated_DmgType_MissileLauncher = STRING_LITERAL_AS_REFERENCE("Missile Launcher"); static constexpr std::string_view translated_DmgType_MissileLauncher = "Missile Launcher"sv;
Jupiter::ReferenceString translated_DmgType_MissileLauncher_Alt = STRING_LITERAL_AS_REFERENCE("Missile Launcher"); static constexpr std::string_view translated_DmgType_MissileLauncher_Alt = "Missile Launcher"sv;
Jupiter::ReferenceString translated_DmgType_ChemicalThrower = STRING_LITERAL_AS_REFERENCE("Chemical Spray Gun"); static constexpr std::string_view translated_DmgType_ChemicalThrower = "Chemical Spray Gun"sv;
Jupiter::ReferenceString translated_DmgType_LaserRifle = STRING_LITERAL_AS_REFERENCE("Laser Rifle"); static constexpr std::string_view translated_DmgType_LaserRifle = "Laser Rifle"sv;
Jupiter::ReferenceString translated_DmgType_TacticalRifle = STRING_LITERAL_AS_REFERENCE("Tactical Rifle"); static constexpr std::string_view translated_DmgType_TacticalRifle = "Tactical Rifle"sv;
Jupiter::ReferenceString translated_DmgType_RocketLauncher = STRING_LITERAL_AS_REFERENCE("Rocket Launcher"); static constexpr std::string_view translated_DmgType_RocketLauncher = "Rocket Launcher"sv;
Jupiter::ReferenceString translated_DmgType_LaserChainGun = STRING_LITERAL_AS_REFERENCE("Laser Chain Gun"); static constexpr std::string_view translated_DmgType_LaserChainGun = "Laser Chain Gun"sv;
Jupiter::ReferenceString translated_DmgType_FlakCannon = STRING_LITERAL_AS_REFERENCE("Flak"); static constexpr std::string_view translated_DmgType_FlakCannon = "Flak"sv;
Jupiter::ReferenceString translated_DmgType_FlakCannon_Alt = STRING_LITERAL_AS_REFERENCE("Concentrated Flak"); static constexpr std::string_view translated_DmgType_FlakCannon_Alt = "Concentrated Flak"sv;
Jupiter::ReferenceString translated_DmgType_SniperRifle = STRING_LITERAL_AS_REFERENCE("Sniper Rifle"); static constexpr std::string_view translated_DmgType_SniperRifle = "Sniper Rifle"sv;
Jupiter::ReferenceString translated_DmgType_RamjetRifle = STRING_LITERAL_AS_REFERENCE("Ramjet"); static constexpr std::string_view translated_DmgType_RamjetRifle = "Ramjet"sv;
Jupiter::ReferenceString translated_DmgType_Railgun = STRING_LITERAL_AS_REFERENCE("Railgun"); static constexpr std::string_view translated_DmgType_Railgun = "Railgun"sv;
Jupiter::ReferenceString translated_DmgType_PersonalIonCannon = STRING_LITERAL_AS_REFERENCE("Personal Ion Cannon"); static constexpr std::string_view translated_DmgType_PersonalIonCannon = "Personal Ion Cannon"sv;
Jupiter::ReferenceString translated_DmgType_VoltRifle = STRING_LITERAL_AS_REFERENCE("Volt Rifle"); static constexpr std::string_view translated_DmgType_VoltRifle = "Volt Rifle"sv;
Jupiter::ReferenceString translated_DmgType_VoltRifle_Alt = STRING_LITERAL_AS_REFERENCE("Volt Rifle Burst"); static constexpr std::string_view translated_DmgType_VoltRifle_Alt = "Volt Rifle Burst"sv;
Jupiter::ReferenceString translated_DmgType_VoltAutoRifle = STRING_LITERAL_AS_REFERENCE("Volt Automatic Rifle"); static constexpr std::string_view translated_DmgType_VoltAutoRifle = "Volt Automatic Rifle"sv;
Jupiter::ReferenceString translated_DmgType_VoltAutoRifle_Alt = STRING_LITERAL_AS_REFERENCE("Volt Automatic Rifle Burst"); static constexpr std::string_view translated_DmgType_VoltAutoRifle_Alt = "Volt Automatic Rifle Burst"sv;
/** Vehicle weapons */ /** Vehicle weapons */
Jupiter::ReferenceString translated_DmgType_MammothTank_Missile = STRING_LITERAL_AS_REFERENCE("Mammoth Tank Missile"); static constexpr std::string_view translated_DmgType_MammothTank_Missile = "Mammoth Tank Missile"sv;
Jupiter::ReferenceString translated_DmgType_MammothTank_Cannon = STRING_LITERAL_AS_REFERENCE("Mammoth Tank Cannon"); static constexpr std::string_view translated_DmgType_MammothTank_Cannon = "Mammoth Tank Cannon"sv;
Jupiter::ReferenceString translated_DmgType_Orca_Missile = STRING_LITERAL_AS_REFERENCE("Orca Missile"); static constexpr std::string_view translated_DmgType_Orca_Missile = "Orca Missile"sv;
Jupiter::ReferenceString translated_DmgType_Orca_Gun = STRING_LITERAL_AS_REFERENCE("Orca Gun"); static constexpr std::string_view translated_DmgType_Orca_Gun = "Orca Gun"sv;
Jupiter::ReferenceString translated_DmgType_Orca_Passenger = STRING_LITERAL_AS_REFERENCE("Orca Passenger Missile"); static constexpr std::string_view translated_DmgType_Orca_Passenger = "Orca Passenger Missile"sv;
Jupiter::ReferenceString translated_DmgType_Apache_Rocket = STRING_LITERAL_AS_REFERENCE("Apache Rocket"); static constexpr std::string_view translated_DmgType_Apache_Rocket = "Apache Rocket"sv;
Jupiter::ReferenceString translated_DmgType_Apache_Gun = STRING_LITERAL_AS_REFERENCE("Apache Gun"); static constexpr std::string_view translated_DmgType_Apache_Gun = "Apache Gun"sv;
Jupiter::ReferenceString translated_DmgType_Apache_Passenger = STRING_LITERAL_AS_REFERENCE("Apache Passenger Missile"); static constexpr std::string_view translated_DmgType_Apache_Passenger = "Apache Passenger Missile"sv;
/** Other weapons */ /** Other weapons */
Jupiter::ReferenceString translated_DmgType_AGT_MG = STRING_LITERAL_AS_REFERENCE("Machine Gun"); static constexpr std::string_view translated_DmgType_AGT_MG = "Machine Gun"sv;
Jupiter::ReferenceString translated_DmgType_AGT_Rocket = STRING_LITERAL_AS_REFERENCE("Rocket"); static constexpr std::string_view translated_DmgType_AGT_Rocket = "Rocket"sv;
Jupiter::ReferenceString translated_DmgType_Obelisk = STRING_LITERAL_AS_REFERENCE("Obelisk Laser"); static constexpr std::string_view translated_DmgType_Obelisk = "Obelisk Laser"sv;
Jupiter::ReferenceString translated_DmgType_GuardTower = STRING_LITERAL_AS_REFERENCE("Guard Tower"); static constexpr std::string_view translated_DmgType_GuardTower = "Guard Tower"sv;
Jupiter::ReferenceString translated_DmgType_Turret = STRING_LITERAL_AS_REFERENCE("Turret"); static constexpr std::string_view translated_DmgType_Turret = "Turret"sv;
Jupiter::ReferenceString translated_DmgType_SAMSite = STRING_LITERAL_AS_REFERENCE("SAM Site"); static constexpr std::string_view translated_DmgType_SAMSite = "SAM Site"sv;
Jupiter::ReferenceString translated_DmgType_AATower = STRING_LITERAL_AS_REFERENCE("Anti-Air Guard Tower"); static constexpr std::string_view translated_DmgType_AATower = "Anti-Air Guard Tower"sv;
Jupiter::ReferenceString translated_DmgType_GunEmpl = STRING_LITERAL_AS_REFERENCE("Gun Emplacement Gattling Gun"); static constexpr std::string_view translated_DmgType_GunEmpl = "Gun Emplacement Gattling Gun"sv;
Jupiter::ReferenceString translated_DmgType_GunEmpl_Alt = STRING_LITERAL_AS_REFERENCE("Gun Emplacement Automatic Cannon"); static constexpr std::string_view translated_DmgType_GunEmpl_Alt = "Gun Emplacement Automatic Cannon"sv;
Jupiter::ReferenceString translated_DmgType_RocketEmpl_Swarm = STRING_LITERAL_AS_REFERENCE("Rocket Emplacement Swarm Missile"); static constexpr std::string_view translated_DmgType_RocketEmpl_Swarm = "Rocket Emplacement Swarm Missile"sv;
Jupiter::ReferenceString translated_DmgType_RocketEmpl_Missile = STRING_LITERAL_AS_REFERENCE("Rocket Emplacement Hellfire Missile"); static constexpr std::string_view translated_DmgType_RocketEmpl_Missile = "Rocket Emplacement Hellfire Missile"sv;
Jupiter::ReferenceString translated_DmgType_Nuke = STRING_LITERAL_AS_REFERENCE("Nuclear Missile Strike"); static constexpr std::string_view translated_DmgType_Nuke = "Nuclear Missile Strike"sv;
Jupiter::ReferenceString translated_DmgType_IonCannon = STRING_LITERAL_AS_REFERENCE("Ion Cannon Strike"); static constexpr std::string_view translated_DmgType_IonCannon = "Ion Cannon Strike"sv;
/** Nod Vehicles */ /** Nod Vehicles */
Jupiter::ReferenceString translated_DmgType_Harvester_Nod = STRING_LITERAL_AS_REFERENCE("Nod Harvester"); static constexpr std::string_view translated_DmgType_Harvester_Nod = "Nod Harvester"sv;
Jupiter::ReferenceString translated_DmgType_Buggy = STRING_LITERAL_AS_REFERENCE("Buggy"); static constexpr std::string_view translated_DmgType_Buggy = "Buggy"sv;
Jupiter::ReferenceString translated_DmgType_Artillery = STRING_LITERAL_AS_REFERENCE("Mobile Artillery"); static constexpr std::string_view translated_DmgType_Artillery = "Mobile Artillery"sv;
Jupiter::ReferenceString translated_DmgType_APC_Nod = STRING_LITERAL_AS_REFERENCE("Nod APC"); static constexpr std::string_view translated_DmgType_APC_Nod = "Nod APC"sv;
Jupiter::ReferenceString translated_DmgType_LightTank = STRING_LITERAL_AS_REFERENCE("Light Tank"); static constexpr std::string_view translated_DmgType_LightTank = "Light Tank"sv;
Jupiter::ReferenceString translated_DmgType_FlameTank = STRING_LITERAL_AS_REFERENCE("Flame Tank"); static constexpr std::string_view translated_DmgType_FlameTank = "Flame Tank"sv;
Jupiter::ReferenceString translated_DmgType_StealthTank = STRING_LITERAL_AS_REFERENCE("Stealth Tank"); static constexpr std::string_view translated_DmgType_StealthTank = "Stealth Tank"sv;
Jupiter::ReferenceString translated_DmgType_Chinook_Nod = STRING_LITERAL_AS_REFERENCE("Nod Chinook"); static constexpr std::string_view translated_DmgType_Chinook_Nod = "Nod Chinook"sv;
Jupiter::ReferenceString translated_DmgType_Apache = STRING_LITERAL_AS_REFERENCE("Apache"); static constexpr std::string_view translated_DmgType_Apache = "Apache"sv;
Jupiter::ReferenceString translated_Vehicle_ReconBike_DmgType = STRING_LITERAL_AS_REFERENCE("Recon Bike"); static constexpr std::string_view translated_Vehicle_ReconBike_DmgType = "Recon Bike"sv;
Jupiter::ReferenceString translated_Vehicle_TickTank_DmgType = STRING_LITERAL_AS_REFERENCE("Tick Tank"); static constexpr std::string_view translated_Vehicle_TickTank_DmgType = "Tick Tank"sv;
/** GDI Vehicles */ /** GDI Vehicles */
Jupiter::ReferenceString translated_DmgType_Harvester_GDI = STRING_LITERAL_AS_REFERENCE("GDI Harvester"); static constexpr std::string_view translated_DmgType_Harvester_GDI = "GDI Harvester"sv;
Jupiter::ReferenceString translated_DmgType_Humvee = STRING_LITERAL_AS_REFERENCE("Humvee"); static constexpr std::string_view translated_DmgType_Humvee = "Humvee"sv;
Jupiter::ReferenceString translated_DmgType_MRLS = STRING_LITERAL_AS_REFERENCE("Mobile Rocket Launcher System"); static constexpr std::string_view translated_DmgType_MRLS = "Mobile Rocket Launcher System"sv;
Jupiter::ReferenceString translated_DmgType_APC_GDI = STRING_LITERAL_AS_REFERENCE("GDI APC"); static constexpr std::string_view translated_DmgType_APC_GDI = "GDI APC"sv;
Jupiter::ReferenceString translated_DmgType_MediumTank = STRING_LITERAL_AS_REFERENCE("Medium Tank"); static constexpr std::string_view translated_DmgType_MediumTank = "Medium Tank"sv;
Jupiter::ReferenceString translated_DmgType_MammothTank = STRING_LITERAL_AS_REFERENCE("Mammoth Tank"); static constexpr std::string_view translated_DmgType_MammothTank = "Mammoth Tank"sv;
Jupiter::ReferenceString translated_DmgType_Chinook_GDI = STRING_LITERAL_AS_REFERENCE("GDI Chinook"); static constexpr std::string_view translated_DmgType_Chinook_GDI = "GDI Chinook"sv;
Jupiter::ReferenceString translated_DmgType_Orca = STRING_LITERAL_AS_REFERENCE("Orca"); static constexpr std::string_view translated_DmgType_Orca = "Orca"sv;
Jupiter::ReferenceString translated_Vehicle_HoverMRLS_DmgType = STRING_LITERAL_AS_REFERENCE("Hover MRLS"); static constexpr std::string_view translated_Vehicle_HoverMRLS_DmgType = "Hover MRLS"sv;
Jupiter::ReferenceString translated_Vehicle_Titan_DmgType = STRING_LITERAL_AS_REFERENCE("Titan"); static constexpr std::string_view translated_Vehicle_Titan_DmgType = "Titan"sv;
Jupiter::ReferenceString translated_Vehicle_Wolverine_DmgType = STRING_LITERAL_AS_REFERENCE("Wolverine"); static constexpr std::string_view translated_Vehicle_Wolverine_DmgType = "Wolverine"sv;
/** Other Vehicles */ /** Other Vehicles */
Jupiter::ReferenceString translated_DmgType_A10_Missile = STRING_LITERAL_AS_REFERENCE("A10 Missile"); static constexpr std::string_view translated_DmgType_A10_Missile = "A10 Missile"sv;
/** Nod structures */ /** Nod structures */
Jupiter::ReferenceString translated_Building_HandOfNod = STRING_LITERAL_AS_REFERENCE("Hand of Nod"); static constexpr std::string_view translated_Building_HandOfNod = "Hand of Nod"sv;
Jupiter::ReferenceString translated_Building_AirTower = STRING_LITERAL_AS_REFERENCE("Airstrip"); static constexpr std::string_view translated_Building_AirTower = "Airstrip"sv;
Jupiter::ReferenceString translated_Building_Airstrip = STRING_LITERAL_AS_REFERENCE("Airstrip"); static constexpr std::string_view translated_Building_Airstrip = "Airstrip"sv;
Jupiter::ReferenceString translated_Building_Refinery_Nod = STRING_LITERAL_AS_REFERENCE("Nod Refinery"); static constexpr std::string_view translated_Building_Refinery_Nod = "Nod Refinery"sv;
Jupiter::ReferenceString translated_Building_PowerPlant_Nod = STRING_LITERAL_AS_REFERENCE("Nod Power Plant"); static constexpr std::string_view translated_Building_PowerPlant_Nod = "Nod Power Plant"sv;
Jupiter::ReferenceString translated_Building_HandOfNod_Internals = STRING_LITERAL_AS_REFERENCE("Hand of Nod"); static constexpr std::string_view translated_Building_HandOfNod_Internals = "Hand of Nod"sv;
Jupiter::ReferenceString translated_Building_AirTower_Internals = STRING_LITERAL_AS_REFERENCE("Airstrip"); static constexpr std::string_view translated_Building_AirTower_Internals = "Airstrip"sv;
Jupiter::ReferenceString translated_Building_Airstrip_Internals = STRING_LITERAL_AS_REFERENCE("Airstrip"); static constexpr std::string_view translated_Building_Airstrip_Internals = "Airstrip"sv;
Jupiter::ReferenceString translated_Building_Refinery_Nod_Internals = STRING_LITERAL_AS_REFERENCE("Nod Refinery"); static constexpr std::string_view translated_Building_Refinery_Nod_Internals = "Nod Refinery"sv;
Jupiter::ReferenceString translated_Building_PowerPlant_Nod_Internals = STRING_LITERAL_AS_REFERENCE("Nod Power Plant"); static constexpr std::string_view translated_Building_PowerPlant_Nod_Internals = "Nod Power Plant"sv;
/** GDI structures */ /** GDI structures */
Jupiter::ReferenceString translated_Building_Barracks = STRING_LITERAL_AS_REFERENCE("Barracks"); static constexpr std::string_view translated_Building_Barracks = "Barracks"sv;
Jupiter::ReferenceString translated_Building_WeaponsFactory = STRING_LITERAL_AS_REFERENCE("Weapons Factory"); static constexpr std::string_view translated_Building_WeaponsFactory = "Weapons Factory"sv;
Jupiter::ReferenceString translated_Building_Refinery_GDI = STRING_LITERAL_AS_REFERENCE("GDI Refinery"); static constexpr std::string_view translated_Building_Refinery_GDI = "GDI Refinery"sv;
Jupiter::ReferenceString translated_Building_PowerPlant_GDI = STRING_LITERAL_AS_REFERENCE("GDI Power Plant"); static constexpr std::string_view translated_Building_PowerPlant_GDI = "GDI Power Plant"sv;
Jupiter::ReferenceString translated_Building_Barracks_Internals = STRING_LITERAL_AS_REFERENCE("Barracks"); static constexpr std::string_view translated_Building_Barracks_Internals = "Barracks"sv;
Jupiter::ReferenceString translated_Building_WeaponsFactory_Internals = STRING_LITERAL_AS_REFERENCE("Weapons Factory"); static constexpr std::string_view translated_Building_WeaponsFactory_Internals = "Weapons Factory"sv;
Jupiter::ReferenceString translated_Building_Refinery_GDI_Internals = STRING_LITERAL_AS_REFERENCE("GDI Refinery"); static constexpr std::string_view translated_Building_Refinery_GDI_Internals = "GDI Refinery"sv;
Jupiter::ReferenceString translated_Building_PowerPlant_GDI_Internals = STRING_LITERAL_AS_REFERENCE("GDI Power Plant"); static constexpr std::string_view translated_Building_PowerPlant_GDI_Internals = "GDI Power Plant"sv;
/** Defense structures */ /** Defense structures */
Jupiter::ReferenceString translated_Building_AdvancedGuardTower = STRING_LITERAL_AS_REFERENCE("Advanced Guard Tower"); static constexpr std::string_view translated_Building_AdvancedGuardTower = "Advanced Guard Tower"sv;
Jupiter::ReferenceString translated_Building_Obelisk = STRING_LITERAL_AS_REFERENCE("Obelisk of Light"); static constexpr std::string_view translated_Building_Obelisk = "Obelisk of Light"sv;
Jupiter::ReferenceString translated_Building_AdvancedGuardTower_Internals = STRING_LITERAL_AS_REFERENCE("Advanced Guard Tower"); static constexpr std::string_view translated_Building_AdvancedGuardTower_Internals = "Advanced Guard Tower"sv;
Jupiter::ReferenceString translated_Building_Obelisk_Internals = STRING_LITERAL_AS_REFERENCE("Obelisk of Light"); static constexpr std::string_view translated_Building_Obelisk_Internals = "Obelisk of Light"sv;
/** Other structures */ /** Other structures */
Jupiter::ReferenceString translated_Building_Silo = STRING_LITERAL_AS_REFERENCE("Tiberium Silo"); static constexpr std::string_view translated_Building_Silo = "Tiberium Silo"sv;
Jupiter::ReferenceString translated_Building_CommCentre = STRING_LITERAL_AS_REFERENCE("Communications Center"); static constexpr std::string_view translated_Building_CommCentre = "Communications Center"sv;
Jupiter::ReferenceString translated_Building_Silo_Internals = STRING_LITERAL_AS_REFERENCE("Tiberium Silo"); static constexpr std::string_view translated_Building_Silo_Internals = "Tiberium Silo"sv;
Jupiter::ReferenceString translated_Building_CommCentre_Internals = STRING_LITERAL_AS_REFERENCE("Communications Center"); static constexpr std::string_view translated_Building_CommCentre_Internals = "Communications Center"sv;
/** Fort structures */ /** Fort structures */
Jupiter::ReferenceString translated_CapturableMCT_Fort = STRING_LITERAL_AS_REFERENCE("Fort"); static constexpr std::string_view translated_CapturableMCT_Fort = "Fort"sv;
Jupiter::ReferenceString translated_CapturableMCT_MC = STRING_LITERAL_AS_REFERENCE("Medical Center"); static constexpr std::string_view translated_CapturableMCT_MC = "Medical Center"sv;
Jupiter::ReferenceString translated_CapturableMCT_Fort_Internals = STRING_LITERAL_AS_REFERENCE("Fort"); static constexpr std::string_view translated_CapturableMCT_Fort_Internals = "Fort"sv;
Jupiter::ReferenceString translated_CapturableMCT_MC_Internals = STRING_LITERAL_AS_REFERENCE("Medical Center"); static constexpr std::string_view translated_CapturableMCT_MC_Internals = "Medical Center"sv;
/** Defences */ /** Defences */
Jupiter::ReferenceString translated_Defence_GuardTower = STRING_LITERAL_AS_REFERENCE("Guard Tower"); static constexpr std::string_view translated_Defence_GuardTower = "Guard Tower"sv;
Jupiter::ReferenceString translated_Defence_Turret = STRING_LITERAL_AS_REFERENCE("Turret"); static constexpr std::string_view translated_Defence_Turret = "Turret"sv;
Jupiter::ReferenceString translated_Defence_SAMSite = STRING_LITERAL_AS_REFERENCE("SAM Site"); static constexpr std::string_view translated_Defence_SAMSite = "SAM Site"sv;
Jupiter::ReferenceString translated_Defence_AATower = STRING_LITERAL_AS_REFERENCE("Anti-Air Guard Tower"); static constexpr std::string_view translated_Defence_AATower = "Anti-Air Guard Tower"sv;
Jupiter::ReferenceString translated_Defence_GunEmplacement = STRING_LITERAL_AS_REFERENCE("Gun Emplacement"); static constexpr std::string_view translated_Defence_GunEmplacement = "Gun Emplacement"sv;
Jupiter::ReferenceString translated_Defence_RocketEmplacement = STRING_LITERAL_AS_REFERENCE("Rocket Emplacement"); static constexpr std::string_view translated_Defence_RocketEmplacement = "Rocket Emplacement"sv;
/** Defences - Sentinels */ /** Defences - Sentinels */
Jupiter::ReferenceString translated_Sentinel_AGT_MG_Base = STRING_LITERAL_AS_REFERENCE("Advanced Guard Tower"); static constexpr std::string_view translated_Sentinel_AGT_MG_Base = "Advanced Guard Tower"sv;
Jupiter::ReferenceString translated_Sentinel_AGT_Rockets_Base = STRING_LITERAL_AS_REFERENCE("Advanced Guard Tower"); static constexpr std::string_view translated_Sentinel_AGT_Rockets_Base = "Advanced Guard Tower"sv;
Jupiter::ReferenceString translated_Sentinel_Obelisk_Laser_Base = STRING_LITERAL_AS_REFERENCE("Obelisk of Light"); static constexpr std::string_view translated_Sentinel_Obelisk_Laser_Base = "Obelisk of Light"sv;
/** UT damage types */ /** UT damage types */
Jupiter::ReferenceString translated_UTDmgType_VehicleExplosion = STRING_LITERAL_AS_REFERENCE("Vehicle Explosion"); static constexpr std::string_view translated_UTDmgType_VehicleExplosion = "Vehicle Explosion"sv;
Jupiter::ReferenceString translated_UTDmgType_Drowned = STRING_LITERAL_AS_REFERENCE("Drowned"); static constexpr std::string_view translated_UTDmgType_Drowned = "Drowned"sv;
/** Beacons */ /** Beacons */
Jupiter::ReferenceString translated_IonCannonBeacon = STRING_LITERAL_AS_REFERENCE("Ion Cannon Beacon"); static constexpr std::string_view translated_IonCannonBeacon = "Ion Cannon Beacon"sv;
Jupiter::ReferenceString translated_NukeBeacon = STRING_LITERAL_AS_REFERENCE("Nuclear Strike Beacon"); static constexpr std::string_view translated_NukeBeacon = "Nuclear Strike Beacon"sv;
Jupiter::ReferenceString translated_KillZDamageType = STRING_LITERAL_AS_REFERENCE("Kill Zone"); static constexpr std::string_view translated_KillZDamageType = "Kill Zone"sv;
RenX::TeamType RenX::getTeam(int teamNum) RenX::TeamType RenX::getTeam(int teamNum)
{ {
@ -433,16 +432,12 @@ RenX::TeamType RenX::getEnemy(TeamType team)
} }
} }
std::string_view RenX::getCharacter(std::string_view chr) std::string_view RenX::getCharacter(std::string_view object) {
{ if (object.find("Rx_"sv) == 0)
static Jupiter::ReferenceString object;
object = chr;
if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0)
object.remove_prefix(3); object.remove_prefix(3);
if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0) if (object.find("InventoryManager_"sv) == 0)
object.remove_prefix(17); object.remove_prefix(17);
else if (object.find(STRING_LITERAL_AS_REFERENCE("FamilyInfo_")) == 0) else if (object.find("FamilyInfo_"sv) == 0)
object.remove_prefix(11); object.remove_prefix(11);
return object; return object;
@ -450,7 +445,7 @@ std::string_view RenX::getCharacter(std::string_view chr)
std::string_view translateCharacter(std::string_view object) std::string_view translateCharacter(std::string_view object)
{ {
if (object.find(STRING_LITERAL_AS_REFERENCE("GDI_")) == 0) if (object.find("GDI_"sv) == 0)
{ {
object.remove_prefix(4); object.remove_prefix(4);
if (object == "Deadeye"sv) return translated_GDI_Deadeye; if (object == "Deadeye"sv) return translated_GDI_Deadeye;
@ -469,7 +464,7 @@ std::string_view translateCharacter(std::string_view object)
if (object == "Soldier"sv) return translated_GDI_Soldier; if (object == "Soldier"sv) return translated_GDI_Soldier;
if (object == "Sydney"sv) return translated_GDI_Sydney; if (object == "Sydney"sv) return translated_GDI_Sydney;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Nod_")) == 0) else if (object.find("Nod_"sv) == 0)
{ {
object.remove_prefix(4); object.remove_prefix(4);
if (object == "BlackHandSniper"sv) return translated_Nod_BlackHandSniper; if (object == "BlackHandSniper"sv) return translated_Nod_BlackHandSniper;
@ -492,26 +487,26 @@ std::string_view translateCharacter(std::string_view object)
return object; return object;
} }
std::string_view RenX::translateName(std::string_view obj) // TODO: Use a map...
{ std::string_view RenX::translateName(std::string_view obj) {
if (obj.empty()) if (obj.empty())
return ""_jrs; return ""sv;
Jupiter::ReferenceString iniTranslation = RenX::getCore()->getConfig()["Name"_jrs].get(obj); std::string_view iniTranslation = RenX::getCore()->getConfig()["Name"sv].get(obj);
if (!iniTranslation.empty()) if (!iniTranslation.empty())
return iniTranslation; return iniTranslation;
Jupiter::ReferenceString object = obj; std::string_view object = obj;
if (object.find(STRING_LITERAL_AS_REFERENCE("nBab_")) == 0) if (object.find("nBab_"sv) == 0)
object.remove_prefix(5); object.remove_prefix(5);
if (object.find(STRING_LITERAL_AS_REFERENCE("Rx_")) == 0) if (object.find("Rx_"sv) == 0)
object.remove_prefix(3); object.remove_prefix(3);
else if (object.find(STRING_LITERAL_AS_REFERENCE("TS_")) == 0) else if (object.find("TS_"sv) == 0)
object.remove_prefix(3); object.remove_prefix(3);
if (object.find(STRING_LITERAL_AS_REFERENCE("Vehicle_")) == 0) if (object.find("Vehicle_"sv) == 0)
{ {
object.remove_prefix(8); object.remove_prefix(8);
@ -549,7 +544,7 @@ std::string_view RenX::translateName(std::string_view obj)
if (object == "AC130_DmgType_HeavyCannon"sv) return translated_Vehicle_AC130_DmgType_HeavyCannon; if (object == "AC130_DmgType_HeavyCannon"sv) return translated_Vehicle_AC130_DmgType_HeavyCannon;
if (object == "AC130_DmgType_AutoCannon"sv) return translated_Vehicle_AC130_DmgType_AutoCannon; if (object == "AC130_DmgType_AutoCannon"sv) return translated_Vehicle_AC130_DmgType_AutoCannon;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Weapon_")) == 0) else if (object.find("Weapon_"sv) == 0)
{ {
object.remove_prefix(7); object.remove_prefix(7);
if (object == "HeavyPistol"sv) return translated_Weapon_HeavyPistol; if (object == "HeavyPistol"sv) return translated_Weapon_HeavyPistol;
@ -576,23 +571,23 @@ std::string_view RenX::translateName(std::string_view obj)
if (object == "DeployedNukeBeacon"sv) return translated_Weapon_DeployedNukeBeacon; if (object == "DeployedNukeBeacon"sv) return translated_Weapon_DeployedNukeBeacon;
if (object == "CrateNuke"sv) return translated_Weapon_CrateNuke; if (object == "CrateNuke"sv) return translated_Weapon_CrateNuke;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Projectile_")) == 0) else if (object.find("Projectile_"sv) == 0)
{ {
object.remove_prefix(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("InventoryManager_"sv) == 0)
{ {
object.remove_prefix(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("FamilyInfo_"sv) == 0)
{ {
object.remove_prefix(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("DmgType_"sv) == 0)
{ {
object.remove_prefix(8); object.remove_prefix(8);
@ -704,7 +699,7 @@ std::string_view RenX::translateName(std::string_view obj)
/** Other Vehicles */ /** Other Vehicles */
if (object == "A10_Missile"sv) return translated_DmgType_A10_Missile; if (object == "A10_Missile"sv) return translated_DmgType_A10_Missile;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Building_")) == 0) else if (object.find("Building_"sv) == 0)
{ {
object.remove_prefix(9); object.remove_prefix(9);
/** Nod structures */ /** Nod structures */
@ -741,7 +736,7 @@ std::string_view RenX::translateName(std::string_view obj)
if (object == "Silo_Internals"sv) return translated_Building_Silo_Internals; if (object == "Silo_Internals"sv) return translated_Building_Silo_Internals;
if (object == "CommCentre_Internals"sv) return translated_Building_CommCentre_Internals; if (object == "CommCentre_Internals"sv) return translated_Building_CommCentre_Internals;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("CapturableMCT_")) == 0) else if (object.find("CapturableMCT_"sv) == 0)
{ {
object.remove_prefix(14); object.remove_prefix(14);
if (object == "Fort"sv) return translated_CapturableMCT_Fort; if (object == "Fort"sv) return translated_CapturableMCT_Fort;
@ -749,7 +744,7 @@ std::string_view RenX::translateName(std::string_view obj)
if (object == "Fort_Internals"sv) return translated_CapturableMCT_Fort_Internals; if (object == "Fort_Internals"sv) return translated_CapturableMCT_Fort_Internals;
if (object == "MC_Internals"sv) return translated_CapturableMCT_MC_Internals; if (object == "MC_Internals"sv) return translated_CapturableMCT_MC_Internals;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Defence_")) == 0) else if (object.find("Defence_"sv) == 0)
{ {
object.remove_prefix(8); object.remove_prefix(8);
if (object == "GuardTower"sv) return translated_Defence_GuardTower; if (object == "GuardTower"sv) return translated_Defence_GuardTower;
@ -759,20 +754,20 @@ std::string_view RenX::translateName(std::string_view obj)
if (object == "GunEmplacement"sv) return translated_Defence_GunEmplacement; if (object == "GunEmplacement"sv) return translated_Defence_GunEmplacement;
if (object == "RocketEmplacement"sv) return translated_Defence_RocketEmplacement; if (object == "RocketEmplacement"sv) return translated_Defence_RocketEmplacement;
} }
else if (object.find(STRING_LITERAL_AS_REFERENCE("Sentinel_")) == 0) else if (object.find("Sentinel_"sv) == 0)
{ {
object.remove_prefix(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("UTDmgType_"sv) == 0)
{ {
object.remove_prefix(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("VoteMenuChoice_"sv) == 0)
{ {
object.remove_prefix(15); object.remove_prefix(15);
if (object == "AddBots"sv) return translated_VoteMenuChoice_AddBots; if (object == "AddBots"sv) return translated_VoteMenuChoice_AddBots;
@ -836,44 +831,44 @@ std::string_view RenX::translateWinTypePlain(RenX::WinType winType)
void RenX::initTranslations(Jupiter::Config &translationsFile) void RenX::initTranslations(Jupiter::Config &translationsFile)
{ {
NodColor = translationsFile["TeamColor"_jrs].get("Nod"_jrs, "04"_jrs); NodColor = translationsFile["TeamColor"sv].get("Nod"sv, "04"sv);
GDIColor = translationsFile["TeamColor"_jrs].get("GDI"_jrs, "08"_jrs); GDIColor = translationsFile["TeamColor"sv].get("GDI"sv, "08"sv);
OtherColor = translationsFile["TeamColor"_jrs].get("Other"_jrs, "14"_jrs); OtherColor = translationsFile["TeamColor"sv].get("Other"sv, "14"sv);
NodShortName = translationsFile["ShortTeamName"_jrs].get("Nod"_jrs, "Nod"_jrs); NodShortName = translationsFile["ShortTeamName"sv].get("Nod"sv, "Nod"sv);
GDIShortName = translationsFile["ShortTeamName"_jrs].get("GDI"_jrs, "GDI"_jrs); GDIShortName = translationsFile["ShortTeamName"sv].get("GDI"sv, "GDI"sv);
OtherShortName = translationsFile["ShortTeamName"_jrs].get("Other"_jrs, "N/A"_jrs); OtherShortName = translationsFile["ShortTeamName"sv].get("Other"sv, "N/A"sv);
NodLongName = translationsFile["LongTeamName"_jrs].get("Nod"_jrs, "Brotherhood of Nod"_jrs); NodLongName = translationsFile["LongTeamName"sv].get("Nod"sv, "Brotherhood of Nod"sv);
GDILongName = translationsFile["LongTeamName"_jrs].get("GDI"_jrs, "Global Defense Initiative"_jrs); GDILongName = translationsFile["LongTeamName"sv].get("GDI"sv, "Global Defense Initiative"sv);
OtherLongName = translationsFile["LongTeamName"_jrs].get("Other"_jrs, "Unknown"_jrs); OtherLongName = translationsFile["LongTeamName"sv].get("Other"sv, "Unknown"sv);
scoreWinTypeTranslation = translationsFile["WinType"_jrs].get("Score"_jrs, "Domination (High Score)"_jrs); scoreWinTypeTranslation = translationsFile["WinType"sv].get("Score"sv, "Domination (High Score)"sv);
baseWinTypeTranslation = translationsFile["WinType"_jrs].get("Base"_jrs, "Conquest (Base Destruction)"_jrs); baseWinTypeTranslation = translationsFile["WinType"sv].get("Base"sv, "Conquest (Base Destruction)"sv);
beaconWinTypeTranslation = translationsFile["WinType"_jrs].get("Beacon"_jrs, "Espionage (Beacon)"_jrs); beaconWinTypeTranslation = translationsFile["WinType"sv].get("Beacon"sv, "Espionage (Beacon)"sv);
tieWinTypeTranslation = translationsFile["WinType"_jrs].get("Tie"_jrs, "Draw (Tie)"_jrs); tieWinTypeTranslation = translationsFile["WinType"sv].get("Tie"sv, "Draw (Tie)"sv);
shutdownWinTypeTranslation = translationsFile["WinType"_jrs].get("Shutdown"_jrs, "Ceasefire (Shutdown)"_jrs); shutdownWinTypeTranslation = translationsFile["WinType"sv].get("Shutdown"sv, "Ceasefire (Shutdown)"sv);
surrenderWinTypeTranslation = translationsFile["WinType"_jrs].get("Surrender"_jrs, "Forfeit (Surrender)"_jrs); surrenderWinTypeTranslation = translationsFile["WinType"sv].get("Surrender"sv, "Forfeit (Surrender)"sv);
unknownWinTypeTranslation = translationsFile["WinType"_jrs].get("Unknown"_jrs, "Aliens (Unknown)"_jrs); unknownWinTypeTranslation = translationsFile["WinType"sv].get("Unknown"sv, "Aliens (Unknown)"sv);
scoreWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Score"_jrs, "High Score"_jrs); scoreWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Score"sv, "High Score"sv);
baseWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Base"_jrs, "Base Destruction"_jrs); baseWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Base"sv, "Base Destruction"sv);
beaconWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Beacon"_jrs, "Beacon"_jrs); beaconWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Beacon"sv, "Beacon"sv);
tieWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Tie"_jrs, "Tie"_jrs); tieWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Tie"sv, "Tie"sv);
shutdownWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Shutdown"_jrs, "Shutdown"_jrs); shutdownWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Shutdown"sv, "Shutdown"sv);
surrenderWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Surrender"_jrs, "Surrender"_jrs); surrenderWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Surrender"sv, "Surrender"sv);
unknownWinTypePlainTranslation = translationsFile["WinTypePlain"_jrs].get("Unknown"_jrs, "Unknown"_jrs); unknownWinTypePlainTranslation = translationsFile["WinTypePlain"sv].get("Unknown"sv, "Unknown"sv);
} }
Jupiter::String RenX::getFormattedPlayerName(const RenX::PlayerInfo &player) std::string RenX::getFormattedPlayerName(const RenX::PlayerInfo &player)
{ {
Jupiter::String r = player.formatNamePrefix; std::string r = player.formatNamePrefix;
r += IRCCOLOR; r += IRCCOLOR;
r += RenX::getTeamColor(player.team); r += RenX::getTeamColor(player.team);
r += player.name; r += player.name;
return r; return r;
} }
Jupiter::StringS RenX::formatGUID(const RenX::Map &map) std::string RenX::formatGUID(const RenX::Map &map)
{ {
return string_printf("%.16llX%.16llX", map.guid[0], map.guid[1]); return string_printf("%.16llX%.16llX", map.guid[0], map.guid[1]);
} }
@ -883,12 +878,12 @@ std::chrono::milliseconds RenX::getServerTime(const RenX::PlayerInfo &player)
return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - player.joinTime); return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - player.joinTime);
} }
Jupiter::StringS RenX::default_uuid_func(RenX::PlayerInfo &player) std::string RenX::default_uuid_func(RenX::PlayerInfo &player)
{ {
if (player.steamid != 0U) if (player.steamid != 0U)
return string_printf("0x%.16llX", player.steamid); return string_printf("0x%.16llX", player.steamid);
return Jupiter::StringS(); return std::string();
} }
double RenX::getKillDeathRatio(const RenX::PlayerInfo &player, bool includeSuicides) double RenX::getKillDeathRatio(const RenX::PlayerInfo &player, bool includeSuicides)

7
src/Plugins/RenX/RenX.Core/RenX_Functions.h

@ -26,7 +26,6 @@
#include <chrono> #include <chrono>
#include "Jupiter/Config.h" #include "Jupiter/Config.h"
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
#include "RenX_Map.h" #include "RenX_Map.h"
@ -135,7 +134,7 @@ namespace RenX
* @param player Data of the player * @param player Data of the player
* @return IRC-ready version of the player's name. * @return IRC-ready version of the player's name.
*/ */
RENX_API Jupiter::String getFormattedPlayerName(const RenX::PlayerInfo &player); RENX_API std::string getFormattedPlayerName(const RenX::PlayerInfo &player);
/** /**
* @brief Creates a string containing a human-readable version of a map's GUID * @brief Creates a string containing a human-readable version of a map's GUID
@ -143,7 +142,7 @@ namespace RenX
* @param map Map containing the GUID to interpret * @param map Map containing the GUID to interpret
* @return Human-readable map GUID * @return Human-readable map GUID
*/ */
RENX_API Jupiter::StringS formatGUID(const RenX::Map &map); RENX_API std::string formatGUID(const RenX::Map &map);
/** /**
* @brief Calculates for how many seconds a player has been in the server. * @brief Calculates for how many seconds a player has been in the server.
@ -160,7 +159,7 @@ namespace RenX
* @param player Player to calculate UUID of * @param player Player to calculate UUID of
* @return UUID of the player based on their steam ID. * @return UUID of the player based on their steam ID.
*/ */
RENX_API Jupiter::StringS default_uuid_func(RenX::PlayerInfo &player); RENX_API std::string default_uuid_func(RenX::PlayerInfo &player);
/** /**
* @brief Calculates a player's Kill-Death ratio, based on their data. * @brief Calculates a player's Kill-Death ratio, based on their data.

8
src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp

@ -19,6 +19,8 @@
#include "RenX_GameCommand.h" #include "RenX_GameCommand.h"
#include "RenX_Server.h" #include "RenX_Server.h"
using namespace std::literals;
std::vector<RenX::GameCommand*> g_GameMasterCommandList; std::vector<RenX::GameCommand*> g_GameMasterCommandList;
std::vector<RenX::GameCommand*> &RenX::GameMasterCommandList = g_GameMasterCommandList; std::vector<RenX::GameCommand*> &RenX::GameMasterCommandList = g_GameMasterCommandList;
@ -82,14 +84,12 @@ void RenX::BasicGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *pla
} }
std::string_view RenX::BasicGameCommand::getHelp(std::string_view ) { std::string_view RenX::BasicGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Returns a basic text string."); static constexpr std::string_view defaultHelp = "Returns a basic text string."sv;
if (m_help_message.empty()) { if (m_help_message.empty()) {
return defaultHelp; return defaultHelp;
} }
static Jupiter::ReferenceString please_delete_this_later_jessica; return m_help_message;
please_delete_this_later_jessica = m_help_message;
return please_delete_this_later_jessica;
} }
RenX::BasicGameCommand *RenX::BasicGameCommand::copy() { RenX::BasicGameCommand *RenX::BasicGameCommand::copy() {

1
src/Plugins/RenX/RenX.Core/RenX_GameCommand.h

@ -25,7 +25,6 @@
*/ */
#include "Jupiter/Command.h" #include "Jupiter/Command.h"
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
#include "RenX_Core.h" // getCore(). #include "RenX_Core.h" // getCore().

14
src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp

@ -16,7 +16,9 @@
* Written by Jessica James <jessica.aj@outlook.com> * Written by Jessica James <jessica.aj@outlook.com>
*/ */
#include <iostream>
#include "jessilib/unicode.hpp" #include "jessilib/unicode.hpp"
#include "Jupiter/DataBuffer.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
@ -144,7 +146,7 @@ void RenX::LadderDatabase::process_data(Jupiter::DataBuffer &buffer, FILE *file,
entry->most_recent_ip = buffer.pop<uint32_t>(); entry->most_recent_ip = buffer.pop<uint32_t>();
entry->last_game = buffer.pop<time_t>(); entry->last_game = buffer.pop<time_t>();
entry->most_recent_name = buffer.pop<Jupiter::String_Strict, char>(); entry->most_recent_name = buffer.pop<std::string>();
// push data to list // push data to list
if (m_head == nullptr) { if (m_head == nullptr) {
@ -206,7 +208,7 @@ std::pair<RenX::LadderDatabase::Entry *, size_t> RenX::LadderDatabase::getPlayer
return std::pair<Entry*, size_t>(itr, index); return std::pair<Entry*, size_t>(itr, index);
} }
} }
return std::pair<Entry*, size_t>(nullptr, Jupiter::INVALID_INDEX); return std::pair<Entry*, size_t>(nullptr, SIZE_MAX);
} }
RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByName(std::string_view name) const { RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByName(std::string_view name) const {
@ -227,7 +229,7 @@ std::pair<RenX::LadderDatabase::Entry *, size_t> RenX::LadderDatabase::getPlayer
} }
} }
return std::pair<Entry*, size_t>(nullptr, Jupiter::INVALID_INDEX); return std::pair<Entry*, size_t>(nullptr, SIZE_MAX);
} }
RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByPartName(std::string_view name) const { RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByPartName(std::string_view name) const {
@ -248,7 +250,7 @@ std::pair<RenX::LadderDatabase::Entry *, size_t> RenX::LadderDatabase::getPlayer
} }
} }
return std::pair<Entry *, size_t>(nullptr, Jupiter::INVALID_INDEX); return std::pair<Entry *, size_t>(nullptr, SIZE_MAX);
} }
std::forward_list<RenX::LadderDatabase::Entry> RenX::LadderDatabase::getPlayerEntriesByPartName(std::string_view name, size_t max) const { std::forward_list<RenX::LadderDatabase::Entry> RenX::LadderDatabase::getPlayerEntriesByPartName(std::string_view name, size_t max) const {
@ -593,11 +595,11 @@ void RenX::LadderDatabase::updateLadder(RenX::Server &server, const RenX::TeamTy
if (m_output_times) if (m_output_times)
{ {
Jupiter::StringS str = string_printf("Ladder: %zu entries sorted in %f seconds; Database written in %f seconds." ENDL, std::string str = string_printf("Ladder: %zu entries sorted in %f seconds; Database written in %f seconds." ENDL,
getEntries(), getEntries(),
static_cast<double>(sort_duration.count()) * (static_cast<double>(std::chrono::steady_clock::duration::period::num) / static_cast<double>(std::chrono::steady_clock::duration::period::den) * static_cast<double>(std::chrono::seconds::duration::period::den / std::chrono::seconds::duration::period::num)), static_cast<double>(sort_duration.count()) * (static_cast<double>(std::chrono::steady_clock::duration::period::num) / static_cast<double>(std::chrono::steady_clock::duration::period::den) * static_cast<double>(std::chrono::seconds::duration::period::den / std::chrono::seconds::duration::period::num)),
static_cast<double>(write_duration.count()) * (static_cast<double>(std::chrono::steady_clock::duration::period::num) / static_cast<double>(std::chrono::steady_clock::duration::period::den) * static_cast<double>(std::chrono::seconds::duration::period::den / std::chrono::seconds::duration::period::num))); static_cast<double>(write_duration.count()) * (static_cast<double>(std::chrono::steady_clock::duration::period::num) / static_cast<double>(std::chrono::steady_clock::duration::period::den) * static_cast<double>(std::chrono::seconds::duration::period::den / std::chrono::seconds::duration::period::num)));
std::cout << std::string_view{str} << std::endl; std::cout << str << std::endl;
server.sendLogChan(str); server.sendLogChan(str);
} }
} }

1
src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h

@ -22,7 +22,6 @@
#include <chrono> #include <chrono>
#include <forward_list> #include <forward_list>
#include "Jupiter/Database.h" #include "Jupiter/Database.h"
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
/** DLL Linkage Nagging */ /** DLL Linkage Nagging */

2
src/Plugins/RenX/RenX.Core/RenX_Map.h

@ -24,7 +24,7 @@
* @brief Defines the RenX Map class * @brief Defines the RenX Map class
*/ */
#include "Jupiter/String.hpp" #include <string>
#include "RenX.h" #include "RenX.h"
/** DLL Linkage Nagging */ /** DLL Linkage Nagging */

14
src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h

@ -27,8 +27,6 @@
#include <chrono> #include <chrono>
#include <mutex> #include <mutex>
#include <thread> #include <thread>
#include "Jupiter/Reference_String.h"
#include "Jupiter/String.hpp"
#include "Jupiter/Config.h" #include "Jupiter/Config.h"
#include "RenX.h" #include "RenX.h"
@ -51,10 +49,10 @@ namespace RenX
// TODO: Add backpack // TODO: Add backpack
std::string name; std::string name;
std::string ip; std::string ip;
Jupiter::StringS adminType; std::string adminType;
std::string uuid; std::string uuid;
Jupiter::StringS character; std::string character;
Jupiter::StringS vehicle; std::string vehicle;
std::string hwid; std::string hwid;
uint64_t steamid = 0; uint64_t steamid = 0;
uint32_t ip32 = 0; uint32_t ip32 = 0;
@ -103,8 +101,8 @@ namespace RenX
void start_resolve_rdns(); void start_resolve_rdns();
bool rdns_pending = false; bool rdns_pending = false;
mutable Jupiter::StringS gamePrefix; mutable std::string gamePrefix;
mutable Jupiter::StringS formatNamePrefix; mutable std::string formatNamePrefix;
mutable int access = 0; mutable int access = 0;
mutable Jupiter::Config varData; // TODO: use jessilib::object instead mutable Jupiter::Config varData; // TODO: use jessilib::object instead
@ -112,7 +110,7 @@ namespace RenX
std::shared_ptr<std::string> m_rdns_ptr; // Needs synchronization across threads std::shared_ptr<std::string> m_rdns_ptr; // Needs synchronization across threads
}; };
static std::string_view rdns_pending{ "RDNS_PENDING" }; static constexpr std::string_view rdns_pending{ "RDNS_PENDING" };
} }
/** Re-enable warnings */ /** Re-enable warnings */

2
src/Plugins/RenX/RenX.Core/RenX_Plugin.cpp

@ -73,7 +73,7 @@ void RenX::Plugin::RenX_OnServerDisconnect(Server &, RenX::DisconnectReason) {
return; return;
} }
bool RenX::Plugin::RenX_OnBan(Server &, const PlayerInfo &, Jupiter::StringType &) { bool RenX::Plugin::RenX_OnBan(Server &, const PlayerInfo &, std::string &) {
return false; return false;
} }

3
src/Plugins/RenX/RenX.Core/RenX_Plugin.h

@ -25,7 +25,6 @@
*/ */
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/String_Type.h"
#include "RenX.h" #include "RenX.h"
namespace RenX namespace RenX
@ -54,7 +53,7 @@ namespace RenX
virtual void RenX_OnServerCreate(Server &server); virtual void RenX_OnServerCreate(Server &server);
virtual void RenX_OnServerFullyConnected(Server &server); virtual void RenX_OnServerFullyConnected(Server &server);
virtual void RenX_OnServerDisconnect(Server &server, RenX::DisconnectReason reason); virtual void RenX_OnServerDisconnect(Server &server, RenX::DisconnectReason reason);
virtual bool RenX_OnBan(Server &server, const PlayerInfo &player, Jupiter::StringType &data); virtual bool RenX_OnBan(Server &server, const PlayerInfo &player, std::string &data);
virtual void RenX_OnCommandTriggered(Server& server, std::string_view trigger, RenX::PlayerInfo& player, std::string_view parameters, GameCommand& command); virtual void RenX_OnCommandTriggered(Server& server, std::string_view trigger, RenX::PlayerInfo& player, std::string_view parameters, GameCommand& command);
/** Player type logs */ /** Player type logs */

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

File diff suppressed because it is too large

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

@ -26,8 +26,8 @@
#include <chrono> #include <chrono>
#include <list> #include <list>
#include <vector>
#include "Jupiter/TCPSocket.h" #include "Jupiter/TCPSocket.h"
#include "Jupiter/String.hpp"
#include "Jupiter/Config.h" #include "Jupiter/Config.h"
#include "Jupiter/Thinker.h" #include "Jupiter/Thinker.h"
#include "Jupiter/Rehash.h" #include "Jupiter/Rehash.h"
@ -83,7 +83,7 @@ namespace RenX
public: // RenX::Server public: // RenX::Server
std::list<RenX::PlayerInfo> players; /** A list of players in the server */ std::list<RenX::PlayerInfo> players; /** A list of players in the server */
std::vector<std::unique_ptr<RenX::BuildingInfo>> buildings; /** A list of buildings in the server */ std::vector<std::unique_ptr<RenX::BuildingInfo>> buildings; /** A list of buildings in the server */
std::vector<Jupiter::StringS> mutators; /** A list of buildings the server is running */ std::vector<std::string> mutators; /** A list of buildings the server is running */
std::vector<RenX::Map> maps; /** A list of maps in the server's rotation */ std::vector<RenX::Map> maps; /** A list of maps in the server's rotation */
Jupiter::Config varData; /** Variable data. */ Jupiter::Config varData; /** Variable data. */
@ -394,7 +394,7 @@ namespace RenX
* @param player Player to fetch Steam ID from * @param player Player to fetch Steam ID from
* @return A player's formatted Steam ID on success, an empty string otherwise. * @return A player's formatted Steam ID on success, an empty string otherwise.
*/ */
Jupiter::StringS formatSteamID(const RenX::PlayerInfo &player) const; std::string formatSteamID(const RenX::PlayerInfo &player) const;
/** /**
* @brief Formats a Steam ID into a readable string. * @brief Formats a Steam ID into a readable string.
@ -402,7 +402,7 @@ namespace RenX
* @param id Steam ID to format * @param id Steam ID to format
* @return A player's formatted Steam ID on success, an empty string otherwise. * @return A player's formatted Steam ID on success, an empty string otherwise.
*/ */
Jupiter::StringS formatSteamID(uint64_t id) const; std::string formatSteamID(uint64_t id) const;
/** /**
* @brief Kicks a player from the server. * @brief Kicks a player from the server.
@ -912,7 +912,7 @@ namespace RenX
* @param player Player to calculate UUID of * @param player Player to calculate UUID of
* @return UUID calculated from player. * @return UUID calculated from player.
*/ */
typedef Jupiter::StringS(*uuid_func)(RenX::PlayerInfo &player); typedef std::string(*uuid_func)(RenX::PlayerInfo &player);
/** /**
* @brief Sets the player UUID calculation function. * @brief Sets the player UUID calculation function.
@ -1113,7 +1113,7 @@ namespace RenX
std::string m_lastLine; std::string m_lastLine;
std::string m_rconUser; std::string m_rconUser;
std::string m_gameVersion; std::string m_gameVersion;
Jupiter::StringS m_serverName; std::string m_serverName;
std::string m_lastCommand; std::string m_lastCommand;
std::string m_lastCommandParams; std::string m_lastCommandParams;
RenX::Map m_map; RenX::Map m_map;
@ -1145,8 +1145,8 @@ namespace RenX
std::string m_hostname; std::string m_hostname;
std::string m_pass; std::string m_pass;
std::string m_configSection; std::string m_configSection;
Jupiter::StringS m_rules; std::string m_rules;
Jupiter::StringS m_ban_from_str; std::string m_ban_from_str;
std::string m_IRCPrefix; std::string m_IRCPrefix;
std::string m_CommandPrefix; std::string m_CommandPrefix;
Jupiter::Config* m_commandAccessLevels; Jupiter::Config* m_commandAccessLevels;

360
src/Plugins/RenX/RenX.Core/RenX_Tags.cpp

@ -16,7 +16,6 @@
* Written by Jessica James <jessica.aj@outlook.com> * Written by Jessica James <jessica.aj@outlook.com>
*/ */
#include "Jupiter/Reference_String.h"
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
@ -26,7 +25,7 @@
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals; using namespace std::literals;
struct TagsImp : RenX::Tags struct TagsImp : RenX::Tags
{ {
@ -36,7 +35,7 @@ struct TagsImp : RenX::Tags
void sanitizeTags(std::string& fmt); void sanitizeTags(std::string& fmt);
std::string_view getUniqueInternalTag(); std::string_view getUniqueInternalTag();
private: private:
Jupiter::StringS uniqueTag; std::string uniqueTag;
uint32_t tagItr; uint32_t tagItr;
size_t bar_width; size_t bar_width;
} _tags; } _tags;
@ -50,16 +49,16 @@ bool RenX::Tags::initialize()
bool TagsImp::initialize() bool TagsImp::initialize()
{ {
this->tagItr = 0; this->tagItr = 0;
this->uniqueTag = "\0\0\0\0\0\0"_jrs; this->uniqueTag = "\0\0\0\0\0\0"sv;
Jupiter::Config &config = RenX::getCore()->getConfig(); Jupiter::Config &config = RenX::getCore()->getConfig();
std::string_view configSection = config.get("TagDefinitions"_jrs, "Tags"_jrs); std::string_view configSection = config.get("TagDefinitions"sv, "Tags"sv);
TagsImp::bar_width = config[configSection].get<int>("BarWidth"_jrs, 19); TagsImp::bar_width = config[configSection].get<int>("BarWidth"sv, 19);
/** Global formats */ /** Global formats */
this->dateFmt = static_cast<std::string>(config[configSection].get("DateFormat"_jrs, "%A, %B %d, %Y"_jrs)); this->dateFmt = static_cast<std::string>(config[configSection].get("DateFormat"sv, "%A, %B %d, %Y"sv));
this->timeFmt = static_cast<std::string>(config[configSection].get("TimeFormat"_jrs, "%H:%M:%S"_jrs)); this->timeFmt = static_cast<std::string>(config[configSection].get("TimeFormat"sv, "%H:%M:%S"sv));
/** Internal message tags */ /** Internal message tags */
@ -250,188 +249,188 @@ bool TagsImp::initialize()
/** External (config) tags */ /** External (config) tags */
/** Global tags */ /** Global tags */
this->dateTag = config[configSection].get("DateTag"_jrs, "{DATE}"_jrs); this->dateTag = config[configSection].get("DateTag"sv, "{DATE}"sv);
this->timeTag = config[configSection].get("TimeTag"_jrs, "{TIME}"_jrs); this->timeTag = config[configSection].get("TimeTag"sv, "{TIME}"sv);
/** Server tags */ /** Server tags */
this->rconVersionTag = config[configSection].get("RCONVersionTag"_jrs, "{RVER}"_jrs); this->rconVersionTag = config[configSection].get("RCONVersionTag"sv, "{RVER}"sv);
this->gameVersionTag = config[configSection].get("GameVersionTag"_jrs, "{GVER}"_jrs); this->gameVersionTag = config[configSection].get("GameVersionTag"sv, "{GVER}"sv);
this->rulesTag = config[configSection].get("RulesTag"_jrs, "{RULES}"_jrs); this->rulesTag = config[configSection].get("RulesTag"sv, "{RULES}"sv);
this->userTag = config[configSection].get("UserTag"_jrs, "{USER}"_jrs); this->userTag = config[configSection].get("UserTag"sv, "{USER}"sv);
this->serverNameTag = config[configSection].get("ServerNameTag"_jrs, "{SERVERNAME}"_jrs); this->serverNameTag = config[configSection].get("ServerNameTag"sv, "{SERVERNAME}"sv);
this->mapTag = config[configSection].get("MapTag"_jrs, "{MAP}"_jrs); this->mapTag = config[configSection].get("MapTag"sv, "{MAP}"sv);
this->mapGUIDTag = config[configSection].get("MapGUIDTag"_jrs, "{MGUID}"_jrs); this->mapGUIDTag = config[configSection].get("MapGUIDTag"sv, "{MGUID}"sv);
this->serverHostnameTag = config[configSection].get("ServerHostnameTag"_jrs, "{SERVERHOST}"_jrs); this->serverHostnameTag = config[configSection].get("ServerHostnameTag"sv, "{SERVERHOST}"sv);
this->serverPortTag = config[configSection].get("ServerPortTag"_jrs, "{SERVERPORT}"_jrs); this->serverPortTag = config[configSection].get("ServerPortTag"sv, "{SERVERPORT}"sv);
this->socketHostnameTag = config[configSection].get("SocketHostnameTag"_jrs, "{SOCKHOST}"_jrs); this->socketHostnameTag = config[configSection].get("SocketHostnameTag"sv, "{SOCKHOST}"sv);
this->socketPortTag = config[configSection].get("SocketPortTag"_jrs, "{SOCKPORT}"_jrs); this->socketPortTag = config[configSection].get("SocketPortTag"sv, "{SOCKPORT}"sv);
this->serverPrefixTag = config[configSection].get("ServerPrefixTag"_jrs, "{SERVERPREFIX}"_jrs); this->serverPrefixTag = config[configSection].get("ServerPrefixTag"sv, "{SERVERPREFIX}"sv);
/** Player tags */ /** Player tags */
this->nameTag = config[configSection].get("NameTag"_jrs, "{NAME}"_jrs); this->nameTag = config[configSection].get("NameTag"sv, "{NAME}"sv);
this->rawNameTag = config[configSection].get("RawNameTag"_jrs, "{RNAME}"_jrs); this->rawNameTag = config[configSection].get("RawNameTag"sv, "{RNAME}"sv);
this->ipTag = config[configSection].get("IPTag"_jrs, "{IP}"_jrs); this->ipTag = config[configSection].get("IPTag"sv, "{IP}"sv);
this->hwidTag = config[configSection].get("HWIDTag"_jrs, "{HWID}"_jrs); this->hwidTag = config[configSection].get("HWIDTag"sv, "{HWID}"sv);
this->rdnsTag = config[configSection].get("RDNSTag"_jrs, "{RDNS}"_jrs); this->rdnsTag = config[configSection].get("RDNSTag"sv, "{RDNS}"sv);
this->steamTag = config[configSection].get("SteamTag"_jrs, "{STEAM}"_jrs); this->steamTag = config[configSection].get("SteamTag"sv, "{STEAM}"sv);
this->uuidTag = config[configSection].get("UUIDTag"_jrs, "{UUID}"_jrs); this->uuidTag = config[configSection].get("UUIDTag"sv, "{UUID}"sv);
this->idTag = config[configSection].get("IDTag"_jrs, "{ID}"_jrs); this->idTag = config[configSection].get("IDTag"sv, "{ID}"sv);
this->characterTag = config[configSection].get("CharacterTag"_jrs, "{CHAR}"_jrs); this->characterTag = config[configSection].get("CharacterTag"sv, "{CHAR}"sv);
this->vehicleTag = config[configSection].get("VehicleTag"_jrs, "{VEH}"_jrs); this->vehicleTag = config[configSection].get("VehicleTag"sv, "{VEH}"sv);
this->adminTag = config[configSection].get("AdminTag"_jrs, "{ADMIN}"_jrs); this->adminTag = config[configSection].get("AdminTag"sv, "{ADMIN}"sv);
this->prefixTag = config[configSection].get("PrefixTag"_jrs, "{PREFIX}"_jrs); this->prefixTag = config[configSection].get("PrefixTag"sv, "{PREFIX}"sv);
this->gamePrefixTag = config[configSection].get("GamePrefixTag"_jrs, "{GPREFIX}"_jrs); this->gamePrefixTag = config[configSection].get("GamePrefixTag"sv, "{GPREFIX}"sv);
this->teamColorTag = config[configSection].get("TeamColorTag"_jrs, "{TCOLOR}"_jrs); this->teamColorTag = config[configSection].get("TeamColorTag"sv, "{TCOLOR}"sv);
this->teamShortTag = config[configSection].get("ShortTeamTag"_jrs, "{TEAMS}"_jrs); this->teamShortTag = config[configSection].get("ShortTeamTag"sv, "{TEAMS}"sv);
this->teamLongTag = config[configSection].get("LongTeamTag"_jrs, "{TEAML}"_jrs); this->teamLongTag = config[configSection].get("LongTeamTag"sv, "{TEAML}"sv);
this->pingTag = config[configSection].get("PingTag"_jrs, "{PING}"_jrs); this->pingTag = config[configSection].get("PingTag"sv, "{PING}"sv);
this->scoreTag = config[configSection].get("ScoreTag"_jrs, "{SCORE}"_jrs); this->scoreTag = config[configSection].get("ScoreTag"sv, "{SCORE}"sv);
this->scorePerMinuteTag = config[configSection].get("ScorePerMinuteTag"_jrs, "{SPM}"_jrs); this->scorePerMinuteTag = config[configSection].get("ScorePerMinuteTag"sv, "{SPM}"sv);
this->creditsTag = config[configSection].get("CreditsTag"_jrs, "{CREDITS}"_jrs); this->creditsTag = config[configSection].get("CreditsTag"sv, "{CREDITS}"sv);
this->killsTag = config[configSection].get("KillsTag"_jrs, "{KILLS}"_jrs); this->killsTag = config[configSection].get("KillsTag"sv, "{KILLS}"sv);
this->deathsTag = config[configSection].get("DeathsTag"_jrs, "{DEATHS}"_jrs); this->deathsTag = config[configSection].get("DeathsTag"sv, "{DEATHS}"sv);
this->kdrTag = config[configSection].get("KDRTag"_jrs, "{KDR}"_jrs); this->kdrTag = config[configSection].get("KDRTag"sv, "{KDR}"sv);
this->suicidesTag = config[configSection].get("SuicidesTag"_jrs, "{SUICIDES}"_jrs); this->suicidesTag = config[configSection].get("SuicidesTag"sv, "{SUICIDES}"sv);
this->headshotsTag = config[configSection].get("HeadshotsTag"_jrs, "{HEADSHOTS}"_jrs); this->headshotsTag = config[configSection].get("HeadshotsTag"sv, "{HEADSHOTS}"sv);
this->headshotKillRatioTag = config[configSection].get("HeadshotKillRatioTag"_jrs, "{HSKR}"_jrs); this->headshotKillRatioTag = config[configSection].get("HeadshotKillRatioTag"sv, "{HSKR}"sv);
this->vehicleKillsTag = config[configSection].get("VehicleKillsTag"_jrs, "{VEHICLEKILLS}"_jrs); this->vehicleKillsTag = config[configSection].get("VehicleKillsTag"sv, "{VEHICLEKILLS}"sv);
this->buildingKillsTag = config[configSection].get("BuildingKillsTag"_jrs, "{BUILDINGKILLS}"_jrs); this->buildingKillsTag = config[configSection].get("BuildingKillsTag"sv, "{BUILDINGKILLS}"sv);
this->defenceKillsTag = config[configSection].get("DefenceKillsTag"_jrs, "{DEFENCEKILLS}"_jrs); this->defenceKillsTag = config[configSection].get("DefenceKillsTag"sv, "{DEFENCEKILLS}"sv);
this->gameTimeTag = config[configSection].get("GameTimeTag"_jrs, "{GAMETIME}"_jrs); this->gameTimeTag = config[configSection].get("GameTimeTag"sv, "{GAMETIME}"sv);
this->gamesTag = config[configSection].get("GamesTag"_jrs, "{GAMES}"_jrs); this->gamesTag = config[configSection].get("GamesTag"sv, "{GAMES}"sv);
this->GDIGamesTag = config[configSection].get("GDIGamesTag"_jrs, "{GDIGAMES}"_jrs); this->GDIGamesTag = config[configSection].get("GDIGamesTag"sv, "{GDIGAMES}"sv);
this->NodGamesTag = config[configSection].get("NodGamesTag"_jrs, "{NODGAMES}"_jrs); this->NodGamesTag = config[configSection].get("NodGamesTag"sv, "{NODGAMES}"sv);
this->winsTag = config[configSection].get("WinsTag"_jrs, "{WINS}"_jrs); this->winsTag = config[configSection].get("WinsTag"sv, "{WINS}"sv);
this->GDIWinsTag = config[configSection].get("GDIWinsTag"_jrs, "{GDIWINS}"_jrs); this->GDIWinsTag = config[configSection].get("GDIWinsTag"sv, "{GDIWINS}"sv);
this->NodWinsTag = config[configSection].get("NodWinsTag"_jrs, "{NODWINS}"_jrs); this->NodWinsTag = config[configSection].get("NodWinsTag"sv, "{NODWINS}"sv);
this->tiesTag = config[configSection].get("TiesTag"_jrs, "{TIES}"_jrs); this->tiesTag = config[configSection].get("TiesTag"sv, "{TIES}"sv);
this->lossesTag = config[configSection].get("LossesTag"_jrs, "{LOSSES}"_jrs); this->lossesTag = config[configSection].get("LossesTag"sv, "{LOSSES}"sv);
this->GDILossesTag = config[configSection].get("GDILossesTag"_jrs, "{GDILOSSES}"_jrs); this->GDILossesTag = config[configSection].get("GDILossesTag"sv, "{GDILOSSES}"sv);
this->NodLossesTag = config[configSection].get("NodLossesTag"_jrs, "{NODLOSSES}"_jrs); this->NodLossesTag = config[configSection].get("NodLossesTag"sv, "{NODLOSSES}"sv);
this->winLossRatioTag = config[configSection].get("WinLossRatioTag"_jrs, "{WLR}"_jrs); this->winLossRatioTag = config[configSection].get("WinLossRatioTag"sv, "{WLR}"sv);
this->GDIWinLossRatioTag = config[configSection].get("GDIWinLossRatioTag"_jrs, "{GDIWLR}"_jrs); this->GDIWinLossRatioTag = config[configSection].get("GDIWinLossRatioTag"sv, "{GDIWLR}"sv);
this->NodWinLossRatioTag = config[configSection].get("NodWinLossRatioTag"_jrs, "{NODWLR}"_jrs); this->NodWinLossRatioTag = config[configSection].get("NodWinLossRatioTag"sv, "{NODWLR}"sv);
this->beaconPlacementsTag = config[configSection].get("BeaconPlacementsTag"_jrs, "{BEACONPLACEMENTS}"_jrs); this->beaconPlacementsTag = config[configSection].get("BeaconPlacementsTag"sv, "{BEACONPLACEMENTS}"sv);
this->beaconDisarmsTag = config[configSection].get("BeaconDisarmsTag"_jrs, "{BEACONDISARMS}"_jrs); this->beaconDisarmsTag = config[configSection].get("BeaconDisarmsTag"sv, "{BEACONDISARMS}"sv);
this->proxyPlacementsTag = config[configSection].get("ProxyPlacementsTag"_jrs, "{PROXYPLACEMENTS}"_jrs); this->proxyPlacementsTag = config[configSection].get("ProxyPlacementsTag"sv, "{PROXYPLACEMENTS}"sv);
this->proxyDisarmsTag = config[configSection].get("ProxyDisarmsTag"_jrs, "{PROXYDISARMS}"_jrs); this->proxyDisarmsTag = config[configSection].get("ProxyDisarmsTag"sv, "{PROXYDISARMS}"sv);
this->capturesTag = config[configSection].get("CapturesTag"_jrs, "{CAPTURES}"_jrs); this->capturesTag = config[configSection].get("CapturesTag"sv, "{CAPTURES}"sv);
this->stealsTag = config[configSection].get("StealsTag"_jrs, "{STEALS}"_jrs); this->stealsTag = config[configSection].get("StealsTag"sv, "{STEALS}"sv);
this->stolenTag = config[configSection].get("StolenTag"_jrs, "{STOLEN}"_jrs); this->stolenTag = config[configSection].get("StolenTag"sv, "{STOLEN}"sv);
this->accessTag = config[configSection].get("AccessTag"_jrs, "{ACCESS}"_jrs); this->accessTag = config[configSection].get("AccessTag"sv, "{ACCESS}"sv);
/** Victim player tags */ /** Victim player tags */
this->victimNameTag = config[configSection].get("VictimNameTag"_jrs, "{VNAME}"_jrs); this->victimNameTag = config[configSection].get("VictimNameTag"sv, "{VNAME}"sv);
this->victimRawNameTag = config[configSection].get("VictimRawNameTag"_jrs, "{VRNAME}"_jrs); this->victimRawNameTag = config[configSection].get("VictimRawNameTag"sv, "{VRNAME}"sv);
this->victimIPTag = config[configSection].get("VictimIPTag"_jrs, "{VIP}"_jrs); this->victimIPTag = config[configSection].get("VictimIPTag"sv, "{VIP}"sv);
this->victimHWIDTag = config[configSection].get("VictimHWIDTag"_jrs, "{VHWID}"_jrs); this->victimHWIDTag = config[configSection].get("VictimHWIDTag"sv, "{VHWID}"sv);
this->victimRDNSTag = config[configSection].get("VictimRDNSTag"_jrs, "{VRDNS}"_jrs); this->victimRDNSTag = config[configSection].get("VictimRDNSTag"sv, "{VRDNS}"sv);
this->victimSteamTag = config[configSection].get("VictimSteamTag"_jrs, "{VSTEAM}"_jrs); this->victimSteamTag = config[configSection].get("VictimSteamTag"sv, "{VSTEAM}"sv);
this->victimUUIDTag = config[configSection].get("VictimUUIDTag"_jrs, "{VUUID}"_jrs); this->victimUUIDTag = config[configSection].get("VictimUUIDTag"sv, "{VUUID}"sv);
this->victimIDTag = config[configSection].get("VictimIDTag"_jrs, "{VID}"_jrs); this->victimIDTag = config[configSection].get("VictimIDTag"sv, "{VID}"sv);
this->victimCharacterTag = config[configSection].get("VictimCharacterTag"_jrs, "{VCHAR}"_jrs); this->victimCharacterTag = config[configSection].get("VictimCharacterTag"sv, "{VCHAR}"sv);
this->victimVehicleTag = config[configSection].get("VictimVehicleTag"_jrs, "{VVEH}"_jrs); this->victimVehicleTag = config[configSection].get("VictimVehicleTag"sv, "{VVEH}"sv);
this->victimAdminTag = config[configSection].get("VictimAdminTag"_jrs, "{VADMIN}"_jrs); this->victimAdminTag = config[configSection].get("VictimAdminTag"sv, "{VADMIN}"sv);
this->victimPrefixTag = config[configSection].get("VictimPrefixTag"_jrs, "{VPREFIX}"_jrs); this->victimPrefixTag = config[configSection].get("VictimPrefixTag"sv, "{VPREFIX}"sv);
this->victimGamePrefixTag = config[configSection].get("VictimGamePrefixTag"_jrs, "{VGPREFIX}"_jrs); this->victimGamePrefixTag = config[configSection].get("VictimGamePrefixTag"sv, "{VGPREFIX}"sv);
this->victimTeamColorTag = config[configSection].get("VictimTeamColorTag"_jrs, "{VTCOLOR}"_jrs); this->victimTeamColorTag = config[configSection].get("VictimTeamColorTag"sv, "{VTCOLOR}"sv);
this->victimTeamShortTag = config[configSection].get("VictimShortTeamTag"_jrs, "{VTEAMS}"_jrs); this->victimTeamShortTag = config[configSection].get("VictimShortTeamTag"sv, "{VTEAMS}"sv);
this->victimTeamLongTag = config[configSection].get("VictimLongTeamTag"_jrs, "{VTEAML}"_jrs); this->victimTeamLongTag = config[configSection].get("VictimLongTeamTag"sv, "{VTEAML}"sv);
this->victimPingTag = config[configSection].get("VictimPingTag"_jrs, "{VPING}"_jrs); this->victimPingTag = config[configSection].get("VictimPingTag"sv, "{VPING}"sv);
this->victimScoreTag = config[configSection].get("VictimScoreTag"_jrs, "{VSCORE}"_jrs); this->victimScoreTag = config[configSection].get("VictimScoreTag"sv, "{VSCORE}"sv);
this->victimScorePerMinuteTag = config[configSection].get("VictimScorePerMinuteTag"_jrs, "{VSPM}"_jrs); this->victimScorePerMinuteTag = config[configSection].get("VictimScorePerMinuteTag"sv, "{VSPM}"sv);
this->victimCreditsTag = config[configSection].get("VictimCreditsTag"_jrs, "{VCREDITS}"_jrs); this->victimCreditsTag = config[configSection].get("VictimCreditsTag"sv, "{VCREDITS}"sv);
this->victimKillsTag = config[configSection].get("VictimKillsTag"_jrs, "{VKILLS}"_jrs); this->victimKillsTag = config[configSection].get("VictimKillsTag"sv, "{VKILLS}"sv);
this->victimDeathsTag = config[configSection].get("VictimDeathsTag"_jrs, "{VDEATHS}"_jrs); this->victimDeathsTag = config[configSection].get("VictimDeathsTag"sv, "{VDEATHS}"sv);
this->victimKDRTag = config[configSection].get("VictimKDRTag"_jrs, "{VKDR}"_jrs); this->victimKDRTag = config[configSection].get("VictimKDRTag"sv, "{VKDR}"sv);
this->victimSuicidesTag = config[configSection].get("VictimSuicidesTag"_jrs, "{VSUICIDES}"_jrs); this->victimSuicidesTag = config[configSection].get("VictimSuicidesTag"sv, "{VSUICIDES}"sv);
this->victimHeadshotsTag = config[configSection].get("VictimHeadshotsTag"_jrs, "{VHEADSHOTS}"_jrs); this->victimHeadshotsTag = config[configSection].get("VictimHeadshotsTag"sv, "{VHEADSHOTS}"sv);
this->victimHeadshotKillRatioTag = config[configSection].get("VictimHeadshotKillRatioTag"_jrs, "{VHSKR}"_jrs); this->victimHeadshotKillRatioTag = config[configSection].get("VictimHeadshotKillRatioTag"sv, "{VHSKR}"sv);
this->victimVehicleKillsTag = config[configSection].get("VictimVehicleKillsTag"_jrs, "{VVEHICLEKILLS}"_jrs); this->victimVehicleKillsTag = config[configSection].get("VictimVehicleKillsTag"sv, "{VVEHICLEKILLS}"sv);
this->victimBuildingKillsTag = config[configSection].get("VictimBuildingKillsTag"_jrs, "{VBUILDINGKILLS}"_jrs); this->victimBuildingKillsTag = config[configSection].get("VictimBuildingKillsTag"sv, "{VBUILDINGKILLS}"sv);
this->victimDefenceKillsTag = config[configSection].get("VictimDefenceKillsTag"_jrs, "{VDEFENCEKILLS}"_jrs); this->victimDefenceKillsTag = config[configSection].get("VictimDefenceKillsTag"sv, "{VDEFENCEKILLS}"sv);
this->victimGameTimeTag = config[configSection].get("VictimGameTimeTag"_jrs, "{VGAMETIME}"_jrs); this->victimGameTimeTag = config[configSection].get("VictimGameTimeTag"sv, "{VGAMETIME}"sv);
this->victimGamesTag = config[configSection].get("VictimGamesTag"_jrs, "{VGAMES}"_jrs); this->victimGamesTag = config[configSection].get("VictimGamesTag"sv, "{VGAMES}"sv);
this->victimGDIGamesTag = config[configSection].get("VictimGDIGamesTag"_jrs, "{VGDIGAMES}"_jrs); this->victimGDIGamesTag = config[configSection].get("VictimGDIGamesTag"sv, "{VGDIGAMES}"sv);
this->victimNodGamesTag = config[configSection].get("VictimNodGamesTag"_jrs, "{VNODGAMES}"_jrs); this->victimNodGamesTag = config[configSection].get("VictimNodGamesTag"sv, "{VNODGAMES}"sv);
this->victimWinsTag = config[configSection].get("VictimWinsTag"_jrs, "{VWINS}"_jrs); this->victimWinsTag = config[configSection].get("VictimWinsTag"sv, "{VWINS}"sv);
this->victimGDIWinsTag = config[configSection].get("VictimGDIWinsTag"_jrs, "{VGDIWINS}"_jrs); this->victimGDIWinsTag = config[configSection].get("VictimGDIWinsTag"sv, "{VGDIWINS}"sv);
this->victimNodWinsTag = config[configSection].get("VictimNodWinsTag"_jrs, "{VNODWINS}"_jrs); this->victimNodWinsTag = config[configSection].get("VictimNodWinsTag"sv, "{VNODWINS}"sv);
this->victimTiesTag = config[configSection].get("VictimTiesTag"_jrs, "{VTIES}"_jrs); this->victimTiesTag = config[configSection].get("VictimTiesTag"sv, "{VTIES}"sv);
this->victimLossesTag = config[configSection].get("VictimLossesTag"_jrs, "{VLOSSES}"_jrs); this->victimLossesTag = config[configSection].get("VictimLossesTag"sv, "{VLOSSES}"sv);
this->victimGDILossesTag = config[configSection].get("VictimGDILossesTag"_jrs, "{VGDILOSSES}"_jrs); this->victimGDILossesTag = config[configSection].get("VictimGDILossesTag"sv, "{VGDILOSSES}"sv);
this->victimNodLossesTag = config[configSection].get("VictimNodLossesTag"_jrs, "{VNODLOSSES}"_jrs); this->victimNodLossesTag = config[configSection].get("VictimNodLossesTag"sv, "{VNODLOSSES}"sv);
this->victimWinLossRatioTag = config[configSection].get("VictimWinLossRatioTag"_jrs, "{VWLR}"_jrs); this->victimWinLossRatioTag = config[configSection].get("VictimWinLossRatioTag"sv, "{VWLR}"sv);
this->victimGDIWinLossRatioTag = config[configSection].get("VictimGDIWinLossRatioTag"_jrs, "{VGDIWLR}"_jrs); this->victimGDIWinLossRatioTag = config[configSection].get("VictimGDIWinLossRatioTag"sv, "{VGDIWLR}"sv);
this->victimNodWinLossRatioTag = config[configSection].get("VictimNodWinLossRatioTag"_jrs, "{VNODWLR}"_jrs); this->victimNodWinLossRatioTag = config[configSection].get("VictimNodWinLossRatioTag"sv, "{VNODWLR}"sv);
this->victimBeaconPlacementsTag = config[configSection].get("VictimBeaconPlacementsTag"_jrs, "{VBEACONPLACEMENTS}"_jrs); this->victimBeaconPlacementsTag = config[configSection].get("VictimBeaconPlacementsTag"sv, "{VBEACONPLACEMENTS}"sv);
this->victimBeaconDisarmsTag = config[configSection].get("VictimBeaconDisarmsTag"_jrs, "{VBEACONDISARMS}"_jrs); this->victimBeaconDisarmsTag = config[configSection].get("VictimBeaconDisarmsTag"sv, "{VBEACONDISARMS}"sv);
this->victimProxyPlacementsTag = config[configSection].get("VictimProxyPlacementsTag"_jrs, "{VPROXYPLACEMENTS}"_jrs); this->victimProxyPlacementsTag = config[configSection].get("VictimProxyPlacementsTag"sv, "{VPROXYPLACEMENTS}"sv);
this->victimProxyDisarmsTag = config[configSection].get("VictimProxyDisarmsTag"_jrs, "{VPROXYDISARMS}"_jrs); this->victimProxyDisarmsTag = config[configSection].get("VictimProxyDisarmsTag"sv, "{VPROXYDISARMS}"sv);
this->victimCapturesTag = config[configSection].get("VictimCapturesTag"_jrs, "{VCAPTURES}"_jrs); this->victimCapturesTag = config[configSection].get("VictimCapturesTag"sv, "{VCAPTURES}"sv);
this->victimStealsTag = config[configSection].get("VictimStealsTag"_jrs, "{VSTEALS}"_jrs); this->victimStealsTag = config[configSection].get("VictimStealsTag"sv, "{VSTEALS}"sv);
this->victimStolenTag = config[configSection].get("VictimStolenTag"_jrs, "{VSTOLEN}"_jrs); this->victimStolenTag = config[configSection].get("VictimStolenTag"sv, "{VSTOLEN}"sv);
this->victimAccessTag = config[configSection].get("VictimAccessTag"_jrs, "{VACCESS}"_jrs); this->victimAccessTag = config[configSection].get("VictimAccessTag"sv, "{VACCESS}"sv);
/** Building tags */ /** Building tags */
this->buildingNameTag = config[configSection].get("BuildingNameTag"_jrs, "{BNAME}"_jrs); this->buildingNameTag = config[configSection].get("BuildingNameTag"sv, "{BNAME}"sv);
this->buildingRawNameTag = config[configSection].get("BuildingRawNameTag"_jrs, "{BRNAME}"_jrs); this->buildingRawNameTag = config[configSection].get("BuildingRawNameTag"sv, "{BRNAME}"sv);
this->buildingHealthTag = config[configSection].get("BuildingHealthTag"_jrs, "{BHEALTH}"_jrs); this->buildingHealthTag = config[configSection].get("BuildingHealthTag"sv, "{BHEALTH}"sv);
this->buildingMaxHealthTag = config[configSection].get("BuildingMaxHealthTag"_jrs, "{BMHEALTH}"_jrs); this->buildingMaxHealthTag = config[configSection].get("BuildingMaxHealthTag"sv, "{BMHEALTH}"sv);
this->buildingHealthPercentageTag = config[configSection].get("BuildingHealthPercentageTag"_jrs, "{BHP}"_jrs); this->buildingHealthPercentageTag = config[configSection].get("BuildingHealthPercentageTag"sv, "{BHP}"sv);
this->buildingArmorTag = config[configSection].get("BuildingArmorTag"_jrs, "{BARMOR}"_jrs); this->buildingArmorTag = config[configSection].get("BuildingArmorTag"sv, "{BARMOR}"sv);
this->buildingMaxArmorTag = config[configSection].get("BuildingMaxArmorTag"_jrs, "{BMARMOR}"_jrs); this->buildingMaxArmorTag = config[configSection].get("BuildingMaxArmorTag"sv, "{BMARMOR}"sv);
this->buildingArmorPercentageTag = config[configSection].get("BuildingArmorPercentageTag"_jrs, "{BAP}"_jrs); this->buildingArmorPercentageTag = config[configSection].get("BuildingArmorPercentageTag"sv, "{BAP}"sv);
this->buildingDurabilityTag = config[configSection].get("BuildingDurabilityTag"_jrs, "{BDURABILITY}"_jrs); this->buildingDurabilityTag = config[configSection].get("BuildingDurabilityTag"sv, "{BDURABILITY}"sv);
this->buildingMaxDurabilityTag = config[configSection].get("BuildingMaxDurabilityTag"_jrs, "{BMDURABILITY}"_jrs); this->buildingMaxDurabilityTag = config[configSection].get("BuildingMaxDurabilityTag"sv, "{BMDURABILITY}"sv);
this->buildingDurabilityPercentageTag = config[configSection].get("BuildingDurabilityPercentageTag"_jrs, "{BDP}"_jrs); this->buildingDurabilityPercentageTag = config[configSection].get("BuildingDurabilityPercentageTag"sv, "{BDP}"sv);
this->buildingTeamColorTag = config[configSection].get("BuildingTeamColorTag"_jrs, "{BCOLOR}"_jrs); this->buildingTeamColorTag = config[configSection].get("BuildingTeamColorTag"sv, "{BCOLOR}"sv);
this->buildingTeamShortTag = config[configSection].get("BuildingShortTeamTag"_jrs, "{BTEAMS}"_jrs); this->buildingTeamShortTag = config[configSection].get("BuildingShortTeamTag"sv, "{BTEAMS}"sv);
this->buildingTeamLongTag = config[configSection].get("BuildingLongTeamTag"_jrs, "{BTEAML}"_jrs); this->buildingTeamLongTag = config[configSection].get("BuildingLongTeamTag"sv, "{BTEAML}"sv);
/** Ladder tags */ /** Ladder tags */
this->rankTag = config[configSection].get("RankTag"_jrs, "{RANK}"_jrs); this->rankTag = config[configSection].get("RankTag"sv, "{RANK}"sv);
this->lastGameTag = config[configSection].get("LastGameTag"_jrs, "{LASTGAME}"_jrs); this->lastGameTag = config[configSection].get("LastGameTag"sv, "{LASTGAME}"sv);
this->GDIScoreTag = config[configSection].get("GDIScoreTag"_jrs, "{GDISCORE}"_jrs); this->GDIScoreTag = config[configSection].get("GDIScoreTag"sv, "{GDISCORE}"sv);
this->GDISPMTag = config[configSection].get("GDISPMTag"_jrs, "{GDISPM}"_jrs); this->GDISPMTag = config[configSection].get("GDISPMTag"sv, "{GDISPM}"sv);
this->GDIGameTimeTag = config[configSection].get("GDIGameTimeTag"_jrs, "{GDIGAMETIME}"_jrs); this->GDIGameTimeTag = config[configSection].get("GDIGameTimeTag"sv, "{GDIGAMETIME}"sv);
this->GDITiesTag = config[configSection].get("GDITiesTag"_jrs, "{GDITIES}"_jrs); this->GDITiesTag = config[configSection].get("GDITiesTag"sv, "{GDITIES}"sv);
this->GDIBeaconPlacementsTag = config[configSection].get("GDIBeaconPlacementsTag"_jrs, "{GDIBEACONPLACEMENTS}"_jrs); this->GDIBeaconPlacementsTag = config[configSection].get("GDIBeaconPlacementsTag"sv, "{GDIBEACONPLACEMENTS}"sv);
this->GDIBeaconDisarmsTag = config[configSection].get("GDIBeaconDisarmsTag"_jrs, "{GDIBEACONDISARMS}"_jrs); this->GDIBeaconDisarmsTag = config[configSection].get("GDIBeaconDisarmsTag"sv, "{GDIBEACONDISARMS}"sv);
this->GDIProxyPlacementsTag = config[configSection].get("GDIProxyPlacementsTag"_jrs, "{GDIPROXYPLACEMENTS}"_jrs); this->GDIProxyPlacementsTag = config[configSection].get("GDIProxyPlacementsTag"sv, "{GDIPROXYPLACEMENTS}"sv);
this->GDIProxyDisarmsTag = config[configSection].get("GDIProxyDisarmsTag"_jrs, "{GDIPROXYDISARMS}"_jrs); this->GDIProxyDisarmsTag = config[configSection].get("GDIProxyDisarmsTag"sv, "{GDIPROXYDISARMS}"sv);
this->GDIKillsTag = config[configSection].get("GDIKillsTag"_jrs, "{GDIKILLS}"_jrs); this->GDIKillsTag = config[configSection].get("GDIKillsTag"sv, "{GDIKILLS}"sv);
this->GDIDeathsTag = config[configSection].get("GDIDeathsTag"_jrs, "{GDIDEATHS}"_jrs); this->GDIDeathsTag = config[configSection].get("GDIDeathsTag"sv, "{GDIDEATHS}"sv);
this->GDIVehicleKillsTag = config[configSection].get("GDIVehicleKillsTag"_jrs, "{GDIVEHICLEKILLS}"_jrs); this->GDIVehicleKillsTag = config[configSection].get("GDIVehicleKillsTag"sv, "{GDIVEHICLEKILLS}"sv);
this->GDIDefenceKillsTag = config[configSection].get("GDIDefenceKillsTag"_jrs, "{GDIDEFENCEKILLS}"_jrs); this->GDIDefenceKillsTag = config[configSection].get("GDIDefenceKillsTag"sv, "{GDIDEFENCEKILLS}"sv);
this->GDIBuildingKillsTag = config[configSection].get("GDIBuildingKillsTag"_jrs, "{GDIBUILDINGKILLS}"_jrs); this->GDIBuildingKillsTag = config[configSection].get("GDIBuildingKillsTag"sv, "{GDIBUILDINGKILLS}"sv);
this->GDIKDRTag = config[configSection].get("GDIKDRTag"_jrs, "{GDIKDR}"_jrs); this->GDIKDRTag = config[configSection].get("GDIKDRTag"sv, "{GDIKDR}"sv);
this->GDIHeadshotsTag = config[configSection].get("GDIHeadshotsTag"_jrs, "{GDIHEADSHOTS}"_jrs); this->GDIHeadshotsTag = config[configSection].get("GDIHeadshotsTag"sv, "{GDIHEADSHOTS}"sv);
this->GDIHeadshotKillRatioTag = config[configSection].get("GDIHeadshotKillRatioTag"_jrs, "{GDIHSKR}"_jrs); this->GDIHeadshotKillRatioTag = config[configSection].get("GDIHeadshotKillRatioTag"sv, "{GDIHSKR}"sv);
this->NodScoreTag = config[configSection].get("NodScoreTag"_jrs, "{NODSCORE}"_jrs); this->NodScoreTag = config[configSection].get("NodScoreTag"sv, "{NODSCORE}"sv);
this->NodSPMTag = config[configSection].get("NodSPMTag"_jrs, "{NODSPM}"_jrs); this->NodSPMTag = config[configSection].get("NodSPMTag"sv, "{NODSPM}"sv);
this->NodGameTimeTag = config[configSection].get("NodGameTimeTag"_jrs, "{NODGAMETIME}"_jrs); this->NodGameTimeTag = config[configSection].get("NodGameTimeTag"sv, "{NODGAMETIME}"sv);
this->NodTiesTag = config[configSection].get("NodTiesTag"_jrs, "{NODTIES}"_jrs); this->NodTiesTag = config[configSection].get("NodTiesTag"sv, "{NODTIES}"sv);
this->NodBeaconPlacementsTag = config[configSection].get("NodBeaconPlacementsTag"_jrs, "{NODBEACONPLACEMENTS}"_jrs); this->NodBeaconPlacementsTag = config[configSection].get("NodBeaconPlacementsTag"sv, "{NODBEACONPLACEMENTS}"sv);
this->NodBeaconDisarmsTag = config[configSection].get("NodBeaconDisarmsTag"_jrs, "{NODBEACONDISARMS}"_jrs); this->NodBeaconDisarmsTag = config[configSection].get("NodBeaconDisarmsTag"sv, "{NODBEACONDISARMS}"sv);
this->NodProxyPlacementsTag = config[configSection].get("NodProxyPlacementsTag"_jrs, "{NODPROXYPLACEMENTS}"_jrs); this->NodProxyPlacementsTag = config[configSection].get("NodProxyPlacementsTag"sv, "{NODPROXYPLACEMENTS}"sv);
this->NodProxyDisarmsTag = config[configSection].get("NodProxyDisarmsTag"_jrs, "{NODPROXYDISARMS}"_jrs); this->NodProxyDisarmsTag = config[configSection].get("NodProxyDisarmsTag"sv, "{NODPROXYDISARMS}"sv);
this->NodKillsTag = config[configSection].get("NodKillsTag"_jrs, "{NODKILLS}"_jrs); this->NodKillsTag = config[configSection].get("NodKillsTag"sv, "{NODKILLS}"sv);
this->NodDeathsTag = config[configSection].get("NodDeathsTag"_jrs, "{NODDEATHS}"_jrs); this->NodDeathsTag = config[configSection].get("NodDeathsTag"sv, "{NODDEATHS}"sv);
this->NodVehicleKillsTag = config[configSection].get("NodVehicleKillsTag"_jrs, "{NODVEHICLEKILLS}"_jrs); this->NodVehicleKillsTag = config[configSection].get("NodVehicleKillsTag"sv, "{NODVEHICLEKILLS}"sv);
this->NodDefenceKillsTag = config[configSection].get("NodDefenceKillsTag"_jrs, "{NODDEFENCEKILLS}"_jrs); this->NodDefenceKillsTag = config[configSection].get("NodDefenceKillsTag"sv, "{NODDEFENCEKILLS}"sv);
this->NodBuildingKillsTag = config[configSection].get("NodBuildingKillsTag"_jrs, "{NODBUILDINGKILLS}"_jrs); this->NodBuildingKillsTag = config[configSection].get("NodBuildingKillsTag"sv, "{NODBUILDINGKILLS}"sv);
this->NodKDRTag = config[configSection].get("NodKDRTag"_jrs, "{NODKDR}"_jrs); this->NodKDRTag = config[configSection].get("NodKDRTag"sv, "{NODKDR}"sv);
this->NodHeadshotsTag = config[configSection].get("NodHeadshotsTag"_jrs, "{NODHEADSHOTS}"_jrs); this->NodHeadshotsTag = config[configSection].get("NodHeadshotsTag"sv, "{NODHEADSHOTS}"sv);
this->NodHeadshotKillRatioTag = config[configSection].get("NodHeadshotKillRatioTag"_jrs, "{NODHSKR}"_jrs); this->NodHeadshotKillRatioTag = config[configSection].get("NodHeadshotKillRatioTag"sv, "{NODHSKR}"sv);
/** Other tags */ /** Other tags */
this->weaponTag = config[configSection].get("WeaponTag"_jrs, "{WEAPON}"_jrs); this->weaponTag = config[configSection].get("WeaponTag"sv, "{WEAPON}"sv);
this->objectTag = config[configSection].get("ObjectTag"_jrs, "{OBJECT}"_jrs); this->objectTag = config[configSection].get("ObjectTag"sv, "{OBJECT}"sv);
this->messageTag = config[configSection].get("MessageTag"_jrs, "{MESSAGE}"_jrs); this->messageTag = config[configSection].get("MessageTag"sv, "{MESSAGE}"sv);
this->newNameTag = config[configSection].get("NewNameTag"_jrs, "{NNAME}"_jrs); this->newNameTag = config[configSection].get("NewNameTag"sv, "{NNAME}"sv);
this->winScoreTag = config[configSection].get("WinScoreTag"_jrs, "{WINSCORE}"_jrs); this->winScoreTag = config[configSection].get("WinScoreTag"sv, "{WINSCORE}"sv);
this->loseScoreTag = config[configSection].get("LoseScoreTag"_jrs, "{LOSESCORE}"_jrs); this->loseScoreTag = config[configSection].get("LoseScoreTag"sv, "{LOSESCORE}"sv);
return true; return true;
} }
@ -868,9 +867,8 @@ void TagsImp::sanitizeTags(std::string& fmt)
} }
} }
std::string_view TagsImp::getUniqueInternalTag() std::string_view TagsImp::getUniqueInternalTag() {
{ std::memcpy(this->uniqueTag.data() + 1, reinterpret_cast<const char *>(&this->tagItr), sizeof(TagsImp::tagItr));
this->uniqueTag.set(1, reinterpret_cast<const char *>(&this->tagItr), sizeof(TagsImp::tagItr));
++TagsImp::tagItr; ++TagsImp::tagItr;
return this->uniqueTag; return this->uniqueTag;
} }

1
src/Plugins/RenX/RenX.Core/RenX_Tags.h

@ -24,7 +24,6 @@
* @brief Provides tag processing functions * @brief Provides tag processing functions
*/ */
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

3
src/Plugins/RenX/RenX.Core/RenX_TeamInfo.h

@ -24,7 +24,6 @@
* @brief Defines the BuildingInfo structure. * @brief Defines the BuildingInfo structure.
*/ */
#include "Jupiter/String.hpp"
#include "RenX.h" #include "RenX.h"
/** DLL Linkage Nagging */ /** DLL Linkage Nagging */
@ -49,7 +48,7 @@ namespace RenX
int32_t mine_limit; int32_t mine_limit;
int32_t vehicle_count; int32_t vehicle_count;
int32_t vehicle_limit; int32_t vehicle_limit;
Jupiter::StringS name; std::string name;
}; };
} }

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

@ -23,15 +23,14 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool RenX_ExcessiveHeadshotsPlugin::initialize() { bool RenX_ExcessiveHeadshotsPlugin::initialize() {
RenX_ExcessiveHeadshotsPlugin::ratio = this->config.get<double>("HeadshotKillRatio"_jrs, 0.5); RenX_ExcessiveHeadshotsPlugin::ratio = this->config.get<double>("HeadshotKillRatio"sv, 0.5);
RenX_ExcessiveHeadshotsPlugin::minKills = this->config.get<unsigned int>("Kills"_jrs, 10); RenX_ExcessiveHeadshotsPlugin::minKills = this->config.get<unsigned int>("Kills"sv, 10);
RenX_ExcessiveHeadshotsPlugin::minKD = this->config.get<double>("KillDeathRatio"_jrs, 5.0); RenX_ExcessiveHeadshotsPlugin::minKD = this->config.get<double>("KillDeathRatio"sv, 5.0);
RenX_ExcessiveHeadshotsPlugin::minKPS = this->config.get<double>("KillsPerSecond"_jrs, 0.5); RenX_ExcessiveHeadshotsPlugin::minKPS = this->config.get<double>("KillsPerSecond"sv, 0.5);
RenX_ExcessiveHeadshotsPlugin::minFlags = this->config.get<unsigned int>("Flags"_jrs, 4); RenX_ExcessiveHeadshotsPlugin::minFlags = this->config.get<unsigned int>("Flags"sv, 4);
return true; return true;
} }
@ -57,7 +56,7 @@ void RenX_ExcessiveHeadshotsPlugin::RenX_OnKill(RenX::Server &server, const RenX
if (flags >= RenX_ExcessiveHeadshotsPlugin::minFlags) if (flags >= RenX_ExcessiveHeadshotsPlugin::minFlags)
{ {
server.banPlayer(player, "Jupiter Bot"_jrs, "Aimbot detected"_jrs); server.banPlayer(player, "Jupiter Bot"sv, "Aimbot detected"sv);
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);
std::string_view steamid = server.formatSteamID(player); std::string_view 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(), 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(),

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

@ -21,7 +21,7 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals; using namespace std::literals;
RenX_ExtraLoggingPlugin::RenX_ExtraLoggingPlugin() RenX_ExtraLoggingPlugin::RenX_ExtraLoggingPlugin()
{ {
@ -46,15 +46,15 @@ int RenX_ExtraLoggingPlugin::OnRehash()
} }
bool RenX_ExtraLoggingPlugin::initialize() { bool RenX_ExtraLoggingPlugin::initialize() {
RenX_ExtraLoggingPlugin::filePrefix = this->config.get("FilePrefix"_jrs, string_printf("[%.*s] %.*s", RenX::tags->timeTag.size(), RenX_ExtraLoggingPlugin::filePrefix = this->config.get("FilePrefix"sv, string_printf("[%.*s] %.*s", RenX::tags->timeTag.size(),
RenX::tags->timeTag.data(), RenX::tags->serverPrefixTag.size(), RenX::tags->timeTag.data(), RenX::tags->serverPrefixTag.size(),
RenX::tags->serverPrefixTag.data())); RenX::tags->serverPrefixTag.data()));
RenX_ExtraLoggingPlugin::consolePrefix = this->config.get("ConsolePrefix"_jrs, RenX_ExtraLoggingPlugin::filePrefix); RenX_ExtraLoggingPlugin::consolePrefix = this->config.get("ConsolePrefix"sv, RenX_ExtraLoggingPlugin::filePrefix);
RenX_ExtraLoggingPlugin::newDayFmt = this->config.get("NewDayFormat"_jrs, string_printf("Time: %.*s %.*s", RenX::tags->timeTag.size(), RenX_ExtraLoggingPlugin::newDayFmt = this->config.get("NewDayFormat"sv, string_printf("Time: %.*s %.*s", RenX::tags->timeTag.size(),
RenX::tags->timeTag.data(), RenX::tags->dateTag.size(), RenX::tags->timeTag.data(), RenX::tags->dateTag.size(),
RenX::tags->dateTag.data())); RenX::tags->dateTag.data()));
RenX_ExtraLoggingPlugin::printToConsole = this->config.get<bool>("PrintToConsole"_jrs, true); RenX_ExtraLoggingPlugin::printToConsole = this->config.get<bool>("PrintToConsole"sv, 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"sv));
RenX::sanitizeTags(RenX_ExtraLoggingPlugin::filePrefix); RenX::sanitizeTags(RenX_ExtraLoggingPlugin::filePrefix);
RenX::sanitizeTags(RenX_ExtraLoggingPlugin::consolePrefix); RenX::sanitizeTags(RenX_ExtraLoggingPlugin::consolePrefix);

1
src/Plugins/RenX/RenX.ExtraLogging/RenX_ExtraLogging.h

@ -20,7 +20,6 @@
#define _RENX_EXTRALOGGING_H_HEADER #define _RENX_EXTRALOGGING_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/String.hpp"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_ExtraLoggingPlugin : public RenX::Plugin class RenX_ExtraLoggingPlugin : public RenX::Plugin

1
src/Plugins/RenX/RenX.Greetings/RenX_Greetings.cpp

@ -22,7 +22,6 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
void RenX_GreetingsPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) { void RenX_GreetingsPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) {

2
src/Plugins/RenX/RenX.Greetings/RenX_Greetings.h

@ -20,9 +20,7 @@
#define _RENX_GREETING_H_HEADER #define _RENX_GREETING_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/File.h" #include "Jupiter/File.h"
#include "Jupiter/String.hpp"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_GreetingsPlugin : public RenX::Plugin class RenX_GreetingsPlugin : public RenX::Plugin

4
src/Plugins/RenX/RenX.HybridUUID/RenX_HybridUUID.cpp

@ -16,17 +16,15 @@
* Written by Jessica James <jessica.aj@outlook.com> * Written by Jessica James <jessica.aj@outlook.com>
*/ */
#include "Jupiter/String.hpp"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
#include "RenX_HybridUUID.h" #include "RenX_HybridUUID.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
Jupiter::StringS calc_uuid(RenX::PlayerInfo &player) std::string calc_uuid(RenX::PlayerInfo &player)
{ {
if (player.steamid != 0U) if (player.steamid != 0U)
return string_printf("S%.16llX", player.steamid); return string_printf("S%.16llX", player.steamid);

1
src/Plugins/RenX/RenX.HybridUUID/RenX_HybridUUID.h

@ -20,7 +20,6 @@
#define _RENX_HYBRIDUUID_H_HEADER #define _RENX_HYBRIDUUID_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_HybridUUIDPlugin : public RenX::Plugin class RenX_HybridUUIDPlugin : public RenX::Plugin

82
src/Plugins/RenX/RenX.IRCJoin/RenX_IRCJoin.cpp

@ -17,92 +17,86 @@
*/ */
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/String.hpp"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_IRCJoin.h" #include "RenX_IRCJoin.h"
#include "RenX_Tags.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_IRCJoinPlugin::initialize() bool RenX_IRCJoinPlugin::initialize() {
{ RenX_IRCJoinPlugin::publicOnly = this->config.get<bool>("PublicOnly"sv, true);
RenX_IRCJoinPlugin::publicOnly = this->config.get<bool>("PublicOnly"_jrs, true); RenX_IRCJoinPlugin::joinMsgAlways = this->config.get<bool>("Join.MsgAlways"sv, false);
RenX_IRCJoinPlugin::joinMsgAlways = this->config.get<bool>("Join.MsgAlways"_jrs, false); RenX_IRCJoinPlugin::partMsgAlways = this->config.get<bool>("Part.MsgAlways"sv, false);
RenX_IRCJoinPlugin::partMsgAlways = this->config.get<bool>("Part.MsgAlways"_jrs, false); RenX_IRCJoinPlugin::minAccessPartMessage = this->config.get<int>("Part.MinAccess"sv, 0);
RenX_IRCJoinPlugin::minAccessPartMessage = this->config.get<int>("Part.MinAccess"_jrs, 0); RenX_IRCJoinPlugin::maxAccessPartMessage = this->config.get<int>("Part.MaxAccess"sv, -1);
RenX_IRCJoinPlugin::maxAccessPartMessage = this->config.get<int>("Part.MaxAccess"_jrs, -1); RenX_IRCJoinPlugin::nameTag = this->config.get("NameTag"sv, "{NAME}"sv);
RenX_IRCJoinPlugin::nameTag = this->config.get("NameTag"_jrs, "{NAME}"_jrs); RenX_IRCJoinPlugin::chanTag = this->config.get("ChannelTag"sv, "{CHAN}"sv);
RenX_IRCJoinPlugin::chanTag = this->config.get("ChannelTag"_jrs, "{CHAN}"_jrs); RenX_IRCJoinPlugin::partReasonTag = this->config.get("PartReasonTag"sv, "{REASON}"sv);
RenX_IRCJoinPlugin::partReasonTag = this->config.get("PartReasonTag"_jrs, "{REASON}"_jrs); RenX_IRCJoinPlugin::joinFmt = this->config.get("Join.Format"sv, "{NAME} has joined {CHAN}!"sv);
RenX_IRCJoinPlugin::joinFmt = this->config.get("Join.Format"_jrs, "{NAME} has joined {CHAN}!"_jrs); RenX_IRCJoinPlugin::partFmt = this->config.get("Part.Format"sv, "{NAME} has left {CHAN} ({REASON})!"sv);
RenX_IRCJoinPlugin::partFmt = this->config.get("Part.Format"_jrs, "{NAME} has left {CHAN} ({REASON})!"_jrs); RenX_IRCJoinPlugin::partFmtNoReason = this->config.get("Part.FormatNoReason"sv, "{NAME} has left {CHAN}!"sv);
RenX_IRCJoinPlugin::partFmtNoReason = this->config.get("Part.FormatNoReason"_jrs, "{NAME} has left {CHAN}!"_jrs);
return true; return true;
} }
void RenX_IRCJoinPlugin::OnJoin(Jupiter::IRC::Client *source, std::string_view channel, std::string_view nick) void RenX_IRCJoinPlugin::OnJoin(Jupiter::IRC::Client *source, std::string_view channel, std::string_view nick) {
{ if (!RenX_IRCJoinPlugin::joinFmt.empty()) {
if (!RenX_IRCJoinPlugin::joinFmt.empty())
{
RenX::Server *server; RenX::Server *server;
int type = source->getChannel(channel)->getType(); int type = source->getChannel(channel)->getType();
Jupiter::String msg = RenX_IRCJoinPlugin::joinFmt; std::string msg = RenX_IRCJoinPlugin::joinFmt;
msg.replace(RenX_IRCJoinPlugin::nameTag, nick); RenX::replace_tag(msg, RenX_IRCJoinPlugin::nameTag, nick);
msg.replace(RenX_IRCJoinPlugin::chanTag, channel); RenX::replace_tag(msg, RenX_IRCJoinPlugin::chanTag, channel);
auto checkType = [&] auto checkType = [&] {
{
if (this->publicOnly) if (this->publicOnly)
return server->isPublicLogChanType(type); return server->isPublicLogChanType(type);
else else
return server->isLogChanType(type); return server->isLogChanType(type);
}; };
for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) {
{
server = RenX::getCore()->getServer(i); server = RenX::getCore()->getServer(i);
if (checkType() && (RenX_IRCJoinPlugin::joinMsgAlways || server->players.size() != server->getBotCount())) if (checkType() && (RenX_IRCJoinPlugin::joinMsgAlways || server->players.size() != server->getBotCount())) {
server->sendMessage(msg); server->sendMessage(msg);
} }
} }
} }
}
void RenX_IRCJoinPlugin::OnPart(Jupiter::IRC::Client *source, std::string_view channel, std::string_view nick, std::string_view reason) void RenX_IRCJoinPlugin::OnPart(Jupiter::IRC::Client *source, std::string_view channel, std::string_view nick, std::string_view reason) {
{ if (!RenX_IRCJoinPlugin::partFmt.empty()) {
if (!RenX_IRCJoinPlugin::partFmt.empty())
{
int access = source->getAccessLevel(channel, nick); int access = source->getAccessLevel(channel, nick);
if (access >= RenX_IRCJoinPlugin::minAccessPartMessage && (RenX_IRCJoinPlugin::maxAccessPartMessage == -1 || access <= RenX_IRCJoinPlugin::maxAccessPartMessage)) if (access >= RenX_IRCJoinPlugin::minAccessPartMessage && (RenX_IRCJoinPlugin::maxAccessPartMessage == -1 || access <= RenX_IRCJoinPlugin::maxAccessPartMessage)) {
{
RenX::Server *server; RenX::Server *server;
int type = source->getChannel(channel)->getType(); int type = source->getChannel(channel)->getType();
Jupiter::String msg; std::string msg;
if (reason.empty()) if (reason.empty())
msg = RenX_IRCJoinPlugin::partFmtNoReason; msg = RenX_IRCJoinPlugin::partFmtNoReason;
else else
msg = RenX_IRCJoinPlugin::partFmt; msg = RenX_IRCJoinPlugin::partFmt;
msg.replace(RenX_IRCJoinPlugin::nameTag, nick); RenX::replace_tag(msg, RenX_IRCJoinPlugin::nameTag, nick);
msg.replace(RenX_IRCJoinPlugin::chanTag, channel); RenX::replace_tag(msg, RenX_IRCJoinPlugin::chanTag, channel);
msg.replace(RenX_IRCJoinPlugin::partReasonTag, reason); RenX::replace_tag(msg, RenX_IRCJoinPlugin::partReasonTag, reason);
auto checkType = [&]() auto checkType = [&]() {
{ if (this->publicOnly) {
if (this->publicOnly)
return server->isPublicLogChanType(type); return server->isPublicLogChanType(type);
else }
else {
return server->isLogChanType(type); return server->isLogChanType(type);
}
}; };
for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) {
{
server = RenX::getCore()->getServer(i); server = RenX::getCore()->getServer(i);
if (checkType() && (RenX_IRCJoinPlugin::partMsgAlways || server->players.size() != server->getBotCount())) if (checkType() && (RenX_IRCJoinPlugin::partMsgAlways || server->players.size() != server->getBotCount())) {
server->sendMessage(msg); server->sendMessage(msg);
} }
} }
} }
} }
}
int RenX_IRCJoinPlugin::OnRehash() int RenX_IRCJoinPlugin::OnRehash()
{ {

13
src/Plugins/RenX/RenX.IRCJoin/RenX_IRCJoin.h

@ -20,7 +20,6 @@
#define _RENX_IRCJOIN_H_HEADER #define _RENX_IRCJOIN_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_IRCJoinPlugin : public RenX::Plugin class RenX_IRCJoinPlugin : public RenX::Plugin
@ -38,12 +37,12 @@ private:
bool partMsgAlways; bool partMsgAlways;
int minAccessPartMessage; int minAccessPartMessage;
int maxAccessPartMessage; int maxAccessPartMessage;
Jupiter::StringS nameTag; std::string nameTag;
Jupiter::StringS chanTag; std::string chanTag;
Jupiter::StringS partReasonTag; std::string partReasonTag;
Jupiter::StringS joinFmt; std::string joinFmt;
Jupiter::StringS partFmt; std::string partFmt;
Jupiter::StringS partFmtNoReason; std::string partFmtNoReason;
}; };
#endif // _RENX_IRCJOIN_H_HEADER #endif // _RENX_IRCJOIN_H_HEADER

3
src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp

@ -23,7 +23,6 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_KickDupes.h" #include "RenX_KickDupes.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool RenX_KickDupesPlugin::initialize() { bool RenX_KickDupesPlugin::initialize() {
@ -48,7 +47,7 @@ void RenX_KickDupesPlugin::RenX_OnPlayerIdentify(RenX::Server &in_server, const
if (player.hwid == in_player.hwid && player.id != in_player.id) { if (player.hwid == in_player.hwid && player.id != in_player.id) {
// Two players have the same HWID, but separate player IDs; kick the pre-existing player if there's too many. // Two players have the same HWID, but separate player IDs; kick the pre-existing player if there's too many.
if (++hits > s_tolerance) { if (++hits > s_tolerance) {
in_server.forceKickPlayer(player, "Ghost client detected"_jrs); in_server.forceKickPlayer(player, "Ghost client detected"sv);
} }
} }
} }

1
src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.h

@ -20,7 +20,6 @@
#define _RENX_KICKDUPES_H_HEADER #define _RENX_KICKDUPES_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_KickDupesPlugin : public RenX::Plugin class RenX_KickDupesPlugin : public RenX::Plugin

17
src/Plugins/RenX/RenX.Ladder.All-Time/RenX_Ladder_All_Time.cpp

@ -19,18 +19,18 @@
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Ladder_All_Time.h" #include "RenX_Ladder_All_Time.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_Ladder_All_TimePlugin::initialize() bool RenX_Ladder_All_TimePlugin::initialize() {
{
// Load database // Load database
this->database.process_file(this->config.get("LadderDatabase"_jrs, "Ladder.db"_jrs)); this->database.process_file(this->config.get("LadderDatabase"sv, "Ladder.db"sv));
this->database.setName(this->config.get("DatabaseName"_jrs, "All-Time"_jrs)); this->database.setName(this->config.get("DatabaseName"sv, "All-Time"sv));
this->database.setOutputTimes(this->config.get<bool>("OutputTimes"_jrs, true)); this->database.setOutputTimes(this->config.get<bool>("OutputTimes"sv, true));
// Force database to default, if desired // Force database to default, if desired
if (this->config.get<bool>("ForceDefault"_jrs, true)) if (this->config.get<bool>("ForceDefault"sv, true)) {
RenX::default_ladder_database = &this->database; RenX::default_ladder_database = &this->database;
}
return true; return true;
} }
@ -38,7 +38,6 @@ bool RenX_Ladder_All_TimePlugin::initialize()
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_Ladder_All_TimePlugin pluginInstance; RenX_Ladder_All_TimePlugin pluginInstance;
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

1
src/Plugins/RenX/RenX.Ladder.All-Time/RenX_Ladder_All_Time.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_ALL_TIME #define _RENX_LADDER_ALL_TIME
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

23
src/Plugins/RenX/RenX.Ladder.Daily/RenX_Ladder_Daily.cpp

@ -20,22 +20,22 @@
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Ladder_Daily.h" #include "RenX_Ladder_Daily.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_Ladder_Daily_TimePlugin::initialize() bool RenX_Ladder_Daily_TimePlugin::initialize() {
{
time_t current_time = time(0); time_t current_time = time(0);
// Load database // Load database
this->database.process_file(this->config.get("LadderDatabase"_jrs, "Ladder.Daily.db"_jrs)); this->database.process_file(this->config.get("LadderDatabase"sv, "Ladder.Daily.db"sv));
this->database.setName(this->config.get("DatabaseName"_jrs, "Daily"_jrs)); this->database.setName(this->config.get("DatabaseName"sv, "Daily"sv));
this->database.setOutputTimes(this->config.get<bool>("OutputTimes"_jrs, false)); this->database.setOutputTimes(this->config.get<bool>("OutputTimes"sv, false));
this->last_sorted_day = gmtime(&current_time)->tm_wday; this->last_sorted_day = gmtime(&current_time)->tm_wday;
this->database.OnPreUpdateLadder = OnPreUpdateLadder; this->database.OnPreUpdateLadder = OnPreUpdateLadder;
// Force database to default, if desired // Force database to default, if desired
if (this->config.get<bool>("ForceDefault"_jrs, false)) if (this->config.get<bool>("ForceDefault"sv, false)) {
RenX::default_ladder_database = &this->database; RenX::default_ladder_database = &this->database;
}
return true; return true;
} }
@ -43,16 +43,15 @@ bool RenX_Ladder_Daily_TimePlugin::initialize()
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_Ladder_Daily_TimePlugin pluginInstance; RenX_Ladder_Daily_TimePlugin pluginInstance;
void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) {
{
time_t current_time = time(0); time_t current_time = time(0);
tm *tm_ptr = gmtime(&current_time); tm *tm_ptr = gmtime(&current_time);
if (pluginInstance.last_sorted_day != tm_ptr->tm_wday) if (pluginInstance.last_sorted_day != tm_ptr->tm_wday) {
database.erase(); database.erase();
}
pluginInstance.last_sorted_day = tm_ptr->tm_wday; pluginInstance.last_sorted_day = tm_ptr->tm_wday;
} }
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

1
src/Plugins/RenX/RenX.Ladder.Daily/RenX_Ladder_Daily.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_ALL_TIME #define _RENX_LADDER_ALL_TIME
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

20
src/Plugins/RenX/RenX.Ladder.Monthly/RenX_Ladder_Monthly.cpp

@ -20,22 +20,22 @@
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Ladder_Monthly.h" #include "RenX_Ladder_Monthly.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_Ladder_Monthly_TimePlugin::initialize() bool RenX_Ladder_Monthly_TimePlugin::initialize() {
{
time_t current_time = time(0); time_t current_time = time(0);
// Load database // Load database
this->database.process_file(this->config.get("LadderDatabase"_jrs, "Ladder.Monthly.db"_jrs)); this->database.process_file(this->config.get("LadderDatabase"sv, "Ladder.Monthly.db"sv));
this->database.setName(this->config.get("DatabaseName"_jrs, "Monthly"_jrs)); this->database.setName(this->config.get("DatabaseName"sv, "Monthly"sv));
this->database.setOutputTimes(this->config.get<bool>("OutputTimes"_jrs, false)); this->database.setOutputTimes(this->config.get<bool>("OutputTimes"sv, false));
this->last_sorted_month = gmtime(&current_time)->tm_mon; this->last_sorted_month = gmtime(&current_time)->tm_mon;
this->database.OnPreUpdateLadder = OnPreUpdateLadder; this->database.OnPreUpdateLadder = OnPreUpdateLadder;
// Force database to default, if desired // Force database to default, if desired
if (this->config.get<bool>("ForceDefault"_jrs, false)) if (this->config.get<bool>("ForceDefault"sv, false)) {
RenX::default_ladder_database = &this->database; RenX::default_ladder_database = &this->database;
}
return true; return true;
} }
@ -43,12 +43,12 @@ bool RenX_Ladder_Monthly_TimePlugin::initialize()
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_Ladder_Monthly_TimePlugin pluginInstance; RenX_Ladder_Monthly_TimePlugin pluginInstance;
void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) {
{
time_t current_time = time(0); time_t current_time = time(0);
tm *tm_ptr = gmtime(&current_time); tm *tm_ptr = gmtime(&current_time);
if (pluginInstance.last_sorted_month != tm_ptr->tm_mon) if (pluginInstance.last_sorted_month != tm_ptr->tm_mon) {
database.erase(); database.erase();
}
pluginInstance.last_sorted_month = tm_ptr->tm_mon; pluginInstance.last_sorted_month = tm_ptr->tm_mon;
} }

1
src/Plugins/RenX/RenX.Ladder.Monthly/RenX_Ladder_Monthly.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_ALL_TIME #define _RENX_LADDER_ALL_TIME
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

104
src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp

@ -25,14 +25,13 @@
#include "RenX_Ladder_Web.h" #include "RenX_Ladder_Web.h"
using namespace std::literals; using namespace std::literals;
using namespace Jupiter::literals;
bool RenX_Ladder_WebPlugin::initialize() { bool RenX_Ladder_WebPlugin::initialize() {
RenX_Ladder_WebPlugin::ladder_page_name = this->config.get("LadderPageName"_jrs, ""_jrs); RenX_Ladder_WebPlugin::ladder_page_name = this->config.get("LadderPageName"sv, ""sv);
RenX_Ladder_WebPlugin::search_page_name = this->config.get("SearchPageName"_jrs, "search"_jrs); RenX_Ladder_WebPlugin::search_page_name = this->config.get("SearchPageName"sv, "search"sv);
RenX_Ladder_WebPlugin::profile_page_name = this->config.get("ProfilePageName"_jrs, "profile"_jrs); RenX_Ladder_WebPlugin::profile_page_name = this->config.get("ProfilePageName"sv, "profile"sv);
RenX_Ladder_WebPlugin::web_hostname = this->config.get("Hostname"_jrs, ""_jrs); RenX_Ladder_WebPlugin::web_hostname = this->config.get("Hostname"sv, ""sv);
RenX_Ladder_WebPlugin::web_path = this->config.get("Path"_jrs, "/"_jrs); RenX_Ladder_WebPlugin::web_path = this->config.get("Path"sv, "/"sv);
this->init(); this->init();
@ -71,17 +70,17 @@ void RenX_Ladder_WebPlugin::init() {
FILE *file; FILE *file;
int chr; int chr;
RenX_Ladder_WebPlugin::web_header_filename = static_cast<std::string>(this->config.get("HeaderFilename"_jrs, "RenX.Ladder.Web.Header.html"_jrs)); RenX_Ladder_WebPlugin::web_header_filename = static_cast<std::string>(this->config.get("HeaderFilename"sv, "RenX.Ladder.Web.Header.html"sv));
RenX_Ladder_WebPlugin::web_footer_filename = static_cast<std::string>(this->config.get("FooterFilename"_jrs, "RenX.Ladder.Web.Footer.html"_jrs)); RenX_Ladder_WebPlugin::web_footer_filename = static_cast<std::string>(this->config.get("FooterFilename"sv, "RenX.Ladder.Web.Footer.html"sv));
RenX_Ladder_WebPlugin::web_profile_filename = static_cast<std::string>(this->config.get("ProfileFilename"_jrs, "RenX.Ladder.Web.Profile.html"_jrs)); RenX_Ladder_WebPlugin::web_profile_filename = static_cast<std::string>(this->config.get("ProfileFilename"sv, "RenX.Ladder.Web.Profile.html"sv));
RenX_Ladder_WebPlugin::web_ladder_table_header_filename = static_cast<std::string>(this->config.get("LadderTableHeaderFilename"_jrs, "RenX.Ladder.Web.Ladder.Table.Header.html"_jrs)); RenX_Ladder_WebPlugin::web_ladder_table_header_filename = static_cast<std::string>(this->config.get("LadderTableHeaderFilename"sv, "RenX.Ladder.Web.Ladder.Table.Header.html"sv));
RenX_Ladder_WebPlugin::web_ladder_table_footer_filename = static_cast<std::string>(this->config.get("LadderTableFooterFilename"_jrs, "RenX.Ladder.Web.Ladder.Table.Footer.html"_jrs)); RenX_Ladder_WebPlugin::web_ladder_table_footer_filename = static_cast<std::string>(this->config.get("LadderTableFooterFilename"sv, "RenX.Ladder.Web.Ladder.Table.Footer.html"sv));
RenX_Ladder_WebPlugin::entries_per_page = this->config.get<size_t>("EntriesPerPage"_jrs, 50); RenX_Ladder_WebPlugin::entries_per_page = this->config.get<size_t>("EntriesPerPage"sv, 50);
RenX_Ladder_WebPlugin::min_search_name_length = this->config.get<size_t>("MinSearchNameLength"_jrs, 3); RenX_Ladder_WebPlugin::min_search_name_length = this->config.get<size_t>("MinSearchNameLength"sv, 3);
RenX_Ladder_WebPlugin::entry_table_row = this->config.get("EntryTableRow"_jrs, R"html(<tr><td class="data-col-a">{RANK}</td><td class="data-col-b"><a href="profile?id={STEAM}&database={OBJECT}">{NAME}</a></td><td class="data-col-a">{SCORE}</td><td class="data-col-b">{SPM}</td><td class="data-col-a">{GAMES}</td><td class="data-col-b">{WINS}</td><td class="data-col-a">{LOSSES}</td><td class="data-col-b">{WLR}</td><td class="data-col-a">{KILLS}</td><td class="data-col-b">{DEATHS}</td><td class="data-col-a">{KDR}</td></tr>)html"_jrs); RenX_Ladder_WebPlugin::entry_table_row = this->config.get("EntryTableRow"sv, R"html(<tr><td class="data-col-a">{RANK}</td><td class="data-col-b"><a href="profile?id={STEAM}&database={OBJECT}">{NAME}</a></td><td class="data-col-a">{SCORE}</td><td class="data-col-b">{SPM}</td><td class="data-col-a">{GAMES}</td><td class="data-col-b">{WINS}</td><td class="data-col-a">{LOSSES}</td><td class="data-col-b">{WLR}</td><td class="data-col-a">{KILLS}</td><td class="data-col-b">{DEATHS}</td><td class="data-col-a">{KDR}</td></tr>)html"sv);
RenX_Ladder_WebPlugin::entry_profile_previous = this->config.get("EntryProfilePrevious"_jrs, R"html(<form class="profile-previous"><input type="hidden" name="database" value="{OBJECT}"/><input type="hidden" name="id" value="{WEAPON}"/><input class="profile-previous-submit" type="submit" value="&#x21A9 Previous" /></form>)html"_jrs); RenX_Ladder_WebPlugin::entry_profile_previous = this->config.get("EntryProfilePrevious"sv, R"html(<form class="profile-previous"><input type="hidden" name="database" value="{OBJECT}"/><input type="hidden" name="id" value="{WEAPON}"/><input class="profile-previous-submit" type="submit" value="&#x21A9 Previous" /></form>)html"sv);
RenX_Ladder_WebPlugin::entry_profile_next = this->config.get("EntryProfileNext"_jrs, R"html(<form class="profile-next"><input type="hidden" name="database" value="{OBJECT}"/><input type="hidden" name="id" value="{VSTEAM}"/><input class="profile-next-submit" type="submit" value="Next &#x21AA" /></form>)html"_jrs); RenX_Ladder_WebPlugin::entry_profile_next = this->config.get("EntryProfileNext"sv, R"html(<form class="profile-next"><input type="hidden" name="database" value="{OBJECT}"/><input type="hidden" name="id" value="{VSTEAM}"/><input class="profile-next-submit" type="submit" value="Next &#x21AA" /></form>)html"sv);
RenX::sanitizeTags(RenX_Ladder_WebPlugin::entry_table_row); RenX::sanitizeTags(RenX_Ladder_WebPlugin::entry_table_row);
RenX::sanitizeTags(RenX_Ladder_WebPlugin::entry_profile_previous); RenX::sanitizeTags(RenX_Ladder_WebPlugin::entry_profile_previous);
@ -155,30 +154,30 @@ int RenX_Ladder_WebPlugin::OnRehash() {
RenX_Ladder_WebPlugin pluginInstance; RenX_Ladder_WebPlugin pluginInstance;
/** Search bar */ /** Search bar */
Jupiter::String generate_search(RenX::LadderDatabase *db) { std::string generate_search(RenX::LadderDatabase *db) {
std::string result; std::string result;
result = R"database-search(<form action="search" method="get" class="leaderboard-search"><input type="text" class="leaderboard-search-input" name="name" size="30" placeholder="Player name" value=""/>)database-search"_jrs; result = R"database-search(<form action="search" method="get" class="leaderboard-search"><input type="text" class="leaderboard-search-input" name="name" size="30" placeholder="Player name" value=""/>)database-search"sv;
if (db != nullptr && db != RenX::default_ladder_database) { if (db != nullptr && db != RenX::default_ladder_database) {
result += R"database-search(<input type="hidden" name="database" value=")database-search"_jrs; result += R"database-search(<input type="hidden" name="database" value=")database-search"sv;
result += db->getName(); result += db->getName();
result += R"database-search("/>)database-search"_jrs; result += R"database-search("/>)database-search"sv;
} }
result += R"database-search(<input type="submit" class="leaderboard-button" value="Search"/></form>)database-search"_jrs; result += R"database-search(<input type="submit" class="leaderboard-button" value="Search"/></form>)database-search"sv;
return result; return result;
} }
/** Database selector */ /** Database selector */
Jupiter::String generate_database_selector(RenX::LadderDatabase *db, const Jupiter::HTTP::HTMLFormResponse& query_params) { std::string generate_database_selector(RenX::LadderDatabase *db, const Jupiter::HTTP::HTMLFormResponse& query_params) {
std::string result; std::string result;
result = R"database-select(<form method="get" class="database-select-form"><select name="database" class="database-select">)database-select"_jrs; result = R"database-select(<form method="get" class="database-select-form"><select name="database" class="database-select">)database-select"sv;
if (db != nullptr) { if (db != nullptr) {
result += "<option value=\""_jrs; result += "<option value=\""sv;
result += db->getName(); result += db->getName();
result += "\">"_jrs; result += "\">"sv;
result += db->getName(); result += db->getName();
result += "</option>"_jrs; result += "</option>"sv;
} }
else if (RenX::ladder_databases.size() == 0) { else if (RenX::ladder_databases.size() == 0) {
return {}; return {};
@ -186,64 +185,64 @@ Jupiter::String generate_database_selector(RenX::LadderDatabase *db, const Jupit
for (const auto& database : RenX::ladder_databases) { for (const auto& database : RenX::ladder_databases) {
if (database != db) { if (database != db) {
result += "<option value=\""_jrs; result += "<option value=\""sv;
result += database->getName(); result += database->getName();
result += "\">"_jrs; result += "\">"sv;
result += database->getName(); result += database->getName();
result += "</option>"_jrs; result += "</option>"sv;
} }
} }
auto value = query_params.tableFind("id"sv); auto value = query_params.tableFind("id"sv);
if (value != query_params.table.end()) { if (value != query_params.table.end()) {
result += R"html(<input type="hidden" name="id" value=")html"_jrs; result += R"html(<input type="hidden" name="id" value=")html"sv;
result += value->second; result += value->second;
result += R"html("/>)html"_jrs; result += R"html("/>)html"sv;
} }
result += R"database-select(</select><input type="submit" class="leaderboard-button" value="Go"/></form>)database-select"_jrs; result += R"database-select(</select><input type="submit" class="leaderboard-button" value="Go"/></form>)database-select"sv;
return result; return result;
} }
/** Page buttons */ /** Page buttons */
Jupiter::String generate_page_buttons(RenX::LadderDatabase *db) { std::string generate_page_buttons(RenX::LadderDatabase *db) {
std::string result; std::string result;
size_t entry_count = db->getEntries(); size_t entry_count = db->getEntries();
size_t entries_per_page = pluginInstance.getEntriesPerPage(); size_t entries_per_page = pluginInstance.getEntriesPerPage();
result = R"html(<div id="leaderboard-paging">)html"_jrs; result = R"html(<div id="leaderboard-paging">)html"sv;
size_t entry_index = 0, page_index = 1; size_t entry_index = 0, page_index = 1;
while (entry_index < entry_count) { while (entry_index < entry_count) {
// Add page // Add page
result += R"html(<span class="leaderboard-page"><a href="?start=)html"_jrs; result += R"html(<span class="leaderboard-page"><a href="?start=)html"sv;
result += string_printf("%u", entry_index); result += string_printf("%u", entry_index);
if (db != RenX::default_ladder_database) { if (db != RenX::default_ladder_database) {
result += "&database="_jrs; result += "&database="sv;
result += db->getName(); result += db->getName();
} }
result += R"html(">)html"_jrs; result += R"html(">)html"sv;
result += string_printf("%u", page_index); result += string_printf("%u", page_index);
result += R"html(</a></span>)html"_jrs; result += R"html(</a></span>)html"sv;
// Increment indexes // Increment indexes
entry_index += entries_per_page; entry_index += entries_per_page;
++page_index; ++page_index;
} }
result += R"html(</div>)html"_jrs; result += R"html(</div>)html"sv;
return result; return result;
} }
/** Ladder page */ /** Ladder page */
Jupiter::String RenX_Ladder_WebPlugin::generate_entry_table(RenX::LadderDatabase *db, uint8_t format, size_t index, size_t count) { std::string RenX_Ladder_WebPlugin::generate_entry_table(RenX::LadderDatabase *db, uint8_t format, size_t index, size_t count) {
if (db->getEntries() == 0) { // No ladder data if (db->getEntries() == 0) { // No ladder data
return Jupiter::String("Error: No ladder data"_jrs); return std::string("Error: No ladder data"sv);
} }
if (index >= db->getEntries() || count == 0) { // Invalid entry range if (index >= db->getEntries() || count == 0) { // Invalid entry range
return Jupiter::String("Error: Invalid range"_jrs); return std::string("Error: Invalid range"sv);
} }
if (index + count > db->getEntries()) { // Invalid entry range; use valid portion of range if (index + count > db->getEntries()) { // Invalid entry range; use valid portion of range
@ -259,7 +258,8 @@ Jupiter::String RenX_Ladder_WebPlugin::generate_entry_table(RenX::LadderDatabase
} }
// table header // table header
Jupiter::String result(2048); std::string result;
result.reserve(ladder_table_header.size() + ladder_table_footer.size() + (count * entry_table_row.size()) + 256);
if ((format & this->FLAG_INCLUDE_DATA_HEADER) != 0) { // Data Header if ((format & this->FLAG_INCLUDE_DATA_HEADER) != 0) { // Data Header
result = RenX_Ladder_WebPlugin::ladder_table_header; result = RenX_Ladder_WebPlugin::ladder_table_header;
@ -326,7 +326,7 @@ std::string* RenX_Ladder_WebPlugin::generate_search_page(RenX::LadderDatabase *d
result->append(generate_database_selector(db, query_params)); result->append(generate_database_selector(db, query_params));
if (db->getEntries() == 0) { // No ladder data if (db->getEntries() == 0) { // No ladder data
result->append("Error: No ladder data"_jrs); result->append("Error: No ladder data"sv);
if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer
result->append(RenX_Ladder_WebPlugin::footer); result->append(RenX_Ladder_WebPlugin::footer);
@ -375,7 +375,7 @@ std::string* RenX_Ladder_WebPlugin::generate_profile_page(RenX::LadderDatabase *
result->append(generate_database_selector(db, query_params)); result->append(generate_database_selector(db, query_params));
if (db->getEntries() == 0) { // No ladder data if (db->getEntries() == 0) { // No ladder data
result->append("Error: No ladder data"_jrs); result->append("Error: No ladder data"sv);
if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer
result->append(RenX_Ladder_WebPlugin::footer); result->append(RenX_Ladder_WebPlugin::footer);
@ -391,14 +391,14 @@ std::string* RenX_Ladder_WebPlugin::generate_profile_page(RenX::LadderDatabase *
} }
if (entry == nullptr) { if (entry == nullptr) {
result->append("Error: Player not found"_jrs); result->append("Error: Player not found"sv);
} }
else { else {
std::string profile_data(RenX_Ladder_WebPlugin::entry_profile); std::string profile_data(RenX_Ladder_WebPlugin::entry_profile);
RenX::processTags(profile_data, *entry); RenX::processTags(profile_data, *entry);
result->append(profile_data); result->append(profile_data);
result->append("<div class=\"profile-navigation\">"_jrs); result->append("<div class=\"profile-navigation\">"sv);
if (entry->prev != nullptr) if (entry->prev != nullptr)
{ {
profile_data = RenX_Ladder_WebPlugin::entry_profile_previous; profile_data = RenX_Ladder_WebPlugin::entry_profile_previous;
@ -415,7 +415,7 @@ std::string* RenX_Ladder_WebPlugin::generate_profile_page(RenX::LadderDatabase *
RenX::processTags(profile_data, *entry->next); RenX::processTags(profile_data, *entry->next);
result->append(profile_data); result->append(profile_data);
} }
result->append("</div>"_jrs); result->append("</div>"sv);
} }
if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer if ((format & this->FLAG_INCLUDE_PAGE_FOOTER) != 0) // Footer
@ -431,10 +431,10 @@ std::string* generate_no_db_page(const Jupiter::HTTP::HTMLFormResponse& query_pa
if (RenX::ladder_databases.size() != 0) { if (RenX::ladder_databases.size() != 0) {
result->append(generate_search(nullptr)); result->append(generate_search(nullptr));
result->append(generate_database_selector(nullptr, query_params)); result->append(generate_database_selector(nullptr, query_params));
result->append("Error: No such database exists"_jrs); result->append("Error: No such database exists"sv);
} }
else { else {
result->append("Error: No ladder databases loaded"_jrs); result->append("Error: No ladder databases loaded"sv);
} }
result->append(pluginInstance.footer); result->append(pluginInstance.footer);
return result; return result;
@ -511,8 +511,8 @@ std::string* handle_profile_page(std::string_view query_string) {
if (html_form_response.table.size() != 0) if (html_form_response.table.size() != 0)
{ {
format = html_form_response.tableGetCast<uint8_t>("format"_jrs, format); format = html_form_response.tableGetCast<uint8_t>("format"sv, format);
steam_id = html_form_response.tableGetCast<uint64_t>("id"_jrs, steam_id); steam_id = html_form_response.tableGetCast<uint64_t>("id"sv, steam_id);
std::string_view db_name = html_form_response.tableGet("database"sv, {}); std::string_view db_name = html_form_response.tableGet("database"sv, {});
if (!db_name.empty()) { if (!db_name.empty()) {

8
src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.h

@ -20,14 +20,12 @@
#define _RENX_LADDER_WEB_H #define _RENX_LADDER_WEB_H
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/String.hpp"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_Ladder_WebPlugin : public RenX::Plugin class RenX_Ladder_WebPlugin : public RenX::Plugin
{ {
protected: protected:
Jupiter::String generate_entry_table(RenX::LadderDatabase *db, uint8_t format, size_t index, size_t count); std::string generate_entry_table(RenX::LadderDatabase *db, uint8_t format, size_t index, size_t count);
public: public:
const uint8_t FLAG_INCLUDE_PAGE_HEADER = 0x01; const uint8_t FLAG_INCLUDE_PAGE_HEADER = 0x01;
@ -37,8 +35,8 @@ public:
const uint8_t FLAG_INCLUDE_SEARCH = 0x10; const uint8_t FLAG_INCLUDE_SEARCH = 0x10;
const uint8_t FLAG_INCLUDE_SELECTOR = 0x20; const uint8_t FLAG_INCLUDE_SELECTOR = 0x20;
Jupiter::StringS header; std::string header;
Jupiter::StringS footer; std::string footer;
std::string* generate_ladder_page(RenX::LadderDatabase *db, uint8_t format, size_t start_index, size_t count, const Jupiter::HTTP::HTMLFormResponse& query_params); std::string* generate_ladder_page(RenX::LadderDatabase *db, uint8_t format, size_t start_index, size_t count, const Jupiter::HTTP::HTMLFormResponse& query_params);
std::string* generate_search_page(RenX::LadderDatabase *db, uint8_t format, size_t start_index, size_t count, std::string_view name, const Jupiter::HTTP::HTMLFormResponse& query_params); std::string* generate_search_page(RenX::LadderDatabase *db, uint8_t format, size_t start_index, size_t count, std::string_view name, const Jupiter::HTTP::HTMLFormResponse& query_params);
std::string* generate_profile_page(RenX::LadderDatabase *db, uint8_t format, uint64_t steam_id, const Jupiter::HTTP::HTMLFormResponse& query_params); std::string* generate_profile_page(RenX::LadderDatabase *db, uint8_t format, uint64_t steam_id, const Jupiter::HTTP::HTMLFormResponse& query_params);

26
src/Plugins/RenX/RenX.Ladder.Weekly/RenX_Ladder_Weekly.cpp

@ -20,23 +20,23 @@
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Ladder_Weekly.h" #include "RenX_Ladder_Weekly.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_Ladder_Weekly_TimePlugin::initialize() bool RenX_Ladder_Weekly_TimePlugin::initialize() {
{
time_t current_time = time(0); time_t current_time = time(0);
// Load database // Load database
this->database.process_file(this->config.get("LadderDatabase"_jrs, "Ladder.Weekly.db"_jrs)); this->database.process_file(this->config.get("LadderDatabase"sv, "Ladder.Weekly.db"sv));
this->database.setName(this->config.get("DatabaseName"_jrs, "Weekly"_jrs)); this->database.setName(this->config.get("DatabaseName"sv, "Weekly"sv));
this->database.setOutputTimes(this->config.get<bool>("OutputTimes"_jrs, false)); this->database.setOutputTimes(this->config.get<bool>("OutputTimes"sv, false));
this->last_sorted_day = gmtime(&current_time)->tm_wday; this->last_sorted_day = gmtime(&current_time)->tm_wday;
this->reset_day = this->config.get<int>("ResetDay"_jrs); this->reset_day = this->config.get<int>("ResetDay"sv);
this->database.OnPreUpdateLadder = OnPreUpdateLadder; this->database.OnPreUpdateLadder = OnPreUpdateLadder;
// Force database to default, if desired // Force database to default, if desired
if (this->config.get<bool>("ForceDefault"_jrs, false)) if (this->config.get<bool>("ForceDefault"sv, false)) {
RenX::default_ladder_database = &this->database; RenX::default_ladder_database = &this->database;
}
return true; return true;
} }
@ -44,16 +44,16 @@ bool RenX_Ladder_Weekly_TimePlugin::initialize()
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_Ladder_Weekly_TimePlugin pluginInstance; RenX_Ladder_Weekly_TimePlugin pluginInstance;
void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) {
{
time_t current_time = time(0); time_t current_time = time(0);
tm *tm_ptr = gmtime(&current_time); tm *tm_ptr = gmtime(&current_time);
if (pluginInstance.last_sorted_day != tm_ptr->tm_wday && tm_ptr->tm_wday == pluginInstance.reset_day) if (pluginInstance.last_sorted_day != tm_ptr->tm_wday && tm_ptr->tm_wday == pluginInstance.reset_day) {
database.erase(); database.erase();
}
pluginInstance.last_sorted_day = tm_ptr->tm_wday; pluginInstance.last_sorted_day = tm_ptr->tm_wday;
} }
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

1
src/Plugins/RenX/RenX.Ladder.Weekly/RenX_Ladder_Weekly.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_ALL_TIME #define _RENX_LADDER_ALL_TIME
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

23
src/Plugins/RenX/RenX.Ladder.Yearly/RenX_Ladder_Yearly.cpp

@ -20,22 +20,22 @@
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "RenX_Ladder_Yearly.h" #include "RenX_Ladder_Yearly.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_Ladder_Yearly_TimePlugin::initialize() bool RenX_Ladder_Yearly_TimePlugin::initialize() {
{
time_t current_time = time(0); time_t current_time = time(0);
// Load database // Load database
this->database.process_file(this->config.get("LadderDatabase"_jrs, "Ladder.Yearly.db"_jrs)); this->database.process_file(this->config.get("LadderDatabase"sv, "Ladder.Yearly.db"sv));
this->database.setName(this->config.get("DatabaseName"_jrs, "Yearly"_jrs)); this->database.setName(this->config.get("DatabaseName"sv, "Yearly"sv));
this->database.setOutputTimes(this->config.get<bool>("OutputTimes"_jrs, false)); this->database.setOutputTimes(this->config.get<bool>("OutputTimes"sv, false));
this->last_sorted_year = gmtime(&current_time)->tm_year; this->last_sorted_year = gmtime(&current_time)->tm_year;
this->database.OnPreUpdateLadder = OnPreUpdateLadder; this->database.OnPreUpdateLadder = OnPreUpdateLadder;
// Force database to default, if desired // Force database to default, if desired
if (this->config.get<bool>("ForceDefault"_jrs, false)) if (this->config.get<bool>("ForceDefault"sv, false)) {
RenX::default_ladder_database = &this->database; RenX::default_ladder_database = &this->database;
}
return true; return true;
} }
@ -43,16 +43,15 @@ bool RenX_Ladder_Yearly_TimePlugin::initialize()
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_Ladder_Yearly_TimePlugin pluginInstance; RenX_Ladder_Yearly_TimePlugin pluginInstance;
void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) void OnPreUpdateLadder(RenX::LadderDatabase &database, RenX::Server &, const RenX::TeamType &) {
{
time_t current_time = time(0); time_t current_time = time(0);
tm *tm_ptr = gmtime(&current_time); tm *tm_ptr = gmtime(&current_time);
if (pluginInstance.last_sorted_year != tm_ptr->tm_year) if (pluginInstance.last_sorted_year != tm_ptr->tm_year) {
database.erase(); database.erase();
}
pluginInstance.last_sorted_year = tm_ptr->tm_year; pluginInstance.last_sorted_year = tm_ptr->tm_year;
} }
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

1
src/Plugins/RenX/RenX.Ladder.Yearly/RenX_Ladder_Yearly.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_ALL_TIME #define _RENX_LADDER_ALL_TIME
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

39
src/Plugins/RenX/RenX.Ladder/RenX_Ladder.cpp

@ -24,12 +24,11 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_BanDatabase.h" #include "RenX_BanDatabase.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool RenX_LadderPlugin::initialize() { bool RenX_LadderPlugin::initialize() {
RenX_LadderPlugin::only_pure = this->config.get<bool>("OnlyPure"_jrs, false); RenX_LadderPlugin::only_pure = this->config.get<bool>("OnlyPure"sv, false);
int mlcpno = this->config.get<int>("MaxLadderCommandPartNameOutput"_jrs, 5); int mlcpno = this->config.get<int>("MaxLadderCommandPartNameOutput"sv, 5);
if (mlcpno < 0) if (mlcpno < 0)
RenX_LadderPlugin::max_ladder_command_part_name_output = 0; RenX_LadderPlugin::max_ladder_command_part_name_output = 0;
else else
@ -65,9 +64,9 @@ void RenX_LadderPlugin::RenX_OnGameOver(RenX::Server &server, RenX::WinType winT
void RenX_LadderPlugin::RenX_OnCommand(RenX::Server &server, std::string_view ) { void RenX_LadderPlugin::RenX_OnCommand(RenX::Server &server, std::string_view ) {
if (jessilib::equalsi(server.getCurrentRCONCommand(), "clientvarlist"sv)) { if (jessilib::equalsi(server.getCurrentRCONCommand(), "clientvarlist"sv)) {
if (server.varData[this->name].get("w"_jrs, "0"_jrs) == "1"sv) { if (server.varData[this->name].get("w"sv, "0"sv) == "1"sv) {
server.varData[this->name].set("w"sv, "0"s); server.varData[this->name].set("w"sv, "0"s);
RenX::TeamType team = static_cast<RenX::TeamType>(server.varData[this->name].get("t"_jrs, "\0"_jrs)[0]); RenX::TeamType team = static_cast<RenX::TeamType>(server.varData[this->name].get("t"sv, "\0"sv)[0]);
for (const auto& database : RenX::ladder_databases) { for (const auto& database : RenX::ladder_databases) {
database->updateLadder(server, team); database->updateLadder(server, team);
} }
@ -84,7 +83,7 @@ RenX_LadderPlugin pluginInstance;
/** Ladder Commands */ /** Ladder Commands */
Jupiter::StringS FormatLadderResponse(RenX::LadderDatabase::Entry *entry, size_t rank) { std::string FormatLadderResponse(RenX::LadderDatabase::Entry *entry, size_t rank) {
return string_printf("#%" PRIuPTR ": \"%.*s\" - Score: %" PRIu64 " - Kills: %" PRIu32 " - Deaths: %" PRIu32 " - KDR: %.2f - SPM: %.2f", return string_printf("#%" PRIuPTR ": \"%.*s\" - Score: %" PRIu64 " - Kills: %" PRIu32 " - Deaths: %" PRIu32 " - KDR: %.2f - SPM: %.2f",
rank, entry->most_recent_name.size(), entry->most_recent_name.data(), entry->total_score, entry->total_kills, entry->total_deaths, rank, entry->most_recent_name.size(), entry->most_recent_name.data(), entry->total_score, entry->total_kills, entry->total_deaths,
static_cast<double>(entry->total_kills) / (entry->total_deaths == 0 ? 1 : static_cast<double>(entry->total_deaths)), static_cast<double>(entry->total_kills) / (entry->total_deaths == 0 ? 1 : static_cast<double>(entry->total_deaths)),
@ -94,17 +93,17 @@ Jupiter::StringS FormatLadderResponse(RenX::LadderDatabase::Entry *entry, size_t
// Ladder Command // Ladder Command
LadderGenericCommand::LadderGenericCommand() { LadderGenericCommand::LadderGenericCommand() {
this->addTrigger("ladder"_jrs); this->addTrigger("ladder"sv);
this->addTrigger("rank"_jrs); this->addTrigger("rank"sv);
} }
Jupiter::GenericCommand::ResponseLine *LadderGenericCommand::trigger(std::string_view parameters) { Jupiter::GenericCommand::ResponseLine *LadderGenericCommand::trigger(std::string_view parameters) {
if (parameters.empty()) { if (parameters.empty()) {
return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder <name | rank>"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Too few parameters. Syntax: ladder <name | rank>"sv, GenericCommand::DisplayType::PrivateError);
} }
if (RenX::default_ladder_database == nullptr) { if (RenX::default_ladder_database == nullptr) {
return new Jupiter::GenericCommand::ResponseLine("Error: No default ladder database specified."_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: No default ladder database specified."sv, GenericCommand::DisplayType::PrivateError);
} }
RenX::LadderDatabase::Entry *entry; RenX::LadderDatabase::Entry *entry;
@ -113,18 +112,18 @@ Jupiter::GenericCommand::ResponseLine *LadderGenericCommand::trigger(std::string
if (parameters_view.find_first_not_of("0123456789"sv) == std::string_view::npos) { if (parameters_view.find_first_not_of("0123456789"sv) == std::string_view::npos) {
rank = Jupiter::asUnsignedInt(parameters_view, 10); rank = Jupiter::asUnsignedInt(parameters_view, 10);
if (rank == 0) if (rank == 0)
return new Jupiter::GenericCommand::ResponseLine("Error: Invalid parameters"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Invalid parameters"sv, GenericCommand::DisplayType::PrivateError);
entry = RenX::default_ladder_database->getPlayerEntryByIndex(rank - 1); entry = RenX::default_ladder_database->getPlayerEntryByIndex(rank - 1);
if (entry == nullptr) if (entry == nullptr)
return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"sv, GenericCommand::DisplayType::PrivateError);
return new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(entry, rank), GenericCommand::DisplayType::PublicSuccess); return new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(entry, rank), GenericCommand::DisplayType::PublicSuccess);
} }
std::forward_list<std::pair<RenX::LadderDatabase::Entry, size_t>> list = RenX::default_ladder_database->getPlayerEntriesAndIndexByPartName(parameters, pluginInstance.getMaxLadderCommandPartNameOutput()); std::forward_list<std::pair<RenX::LadderDatabase::Entry, size_t>> list = RenX::default_ladder_database->getPlayerEntriesAndIndexByPartName(parameters, pluginInstance.getMaxLadderCommandPartNameOutput());
if (list.empty()) if (list.empty())
return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"_jrs, GenericCommand::DisplayType::PrivateError); return new Jupiter::GenericCommand::ResponseLine("Error: Player not found"sv, GenericCommand::DisplayType::PrivateError);
std::pair<RenX::LadderDatabase::Entry, size_t> &head_pair = list.front(); std::pair<RenX::LadderDatabase::Entry, size_t> &head_pair = list.front();
Jupiter::GenericCommand::ResponseLine *response_head = new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(head_pair.first), head_pair.second + 1), GenericCommand::DisplayType::PrivateSuccess); Jupiter::GenericCommand::ResponseLine *response_head = new Jupiter::GenericCommand::ResponseLine(FormatLadderResponse(std::addressof(head_pair.first), head_pair.second + 1), GenericCommand::DisplayType::PrivateSuccess);
@ -141,7 +140,7 @@ Jupiter::GenericCommand::ResponseLine *LadderGenericCommand::trigger(std::string
} }
std::string_view LadderGenericCommand::getHelp(std::string_view ) { std::string_view LadderGenericCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Fetches ladder information about a player. Syntax: ladder <name | rank>"); static constexpr std::string_view defaultHelp = "Fetches ladder information about a player. Syntax: ladder <name | rank>"sv;
return defaultHelp; return defaultHelp;
} }
@ -151,8 +150,8 @@ GENERIC_COMMAND_AS_CONSOLE_COMMAND(LadderGenericCommand)
// Ladder Game Command // Ladder Game Command
void LadderGameCommand::create() { void LadderGameCommand::create() {
this->addTrigger("ladder"_jrs); this->addTrigger("ladder"sv);
this->addTrigger("rank"_jrs); this->addTrigger("rank"sv);
} }
void LadderGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void LadderGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -164,13 +163,13 @@ void LadderGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
source->sendMessage(FormatLadderResponse(pair.first, pair.second + 1)); source->sendMessage(FormatLadderResponse(pair.first, pair.second + 1));
} }
else else
source->sendMessage(*player, "Error: You have no ladder data. Get started by sticking around until the end of the match!"_jrs); source->sendMessage(*player, "Error: You have no ladder data. Get started by sticking around until the end of the match!"sv);
} }
else else
source->sendMessage(*player, "Error: No default ladder database specified."_jrs); source->sendMessage(*player, "Error: No default ladder database specified."sv);
} }
else else
source->sendMessage(*player, "Error: You have no ladder data, because you're not using Steam."_jrs); source->sendMessage(*player, "Error: You have no ladder data, because you're not using Steam."sv);
} }
else { else {
Jupiter::GenericCommand::ResponseLine *response = LadderGenericCommand_instance.trigger(parameters); Jupiter::GenericCommand::ResponseLine *response = LadderGenericCommand_instance.trigger(parameters);
@ -185,7 +184,7 @@ void LadderGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
} }
std::string_view LadderGameCommand::getHelp(std::string_view ) { std::string_view LadderGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays ladder information about yourself, or another player. Syntax: ladder [name / rank]"); static constexpr std::string_view defaultHelp = "Displays ladder information about yourself, or another player. Syntax: ladder [name / rank]"sv;
return defaultHelp; return defaultHelp;
} }

1
src/Plugins/RenX/RenX.Ladder/RenX_Ladder.h

@ -20,7 +20,6 @@
#define _RENX_LADDER_H_HEADER #define _RENX_LADDER_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "IRC_Command.h" #include "IRC_Command.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_LadderDatabase.h" #include "RenX_LadderDatabase.h"

14
src/Plugins/RenX/RenX.Listen/RenX_Listen.cpp

@ -21,16 +21,16 @@
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Server.h" #include "RenX_Server.h"
using namespace Jupiter::literals; using namespace std::literals;
RenX_ListenPlugin::~RenX_ListenPlugin() { RenX_ListenPlugin::~RenX_ListenPlugin() {
RenX_ListenPlugin::socket.close(); RenX_ListenPlugin::socket.close();
} }
bool RenX_ListenPlugin::initialize() { bool RenX_ListenPlugin::initialize() {
uint16_t port = this->config.get<uint16_t>("Port"_jrs, 21337); uint16_t port = this->config.get<uint16_t>("Port"sv, 21337);
std::string_view address = this->config.get("Address"_jrs, "0.0.0.0"_jrs); std::string_view address = this->config.get("Address"sv, "0.0.0.0"sv);
RenX_ListenPlugin::serverSection = this->config.get("ServerSection"_jrs, this->getName()); RenX_ListenPlugin::serverSection = this->config.get("ServerSection"sv, this->getName());
return RenX_ListenPlugin::socket.bind(static_cast<std::string>(address).c_str(), port, true) && RenX_ListenPlugin::socket.setBlocking(false); return RenX_ListenPlugin::socket.bind(static_cast<std::string>(address).c_str(), port, true) && RenX_ListenPlugin::socket.setBlocking(false);
} }
@ -51,9 +51,9 @@ int RenX_ListenPlugin::think() {
int RenX_ListenPlugin::OnRehash() { int RenX_ListenPlugin::OnRehash() {
RenX::Plugin::OnRehash(); RenX::Plugin::OnRehash();
uint16_t port = this->config.get<uint16_t>("Port"_jrs, 21337); uint16_t port = this->config.get<uint16_t>("Port"sv, 21337);
std::string_view address = this->config.get("Address"_jrs, "0.0.0.0"_jrs); std::string_view address = this->config.get("Address"sv, "0.0.0.0"sv);
RenX_ListenPlugin::serverSection = this->config.get("ServerSection"_jrs, this->getName()); RenX_ListenPlugin::serverSection = this->config.get("ServerSection"sv, this->getName());
if (port != RenX_ListenPlugin::socket.getBoundPort() || address != RenX_ListenPlugin::socket.getBoundHostname()) { if (port != RenX_ListenPlugin::socket.getBoundPort() || address != RenX_ListenPlugin::socket.getBoundHostname()) {
puts("Notice: The Renegade-X listening socket has been changed!"); puts("Notice: The Renegade-X listening socket has been changed!");

1
src/Plugins/RenX/RenX.Listen/RenX_Listen.h

@ -20,7 +20,6 @@
#define _EXAMPLE_H_HEADER #define _EXAMPLE_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/TCPSocket.h" #include "Jupiter/TCPSocket.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"

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

@ -24,97 +24,97 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_LoggingPlugin::initialize() bool RenX_LoggingPlugin::initialize()
{ {
RenX_LoggingPlugin::muteOwnExecute = this->config.get<bool>("MuteOwnExecute"_jrs, true); RenX_LoggingPlugin::muteOwnExecute = this->config.get<bool>("MuteOwnExecute"sv, true);
RenX_LoggingPlugin::playerRDNSPublic = this->config.get<bool>("PlayerRDNSPublic"_jrs, false); RenX_LoggingPlugin::playerRDNSPublic = this->config.get<bool>("PlayerRDNSPublic"sv, false);
RenX_LoggingPlugin::playerIdentifyPublic = this->config.get<bool>("PlayerIdentifyPublic"_jrs, false); RenX_LoggingPlugin::playerIdentifyPublic = this->config.get<bool>("PlayerIdentifyPublic"sv, false);
RenX_LoggingPlugin::joinPublic = this->config.get<bool>("JoinPublic"_jrs, true); RenX_LoggingPlugin::joinPublic = this->config.get<bool>("JoinPublic"sv, true);
RenX_LoggingPlugin::partPublic = this->config.get<bool>("PartPublic"_jrs, true); RenX_LoggingPlugin::partPublic = this->config.get<bool>("PartPublic"sv, true);
RenX_LoggingPlugin::kickPublic = this->config.get<bool>("KickPublic"_jrs, true); RenX_LoggingPlugin::kickPublic = this->config.get<bool>("KickPublic"sv, true);
RenX_LoggingPlugin::nameChangePublic = this->config.get<bool>("NameChangePublic"_jrs, true); RenX_LoggingPlugin::nameChangePublic = this->config.get<bool>("NameChangePublic"sv, true);
RenX_LoggingPlugin::teamChangePublic = this->config.get<bool>("TeamChangePublic"_jrs, true); RenX_LoggingPlugin::teamChangePublic = this->config.get<bool>("TeamChangePublic"sv, true);
RenX_LoggingPlugin::speedHackPublic = this->config.get<bool>("SpeedHackPublic"_jrs, false); RenX_LoggingPlugin::speedHackPublic = this->config.get<bool>("SpeedHackPublic"sv, false);
RenX_LoggingPlugin::playerPublic = this->config.get<bool>("PlayerPublic"_jrs, false); RenX_LoggingPlugin::playerPublic = this->config.get<bool>("PlayerPublic"sv, false);
RenX_LoggingPlugin::chatPublic = this->config.get<bool>("ChatPublic"_jrs, true); RenX_LoggingPlugin::chatPublic = this->config.get<bool>("ChatPublic"sv, true);
RenX_LoggingPlugin::teamChatPublic = this->config.get<bool>("TeamChatPublic"_jrs, false); RenX_LoggingPlugin::teamChatPublic = this->config.get<bool>("TeamChatPublic"sv, false);
RenX_LoggingPlugin::radioChatPublic = this->config.get<bool>("RadioChatPublic"_jrs, false); RenX_LoggingPlugin::radioChatPublic = this->config.get<bool>("RadioChatPublic"sv, false);
RenX_LoggingPlugin::hostChatPublic = this->config.get<bool>("HostChatPublic"_jrs, true); RenX_LoggingPlugin::hostChatPublic = this->config.get<bool>("HostChatPublic"sv, true);
RenX_LoggingPlugin::hostPagePublic = this->config.get<bool>("HostPagePublic"_jrs, false); RenX_LoggingPlugin::hostPagePublic = this->config.get<bool>("HostPagePublic"sv, false);
RenX_LoggingPlugin::adminMessagePublic = this->config.get<bool>("AdminMessagePublic"_jrs, true); RenX_LoggingPlugin::adminMessagePublic = this->config.get<bool>("AdminMessagePublic"sv, true);
RenX_LoggingPlugin::adminPMessagePublic = this->config.get<bool>("AdminPagePublic"_jrs, false); RenX_LoggingPlugin::adminPMessagePublic = this->config.get<bool>("AdminPagePublic"sv, false);
RenX_LoggingPlugin::otherChatPublic = this->config.get<bool>("OtherChatPublic"_jrs, false); RenX_LoggingPlugin::otherChatPublic = this->config.get<bool>("OtherChatPublic"sv, false);
RenX_LoggingPlugin::deployPublic = this->config.get<bool>("DeployPublic"_jrs, true); RenX_LoggingPlugin::deployPublic = this->config.get<bool>("DeployPublic"sv, true);
RenX_LoggingPlugin::mineDeployPublic = this->config.get<bool>("MineDeployPublic"_jrs, false); RenX_LoggingPlugin::mineDeployPublic = this->config.get<bool>("MineDeployPublic"sv, false);
RenX_LoggingPlugin::overMinePublic = this->config.get<bool>("OverMinePublic"_jrs, false); RenX_LoggingPlugin::overMinePublic = this->config.get<bool>("OverMinePublic"sv, false);
RenX_LoggingPlugin::disarmPublic = this->config.get<bool>("DisarmPublic"_jrs, true); RenX_LoggingPlugin::disarmPublic = this->config.get<bool>("DisarmPublic"sv, true);
RenX_LoggingPlugin::mineDisarmPublic = this->config.get<bool>("MineDisarmPublic"_jrs, false); RenX_LoggingPlugin::mineDisarmPublic = this->config.get<bool>("MineDisarmPublic"sv, false);
RenX_LoggingPlugin::explodePublic = this->config.get<bool>("ExplodePublic"_jrs, false); RenX_LoggingPlugin::explodePublic = this->config.get<bool>("ExplodePublic"sv, false);
RenX_LoggingPlugin::suicidePublic = this->config.get<bool>("SuicidePublic"_jrs, true); RenX_LoggingPlugin::suicidePublic = this->config.get<bool>("SuicidePublic"sv, true);
RenX_LoggingPlugin::killPublic = this->config.get<bool>("KillPublic"_jrs, true); RenX_LoggingPlugin::killPublic = this->config.get<bool>("KillPublic"sv, true);
RenX_LoggingPlugin::diePublic = this->config.get<bool>("DiePublic"_jrs, true); RenX_LoggingPlugin::diePublic = this->config.get<bool>("DiePublic"sv, true);
RenX_LoggingPlugin::destroyPublic = this->config.get<bool>("DestroyPublic"_jrs, true); RenX_LoggingPlugin::destroyPublic = this->config.get<bool>("DestroyPublic"sv, true);
RenX_LoggingPlugin::capturePublic = this->config.get<bool>("CapturePublic"_jrs, true); RenX_LoggingPlugin::capturePublic = this->config.get<bool>("CapturePublic"sv, true);
RenX_LoggingPlugin::neutralizePublic = this->config.get<bool>("NeutralizePublic"_jrs, true); RenX_LoggingPlugin::neutralizePublic = this->config.get<bool>("NeutralizePublic"sv, true);
RenX_LoggingPlugin::characterPurchasePublic = this->config.get<bool>("CharacterPurchasePublic"_jrs, false); RenX_LoggingPlugin::characterPurchasePublic = this->config.get<bool>("CharacterPurchasePublic"sv, false);
RenX_LoggingPlugin::itemPurchasePublic = this->config.get<bool>("ItemPurchasePublic"_jrs, false); RenX_LoggingPlugin::itemPurchasePublic = this->config.get<bool>("ItemPurchasePublic"sv, false);
RenX_LoggingPlugin::weaponPurchasePublic = this->config.get<bool>("WeaponPurchasePublic"_jrs, false); RenX_LoggingPlugin::weaponPurchasePublic = this->config.get<bool>("WeaponPurchasePublic"sv, false);
RenX_LoggingPlugin::refillPurchasePublic = this->config.get<bool>("RefillPurchasePublic"_jrs, false); RenX_LoggingPlugin::refillPurchasePublic = this->config.get<bool>("RefillPurchasePublic"sv, false);
RenX_LoggingPlugin::vehiclePurchasePublic = this->config.get<bool>("VehiclePurchasePublic"_jrs, false); RenX_LoggingPlugin::vehiclePurchasePublic = this->config.get<bool>("VehiclePurchasePublic"sv, false);
RenX_LoggingPlugin::vehicleSpawnPublic = this->config.get<bool>("VehicleSpawnPublic"_jrs, true); RenX_LoggingPlugin::vehicleSpawnPublic = this->config.get<bool>("VehicleSpawnPublic"sv, true);
RenX_LoggingPlugin::spawnPublic = this->config.get<bool>("SpawnPublic"_jrs, true); RenX_LoggingPlugin::spawnPublic = this->config.get<bool>("SpawnPublic"sv, true);
RenX_LoggingPlugin::botJoinPublic = this->config.get<bool>("BotJoinPublic"_jrs, true); RenX_LoggingPlugin::botJoinPublic = this->config.get<bool>("BotJoinPublic"sv, true);
RenX_LoggingPlugin::vehicleCratePublic = this->config.get<bool>("VehicleCratePublic"_jrs, false); RenX_LoggingPlugin::vehicleCratePublic = this->config.get<bool>("VehicleCratePublic"sv, false);
RenX_LoggingPlugin::TSVehicleCratePublic = this->config.get<bool>("TSVehicleCratePublic"_jrs, RenX_LoggingPlugin::vehicleCratePublic); RenX_LoggingPlugin::TSVehicleCratePublic = this->config.get<bool>("TSVehicleCratePublic"sv, RenX_LoggingPlugin::vehicleCratePublic);
RenX_LoggingPlugin::RAVehicleCratePublic = this->config.get<bool>("RAVehicleCratePublic"_jrs, RenX_LoggingPlugin::vehicleCratePublic); RenX_LoggingPlugin::RAVehicleCratePublic = this->config.get<bool>("RAVehicleCratePublic"sv, RenX_LoggingPlugin::vehicleCratePublic);
RenX_LoggingPlugin::deathCratePublic = this->config.get<bool>("DeathCratePublic"_jrs, true); RenX_LoggingPlugin::deathCratePublic = this->config.get<bool>("DeathCratePublic"sv, true);
RenX_LoggingPlugin::moneyCratePublic = this->config.get<bool>("MoneyCratePublic"_jrs, false); RenX_LoggingPlugin::moneyCratePublic = this->config.get<bool>("MoneyCratePublic"sv, false);
RenX_LoggingPlugin::characterCratePublic = this->config.get<bool>("CharacterCratePublic"_jrs, false); RenX_LoggingPlugin::characterCratePublic = this->config.get<bool>("CharacterCratePublic"sv, false);
RenX_LoggingPlugin::spyCratePublic = this->config.get<bool>("SpyCratePublic"_jrs, false); RenX_LoggingPlugin::spyCratePublic = this->config.get<bool>("SpyCratePublic"sv, false);
RenX_LoggingPlugin::refillCratePublic = this->config.get<bool>("RefillCratePublic"_jrs, false); RenX_LoggingPlugin::refillCratePublic = this->config.get<bool>("RefillCratePublic"sv, false);
RenX_LoggingPlugin::timeBombCratePublic = this->config.get<bool>("TimeBombCratePublic"_jrs, false); RenX_LoggingPlugin::timeBombCratePublic = this->config.get<bool>("TimeBombCratePublic"sv, false);
RenX_LoggingPlugin::speedCratePublic = this->config.get<bool>("SpeedCratePublic"_jrs, false); RenX_LoggingPlugin::speedCratePublic = this->config.get<bool>("SpeedCratePublic"sv, false);
RenX_LoggingPlugin::nukeCratePublic = this->config.get<bool>("NukeCratePublic"_jrs, true); RenX_LoggingPlugin::nukeCratePublic = this->config.get<bool>("NukeCratePublic"sv, true);
RenX_LoggingPlugin::abductionCratePublic = this->config.get<bool>("AbductionCratePublic"_jrs, true); RenX_LoggingPlugin::abductionCratePublic = this->config.get<bool>("AbductionCratePublic"sv, true);
RenX_LoggingPlugin::unspecifiedCratePublic = this->config.get<bool>("UnspecifiedCratePublic"_jrs, false); RenX_LoggingPlugin::unspecifiedCratePublic = this->config.get<bool>("UnspecifiedCratePublic"sv, false);
RenX_LoggingPlugin::otherCratePublic = this->config.get<bool>("OtherCratePublic"_jrs, false); RenX_LoggingPlugin::otherCratePublic = this->config.get<bool>("OtherCratePublic"sv, false);
RenX_LoggingPlugin::stealPublic = this->config.get<bool>("StealPublic"_jrs, true); RenX_LoggingPlugin::stealPublic = this->config.get<bool>("StealPublic"sv, true);
RenX_LoggingPlugin::donatePublic = this->config.get<bool>("DonatePublic"_jrs, true); RenX_LoggingPlugin::donatePublic = this->config.get<bool>("DonatePublic"sv, true);
RenX_LoggingPlugin::gamePublic = this->config.get<bool>("GamePublic"_jrs, true); RenX_LoggingPlugin::gamePublic = this->config.get<bool>("GamePublic"sv, true);
RenX_LoggingPlugin::gameOverPublic = this->config.get<bool>("GameOverPublic"_jrs, true); RenX_LoggingPlugin::gameOverPublic = this->config.get<bool>("GameOverPublic"sv, true);
RenX_LoggingPlugin::executePublic = this->config.get<bool>("ExecutePublic"_jrs, false); RenX_LoggingPlugin::executePublic = this->config.get<bool>("ExecutePublic"sv, false);
RenX_LoggingPlugin::playerCommandPublic = this->config.get<bool>("PlayerCommandPublic"_jrs, false); RenX_LoggingPlugin::playerCommandPublic = this->config.get<bool>("PlayerCommandPublic"sv, false);
RenX_LoggingPlugin::subscribePublic = this->config.get<bool>("SubscribePublic"_jrs, false); RenX_LoggingPlugin::subscribePublic = this->config.get<bool>("SubscribePublic"sv, false);
RenX_LoggingPlugin::RCONPublic = this->config.get<bool>("RCONPublic"_jrs, false); RenX_LoggingPlugin::RCONPublic = this->config.get<bool>("RCONPublic"sv, false);
RenX_LoggingPlugin::adminLoginPublic = this->config.get<bool>("AdminLoginPublic"_jrs, true); RenX_LoggingPlugin::adminLoginPublic = this->config.get<bool>("AdminLoginPublic"sv, true);
RenX_LoggingPlugin::adminGrantPublic = this->config.get<bool>("AdminGrantPublic"_jrs, true); RenX_LoggingPlugin::adminGrantPublic = this->config.get<bool>("AdminGrantPublic"sv, true);
RenX_LoggingPlugin::adminLogoutPublic = this->config.get<bool>("AdminLogoutPublic"_jrs, true); RenX_LoggingPlugin::adminLogoutPublic = this->config.get<bool>("AdminLogoutPublic"sv, true);
RenX_LoggingPlugin::adminPublic = this->config.get<bool>("AdminPublic"_jrs, false); RenX_LoggingPlugin::adminPublic = this->config.get<bool>("AdminPublic"sv, false);
RenX_LoggingPlugin::voteCallPublic = this->config.get<bool>("VoteCallPublic"_jrs, true); RenX_LoggingPlugin::voteCallPublic = this->config.get<bool>("VoteCallPublic"sv, true);
RenX_LoggingPlugin::voteOverPublic = this->config.get<bool>("VoteOverPublic"_jrs, true); RenX_LoggingPlugin::voteOverPublic = this->config.get<bool>("VoteOverPublic"sv, true);
RenX_LoggingPlugin::voteCancelPublic = this->config.get<bool>("VoteCancelPublic"_jrs, true); RenX_LoggingPlugin::voteCancelPublic = this->config.get<bool>("VoteCancelPublic"sv, true);
RenX_LoggingPlugin::votePublic = this->config.get<bool>("VotePublic"_jrs, false); RenX_LoggingPlugin::votePublic = this->config.get<bool>("VotePublic"sv, false);
RenX_LoggingPlugin::mapChangePublic = this->config.get<bool>("MapChangePublic"_jrs, true); RenX_LoggingPlugin::mapChangePublic = this->config.get<bool>("MapChangePublic"sv, true);
RenX_LoggingPlugin::mapLoadPublic = this->config.get<bool>("MapLoadPublic"_jrs, true); RenX_LoggingPlugin::mapLoadPublic = this->config.get<bool>("MapLoadPublic"sv, true);
RenX_LoggingPlugin::mapStartPublic = this->config.get<bool>("MapStartPublic"_jrs, true); RenX_LoggingPlugin::mapStartPublic = this->config.get<bool>("MapStartPublic"sv, true);
RenX_LoggingPlugin::mapPublic = this->config.get<bool>("MapPublic"_jrs, false); RenX_LoggingPlugin::mapPublic = this->config.get<bool>("MapPublic"sv, false);
RenX_LoggingPlugin::demoRecordPublic = this->config.get<bool>("DemoRecordPublic"_jrs, true); RenX_LoggingPlugin::demoRecordPublic = this->config.get<bool>("DemoRecordPublic"sv, true);
RenX_LoggingPlugin::demoRecordStopPublic = this->config.get<bool>("DemoRecordStopPublic"_jrs, true); RenX_LoggingPlugin::demoRecordStopPublic = this->config.get<bool>("DemoRecordStopPublic"sv, true);
RenX_LoggingPlugin::demoPublic = this->config.get<bool>("DemoPublic"_jrs, false); RenX_LoggingPlugin::demoPublic = this->config.get<bool>("DemoPublic"sv, false);
RenX_LoggingPlugin::logPublic = this->config.get<bool>("LogPublic"_jrs, false); RenX_LoggingPlugin::logPublic = this->config.get<bool>("LogPublic"sv, false);
RenX_LoggingPlugin::commandPublic = this->config.get<bool>("CommandPublic"_jrs, false); RenX_LoggingPlugin::commandPublic = this->config.get<bool>("CommandPublic"sv, false);
RenX_LoggingPlugin::errorPublic = this->config.get<bool>("ErrorPublic"_jrs, false); RenX_LoggingPlugin::errorPublic = this->config.get<bool>("ErrorPublic"sv, false);
RenX_LoggingPlugin::versionPublic = this->config.get<bool>("VersionPublic"_jrs, true); RenX_LoggingPlugin::versionPublic = this->config.get<bool>("VersionPublic"sv, true);
RenX_LoggingPlugin::authorizedPublic = this->config.get<bool>("AuthorizedPublic"_jrs, true); RenX_LoggingPlugin::authorizedPublic = this->config.get<bool>("AuthorizedPublic"sv, true);
RenX_LoggingPlugin::otherPublic = this->config.get<bool>("OtherPublic"_jrs, false); RenX_LoggingPlugin::otherPublic = this->config.get<bool>("OtherPublic"sv, false);
/** Event formats */ /** Event formats */
RenX_LoggingPlugin::playerRDNSFmt = this->config.get("PlayerRDNSFormat"_jrs, RenX_LoggingPlugin::playerRDNSFmt = this->config.get("PlayerRDNSFormat"sv,
""_jrs); ""sv);
RenX_LoggingPlugin::playerIdentifyFmt = this->config.get("PlayerIdentifyFormat"_jrs, RenX_LoggingPlugin::playerIdentifyFmt = this->config.get("PlayerIdentifyFormat"sv,
string_printf(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(), string_printf(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->nameTag.data(), RenX::tags->steamTag.size(),
RenX::tags->steamTag.data(), RenX::tags->teamLongTag.size(), RenX::tags->steamTag.data(), RenX::tags->teamLongTag.size(),
@ -123,148 +123,148 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->rdnsTag.data(), RenX::tags->hwidTag.size(), RenX::tags->rdnsTag.data(), RenX::tags->hwidTag.size(),
RenX::tags->hwidTag.data())); RenX::tags->hwidTag.data()));
RenX_LoggingPlugin::joinPublicFmt = this->config.get("JoinPublicFormat"_jrs, RenX_LoggingPlugin::joinPublicFmt = this->config.get("JoinPublicFormat"sv,
string_printf(IRCCOLOR "12[Join] " IRCBOLD "%.*s" IRCBOLD " joined the game fighting for the %.*s!", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data())); RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::joinAdminFmt = this->config.get("JoinAdminFormat"_jrs, RenX_LoggingPlugin::joinAdminFmt = this->config.get("JoinAdminFormat"sv,
""_jrs); ""sv);
RenX_LoggingPlugin::joinNoSteamAdminFmt = this->config.get("JoinNoSteamAdminFormat"_jrs, RenX_LoggingPlugin::joinNoSteamAdminFmt = this->config.get("JoinNoSteamAdminFormat"sv,
""_jrs); ""sv);
RenX_LoggingPlugin::partFmt = this->config.get("PartFormat"_jrs, RenX_LoggingPlugin::partFmt = this->config.get("PartFormat"sv,
string_printf(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "12[Part] " IRCBOLD "%.*s" IRCBOLD " left the %.*s.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamLongTag.size(), RenX::tags->nameTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data())); RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::kickFmt = this->config.get("KickFormat"_jrs, RenX_LoggingPlugin::kickFmt = this->config.get("KickFormat"sv,
string_printf(IRCCOLOR "04[Kick] " IRCBOLD "%.*s" IRCCOLOR IRCBOLD " was " IRCBOLD IRCCOLOR "04kicked" IRCCOLOR IRCBOLD " (" IRCCOLOR "04%.*s" IRCCOLOR ")", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerExecuteFmt = this->config.get("PlayerExecuteFormat"_jrs, RenX_LoggingPlugin::playerExecuteFmt = this->config.get("PlayerExecuteFormat"sv,
string_printf("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerCommandSuccessFmt = this->config.get("PlayerCommandSuccessFormat"_jrs, RenX_LoggingPlugin::playerCommandSuccessFmt = this->config.get("PlayerCommandSuccessFormat"sv,
string_printf("%.*s" IRCCOLOR ": " IRCCOLOR "10%.*s", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR ": " IRCCOLOR "10%.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::playerCommandFailFmt = this->config.get("PlayerCommandFailFormat"_jrs, ""_jss); RenX_LoggingPlugin::playerCommandFailFmt = this->config.get("PlayerCommandFailFormat"sv, ""s);
RenX_LoggingPlugin::playerFmt = this->config.get("PlayerFormat"_jrs, RenX_LoggingPlugin::playerFmt = this->config.get("PlayerFormat"sv,
string_printf(IRCCOLOR "12[Player]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "12[Player]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::nameChangeFmt = this->config.get("NameChangeFormat"_jrs, RenX_LoggingPlugin::nameChangeFmt = this->config.get("NameChangeFormat"sv,
string_printf(IRCBOLD "%.*s" IRCBOLD " changed their name to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCBOLD " changed their name to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->newNameTag.size(), RenX::tags->nameTag.data(), RenX::tags->newNameTag.size(),
RenX::tags->newNameTag.data())); RenX::tags->newNameTag.data()));
RenX_LoggingPlugin::teamChangeFmt = this->config.get("TeamChangeFormat"_jrs, RenX_LoggingPlugin::teamChangeFmt = this->config.get("TeamChangeFormat"sv,
string_printf("%.*s" IRCCOLOR " switched teams!", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR " switched teams!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::speedHackFmt = this->config.get("SpeedHackFormat"_jrs, RenX_LoggingPlugin::speedHackFmt = this->config.get("SpeedHackFormat"sv,
string_printf(IRCCOLOR "04[SpeedHack] " IRCBOLD "%.*s" IRCBOLD " has thrown a Speed Hack warning!", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "04[SpeedHack] " IRCBOLD "%.*s" IRCBOLD " has thrown a Speed Hack warning!", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::chatFmt = this->config.get("ChatFormat"_jrs, RenX_LoggingPlugin::chatFmt = this->config.get("ChatFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD ": %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::teamChatFmt = this->config.get("TeamChatFormat"_jrs, RenX_LoggingPlugin::teamChatFmt = this->config.get("TeamChatFormat"sv,
string_printf(IRCBOLD "%.*s" IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), string_printf(IRCBOLD "%.*s" IRCBOLD ": %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::radioChatFmt = this->config.get("RadioChatFormat"_jrs, RenX_LoggingPlugin::radioChatFmt = this->config.get("RadioChatFormat"sv,
string_printf(IRCBOLD "%.*s" IRCBOLD ": \x1D%.*s", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCBOLD ": \x1D%.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::hostChatFmt = this->config.get("HostChatFormat"_jrs, RenX_LoggingPlugin::hostChatFmt = this->config.get("HostChatFormat"sv,
string_printf(IRCCOLOR "12Host" IRCCOLOR "0: %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "12Host" IRCCOLOR "0: %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::hostPageFmt = this->config.get("HostPageFormat"_jrs, RenX_LoggingPlugin::hostPageFmt = this->config.get("HostPageFormat"sv,
string_printf(IRCCOLOR "12(Host -> %.*s): %.*s", RenX::tags->rawNameTag.size(), string_printf(IRCCOLOR "12(Host -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::adminMsgFmt = this->config.get("AdminMsgFormat"_jrs, RenX_LoggingPlugin::adminMsgFmt = this->config.get("AdminMsgFormat"sv,
string_printf(IRCCOLOR "10%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(), string_printf(IRCCOLOR "10%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::warnMsgFmt = this->config.get("WarnMsgFormat"_jrs, RenX_LoggingPlugin::warnMsgFmt = this->config.get("WarnMsgFormat"sv,
string_printf(IRCCOLOR "07%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(), string_printf(IRCCOLOR "07%.*s: %.*s", RenX::tags->rawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::pAdminMsgFmt = this->config.get("PAdminMsgFormat"_jrs, RenX_LoggingPlugin::pAdminMsgFmt = this->config.get("PAdminMsgFormat"sv,
string_printf(IRCCOLOR "10(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(), string_printf(IRCCOLOR "10(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(),
RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(), RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::pWarnMsgFmt = this->config.get("PWarnMsgFormat"_jrs, RenX_LoggingPlugin::pWarnMsgFmt = this->config.get("PWarnMsgFormat"sv,
string_printf(IRCCOLOR "07(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(), string_printf(IRCCOLOR "07(%.*s -> %.*s): %.*s", RenX::tags->rawNameTag.size(),
RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(), RenX::tags->rawNameTag.data(), RenX::tags->victimRawNameTag.size(),
RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(), RenX::tags->victimRawNameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::otherChatFmt = this->config.get("OtherChatFormat"_jrs, RenX_LoggingPlugin::otherChatFmt = this->config.get("OtherChatFormat"sv,
string_printf(IRCCOLOR "06[Other Chat]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "06[Other Chat]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::deployFmt = this->config.get("DeployFormat"_jrs, RenX_LoggingPlugin::deployFmt = this->config.get("DeployFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " deployed a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDeployFmt = this->config.get("MineDeployFormat"_jrs, RenX_LoggingPlugin::mineDeployFmt = this->config.get("MineDeployFormat"sv,
RenX_LoggingPlugin::deployFmt); RenX_LoggingPlugin::deployFmt);
RenX_LoggingPlugin::overMineFmt = this->config.get("OverMineFormat"_jrs, RenX_LoggingPlugin::overMineFmt = this->config.get("OverMineFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " is " IRCCOLOR "04over-mining" IRCCOLOR ": " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::disarmFmt = this->config.get("DisarmFormat"_jrs, RenX_LoggingPlugin::disarmFmt = this->config.get("DisarmFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " disarmed %.*s" IRCBOLD IRCCOLOR "'s " IRCCOLOR "12%.*s" IRCBOLD, RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDisarmFmt = this->config.get("MineDisarmFormat"_jrs, RenX_LoggingPlugin::mineDisarmFmt = this->config.get("MineDisarmFormat"sv,
RenX_LoggingPlugin::disarmFmt); RenX_LoggingPlugin::disarmFmt);
RenX_LoggingPlugin::disarmNoOwnerFmt = this->config.get("DisarmNoOwnerFormat"_jrs, RenX_LoggingPlugin::disarmNoOwnerFmt = this->config.get("DisarmNoOwnerFormat"sv,
string_printf(IRCBOLD "%.*s" IRCBOLD " disarmed a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCBOLD " disarmed a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->objectTag.size(), RenX::tags->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::mineDisarmNoOwnerFmt = this->config.get("MineDisarmNoOwnerFormat"_jrs, RenX_LoggingPlugin::mineDisarmNoOwnerFmt = this->config.get("MineDisarmNoOwnerFormat"sv,
RenX_LoggingPlugin::disarmNoOwnerFmt); RenX_LoggingPlugin::disarmNoOwnerFmt);
RenX_LoggingPlugin::explodeFmt = this->config.get("ExplodeFormat"_jrs, RenX_LoggingPlugin::explodeFmt = this->config.get("ExplodeFormat"sv,
string_printf("%.*s" IRCCOLOR " detonated a " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR " detonated a " IRCCOLOR "07%.*s" IRCCOLOR ".", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(), RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::explodeNoOwnerFmt = this->config.get("ExplodeNoOwnerFormat"_jrs, RenX_LoggingPlugin::explodeNoOwnerFmt = this->config.get("ExplodeNoOwnerFormat"sv,
string_printf("A " IRCCOLOR "07%.*s" IRCCOLOR " detonated.", RenX::tags->weaponTag.size(), string_printf("A " IRCCOLOR "07%.*s" IRCCOLOR " detonated.", RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::suicideFmt = this->config.get("SuicideFormat"_jrs, RenX_LoggingPlugin::suicideFmt = this->config.get("SuicideFormat"sv,
string_printf("%.*s" IRCCOLOR " suicided (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR " suicided (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(), RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::killFmt = this->config.get("KillFormat"_jrs, RenX_LoggingPlugin::killFmt = this->config.get("KillFormat"sv,
string_printf("%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "%.*s%.*s/%.*s" IRCCOLOR " vs " IRCCOLOR "%.*s%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*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->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->teamColorTag.size(), RenX::tags->victimNameTag.data(), RenX::tags->teamColorTag.size(),
@ -274,32 +274,32 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data())); RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::killFmt2 = this->config.get("KillFormat2"_jrs, RenX_LoggingPlugin::killFmt2 = this->config.get("KillFormat2"sv,
string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " killed %.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->weaponTag.size(), RenX::tags->victimNameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::dieFmt = this->config.get("DieFormat"_jrs, RenX_LoggingPlugin::dieFmt = this->config.get("DieFormat"sv,
string_printf("%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(), RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::dieFmt2 = this->config.get("DieFormat2"_jrs, RenX_LoggingPlugin::dieFmt2 = this->config.get("DieFormat2"sv,
string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " died (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(), RenX::tags->nameTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyBuildingFmt = this->config.get("DestroyBuildingFormat"_jrs, RenX_LoggingPlugin::destroyBuildingFmt = this->config.get("DestroyBuildingFormat"sv,
string_printf("%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyBuildingFmt2 = this->config.get("DestroyBuildingFormat2"_jrs, RenX_LoggingPlugin::destroyBuildingFmt2 = this->config.get("DestroyBuildingFormat2"sv,
string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed the " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
@ -307,14 +307,14 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyDefenceFmt = this->config.get("DestroyDefenceFormat"_jrs, RenX_LoggingPlugin::destroyDefenceFmt = this->config.get("DestroyDefenceFormat"sv,
string_printf("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyDefenceFmt2 = this->config.get("DestroyDefenceFormat2"_jrs, RenX_LoggingPlugin::destroyDefenceFmt2 = this->config.get("DestroyDefenceFormat2"sv,
string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
@ -322,14 +322,14 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyVehicleFmt = this->config.get("DestroyVehicleFormat"_jrs, RenX_LoggingPlugin::destroyVehicleFmt = this->config.get("DestroyVehicleFormat"sv,
string_printf("%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->nameTag.size(), string_printf("%.*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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::destroyVehicleFmt2 = this->config.get("DestroyVehicleFormat2"_jrs, RenX_LoggingPlugin::destroyVehicleFmt2 = this->config.get("DestroyVehicleFormat2"sv,
string_printf(IRCCOLOR "%.*s%.*s" IRCCOLOR " destroyed a " IRCCOLOR "%.*s%.*s" IRCCOLOR " (" IRCCOLOR "12%.*s" IRCCOLOR ").", RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
@ -337,158 +337,158 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(), RenX::tags->objectTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::captureFmt = this->config.get("CaptureFormat"_jrs, RenX_LoggingPlugin::captureFmt = this->config.get("CaptureFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " captured the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::neutralizeFmt = this->config.get("NeutralizeFormat"_jrs, RenX_LoggingPlugin::neutralizeFmt = this->config.get("NeutralizeFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " neutralized the " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::characterPurchaseFmt = this->config.get("CharacterPurchaseFormat"_jrs, RenX_LoggingPlugin::characterPurchaseFmt = this->config.get("CharacterPurchaseFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data())); RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::itemPurchaseFmt = this->config.get("ItemPurchaseFormat"_jrs, RenX_LoggingPlugin::itemPurchaseFmt = this->config.get("ItemPurchaseFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::weaponPurchaseFmt = this->config.get("WeaponPurchaseFormat"_jrs, RenX_LoggingPlugin::weaponPurchaseFmt = this->config.get("WeaponPurchaseFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->weaponTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::refillPurchaseFmt = this->config.get("RefillPurchaseFormat"_jrs, RenX_LoggingPlugin::refillPurchaseFmt = this->config.get("RefillPurchaseFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*srefill" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data())); RenX::tags->teamColorTag.data()));
RenX_LoggingPlugin::vehiclePurchaseFmt = this->config.get("VehiclePurchaseFormat"_jrs, RenX_LoggingPlugin::vehiclePurchaseFmt = this->config.get("VehiclePurchaseFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " purchased a " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimVehicleTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->victimVehicleTag.size(),
RenX::tags->victimVehicleTag.data())); RenX::tags->victimVehicleTag.data()));
RenX_LoggingPlugin::vehicleSpawnFmt = this->config.get("VehicleSpawnFormat"_jrs, RenX_LoggingPlugin::vehicleSpawnFmt = this->config.get("VehicleSpawnFormat"sv,
string_printf("A " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD " has spawned.", RenX::tags->teamColorTag.size(), string_printf("A " IRCBOLD IRCCOLOR "%.*s%.*s" IRCCOLOR IRCBOLD " has spawned.", RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->vehicleTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->vehicleTag.size(),
RenX::tags->vehicleTag.data())); RenX::tags->vehicleTag.data()));
RenX_LoggingPlugin::spawnFmt = this->config.get("SpawnFormat"_jrs, RenX_LoggingPlugin::spawnFmt = this->config.get("SpawnFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " spawned as a " IRCCOLOR "%.*s%.*s.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " spawned as a " IRCCOLOR "%.*s%.*s.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data())); RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::botJoinFmt = this->config.get("BotJoinFormat"_jrs, RenX_LoggingPlugin::botJoinFmt = this->config.get("BotJoinFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " online.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " online.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::vehicleCrateFmt = this->config.get("VehicleCrateFormat"_jrs, RenX_LoggingPlugin::vehicleCrateFmt = this->config.get("VehicleCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12%.*s" IRCCOLOR " vehicle crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::TSVehicleCrateFmt = this->config.get("TSVehicleCrateFormat"_jrs, RenX_LoggingPlugin::TSVehicleCrateFmt = this->config.get("TSVehicleCrateFormat"sv,
RenX_LoggingPlugin::vehicleCrateFmt); RenX_LoggingPlugin::vehicleCrateFmt);
RenX_LoggingPlugin::RAVehicleCrateFmt = this->config.get("RAVehicleCrateFormat"_jrs, RenX_LoggingPlugin::RAVehicleCrateFmt = this->config.get("RAVehicleCrateFormat"sv,
RenX_LoggingPlugin::vehicleCrateFmt); RenX_LoggingPlugin::vehicleCrateFmt);
RenX_LoggingPlugin::deathCrateFmt = this->config.get("DeathCrateFormat"_jrs, RenX_LoggingPlugin::deathCrateFmt = this->config.get("DeathCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12death" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "12death" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::moneyCrateFmt = this->config.get("MoneyCrateFormat"_jrs, RenX_LoggingPlugin::moneyCrateFmt = this->config.get("MoneyCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up " IRCCOLOR "09%.*s credits" IRCCOLOR " from a " IRCCOLOR "12money" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::characterCrateFmt = this->config.get("CharacterCrateFormat"_jrs, RenX_LoggingPlugin::characterCrateFmt = this->config.get("CharacterCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12character" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data())); RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::spyCrateFmt = this->config.get("SpyCrateFormat"_jrs, RenX_LoggingPlugin::spyCrateFmt = this->config.get("SpyCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*s%.*s" IRCCOLOR " " IRCCOLOR "12spy" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->victimCharacterTag.size(),
RenX::tags->victimCharacterTag.data())); RenX::tags->victimCharacterTag.data()));
RenX_LoggingPlugin::refillCrateFmt = this->config.get("RefillCrateFormat"_jrs, RenX_LoggingPlugin::refillCrateFmt = this->config.get("RefillCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "%.*srefill" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data())); RenX::tags->teamColorTag.data()));
RenX_LoggingPlugin::timeBombCrateFmt = this->config.get("TimeBombCrateFormat"_jrs, RenX_LoggingPlugin::timeBombCrateFmt = this->config.get("TimeBombCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11time-bomb" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11time-bomb" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::speedCrateFmt = this->config.get("SpeedCrateFormat"_jrs, RenX_LoggingPlugin::speedCrateFmt = this->config.get("SpeedCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11speed" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "11speed" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::nukeCrateFmt = this->config.get("NukeCrateFormat"_jrs, RenX_LoggingPlugin::nukeCrateFmt = this->config.get("NukeCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "04nuke" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "04nuke" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::abductionCrateFmt = this->config.get("AbductionCrateFormat"_jrs, RenX_LoggingPlugin::abductionCrateFmt = this->config.get("AbductionCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " has been " IRCBOLD IRCCOLOR "06abducted" IRCCOLOR IRCBOLD " by the " IRCBOLD IRCCOLOR "06Scrin" IRCCOLOR IRCBOLD "!", RenX::tags->nameTag.size(), string_printf(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::tags->nameTag.data()));
RenX_LoggingPlugin::unspecifiedCrateFmt = this->config.get("UnspecifiedCrateFormat"_jrs, RenX_LoggingPlugin::unspecifiedCrateFmt = this->config.get("UnspecifiedCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up an " IRCCOLOR "13unspecified" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up an " IRCCOLOR "13unspecified" IRCCOLOR " crate.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::otherCrateFmt = this->config.get("OtherCrateFormat"_jrs, RenX_LoggingPlugin::otherCrateFmt = this->config.get("OtherCrateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " picked up a " IRCCOLOR "13%.*s" IRCCOLOR " crate.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::stealFmt = this->config.get("StealFormat"_jrs, RenX_LoggingPlugin::stealFmt = this->config.get("StealFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole " IRCBOLD "%.*s" IRCBOLD "'s " IRCBOLD "%.*s" IRCBOLD "!", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimNameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::stealNoOwnerFmt = this->config.get("StealNoOwnerFormat"_jrs, RenX_LoggingPlugin::stealNoOwnerFmt = this->config.get("StealNoOwnerFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " stole a " IRCBOLD IRCCOLOR "12%.*s" IRCBOLD "!", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::donateFmt = this->config.get("DonateFormat"_jrs, RenX_LoggingPlugin::donateFmt = this->config.get("DonateFormat"sv,
string_printf(IRCBOLD "%.*s" IRCCOLOR IRCBOLD " donated " IRCCOLOR "09%.*s credits" IRCCOLOR " to " IRCBOLD "%.*s" IRCBOLD ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimNameTag.size(), RenX::tags->objectTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data())); RenX::tags->victimNameTag.data()));
RenX_LoggingPlugin::gameOverFmt = this->config.get("GameOverFormat"_jrs, RenX_LoggingPlugin::gameOverFmt = this->config.get("GameOverFormat"sv,
string_printf(IRCCOLOR "03[Game]" IRCCOLOR "%.*s The " IRCBOLD "%.*s" IRCBOLD " won by " IRCBOLD "%.*s" IRCBOLD, RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data(), RenX::tags->messageTag.size(), RenX::tags->teamLongTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::gameOverTieFmt = this->config.get("GameOverTieNoWinFormat"_jrs, RenX_LoggingPlugin::gameOverTieFmt = this->config.get("GameOverTieNoWinFormat"sv,
string_printf(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(), string_printf(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->messageTag.data(), RenX::tags->teamColorTag.size(),
RenX::tags->teamColorTag.data(), RenX::tags->teamLongTag.size(), RenX::tags->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data())); RenX::tags->teamLongTag.data()));
RenX_LoggingPlugin::gameOverTieNoWinFmt = this->config.get("GameOverTieFormat"_jrs, RenX_LoggingPlugin::gameOverTieNoWinFmt = this->config.get("GameOverTieFormat"sv,
string_printf(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->messageTag.size(), string_printf(IRCCOLOR "03[Game]" IRCCOLOR "10 The battle ended in a " IRCBOLD "%.*s" IRCBOLD, RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::gameOverScoreFmt = this->config.get("GameOverScoreFormat"_jrs, RenX_LoggingPlugin::gameOverScoreFmt = this->config.get("GameOverScoreFormat"sv,
string_printf(IRCCOLOR "03[Game]" IRCCOLOR "%.*s %.*s" IRCCOLOR ": %.*s | " IRCCOLOR "%.*s%.*s" IRCCOLOR ": %.*s", RenX::tags->teamColorTag.size(), string_printf(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->teamColorTag.data(), RenX::tags->teamLongTag.size(),
RenX::tags->teamLongTag.data(), RenX::tags->winScoreTag.size(), RenX::tags->teamLongTag.data(), RenX::tags->winScoreTag.size(),
@ -497,97 +497,97 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->victimTeamLongTag.data(), RenX::tags->loseScoreTag.size(), RenX::tags->victimTeamLongTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data())); RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::gameFmt = this->config.get("GameFormat"_jrs, RenX_LoggingPlugin::gameFmt = this->config.get("GameFormat"sv,
string_printf(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "03[Game]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::executeFmt = this->config.get("ExecuteFormat"_jrs, RenX_LoggingPlugin::executeFmt = this->config.get("ExecuteFormat"sv,
string_printf(IRCCOLOR "07%.*s executed: %.*s", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "07%.*s executed: %.*s", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->messageTag.size(), RenX::tags->nameTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::devBotExecuteFmt = this->config.get("DevBotExecuteFormat"_jrs, ""_jss); RenX_LoggingPlugin::devBotExecuteFmt = this->config.get("DevBotExecuteFormat"sv, ""s);
RenX_LoggingPlugin::subscribeFmt = this->config.get("SubscribeFormat"_jrs, RenX_LoggingPlugin::subscribeFmt = this->config.get("SubscribeFormat"sv,
string_printf(IRCCOLOR "03%.*s subscribed to the RCON data stream.", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "03%.*s subscribed to the RCON data stream.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::rconFmt = this->config.get("RCONFormat"_jrs, RenX_LoggingPlugin::rconFmt = this->config.get("RCONFormat"sv,
string_printf(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "05[RCON]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::adminLoginFmt = this->config.get("AdminLoginFormat"_jrs, RenX_LoggingPlugin::adminLoginFmt = this->config.get("AdminLoginFormat"sv,
string_printf(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " logged in with " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data())); RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminGrantFmt = this->config.get("AdminGrantFormat"_jrs, RenX_LoggingPlugin::adminGrantFmt = this->config.get("AdminGrantFormat"sv,
string_printf(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " was granted " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data())); RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminLogoutFmt = this->config.get("AdminLogoutFormat"_jrs, RenX_LoggingPlugin::adminLogoutFmt = this->config.get("AdminLogoutFormat"sv,
string_printf(IRCCOLOR "07[Admin] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR " logged out of their " IRCCOLOR "07" IRCBOLD "%.*s" IRCBOLD IRCNORMAL " privledges.", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->adminTag.size(),
RenX::tags->adminTag.data())); RenX::tags->adminTag.data()));
RenX_LoggingPlugin::adminFmt = this->config.get("AdminFormat"_jrs, RenX_LoggingPlugin::adminFmt = this->config.get("AdminFormat"sv,
string_printf(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "07[Admin]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::voteAddBotsFmt = this->config.get("VoteAddBotsFormat"_jrs, RenX_LoggingPlugin::voteAddBotsFmt = this->config.get("VoteAddBotsFormat"sv,
string_printf(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(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamShortTag.size(), RenX::tags->objectTag.data(), RenX::tags->victimTeamShortTag.size(),
RenX::tags->victimTeamShortTag.data(), RenX::tags->weaponTag.size(), RenX::tags->victimTeamShortTag.data(), RenX::tags->weaponTag.size(),
RenX::tags->weaponTag.data())); RenX::tags->weaponTag.data()));
RenX_LoggingPlugin::voteChangeMapFmt = this->config.get("VoteChangeMapFormat"_jrs, RenX_LoggingPlugin::voteChangeMapFmt = this->config.get("VoteChangeMapFormat"sv,
string_printf(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Change.", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Change.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteKickFmt = this->config.get("VoteKickFormat"_jrs, RenX_LoggingPlugin::voteKickFmt = this->config.get("VoteKickFormat"sv,
string_printf(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a kick against %.*s" IRCNORMAL ".", RenX::tags->nameTag.size(), string_printf(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->nameTag.data(), RenX::tags->victimNameTag.size(),
RenX::tags->victimNameTag.data())); RenX::tags->victimNameTag.data()));
RenX_LoggingPlugin::voteMineBanFmt = this->config.get("VoteMineBanFormat"_jrs, RenX_LoggingPlugin::voteMineBanFmt = this->config.get("VoteMineBanFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Mine Ban against %.*s" IRCNORMAL ".", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->nameTag.size(), RenX::tags->nameTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteRemoveBotsFmt = this->config.get("VoteRemoveBotsFormat"_jrs, RenX_LoggingPlugin::voteRemoveBotsFmt = this->config.get("VoteRemoveBotsFormat"sv,
string_printf(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(), string_printf(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->nameTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->victimTeamShortTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->victimTeamShortTag.size(),
RenX::tags->victimTeamShortTag.data())); RenX::tags->victimTeamShortTag.data()));
RenX_LoggingPlugin::voteRestartMapFmt = this->config.get("VoteRestartMapFormat"_jrs, RenX_LoggingPlugin::voteRestartMapFmt = this->config.get("VoteRestartMapFormat"sv,
string_printf(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Restart.", RenX::tags->nameTag.size(), string_printf(IRCCOLOR "[Vote] " IRCBOLD "%.*s" IRCNORMAL " has called for a Map Restart.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteSurrenderFmt = this->config.get("VoteSurrenderFormat"_jrs, RenX_LoggingPlugin::voteSurrenderFmt = this->config.get("VoteSurrenderFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD " has called for a Surrender.", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::voteSurveyFmt = this->config.get("VoteSurveyFormat"_jrs, RenX_LoggingPlugin::voteSurveyFmt = this->config.get("VoteSurveyFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has started a Survey: " IRCCOLOR "12%.*s", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->messageTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::voteOtherFmt = this->config.get("VoteOtherFormat"_jrs, RenX_LoggingPlugin::voteOtherFmt = this->config.get("VoteOtherFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] " IRCBOLD "%.*s" IRCBOLD IRCCOLOR "%.*s has called a \"%.*s\" vote.", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->nameTag.size(),
RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->nameTag.data(), RenX::tags->victimTeamColorTag.size(),
RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(), RenX::tags->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::voteOverSuccessFmt = this->config.get("VoteOverSuccessFormat"_jrs, RenX_LoggingPlugin::voteOverSuccessFmt = this->config.get("VoteOverSuccessFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "09passed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
@ -595,7 +595,7 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(), RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data())); RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::voteOverFailFmt = this->config.get("VoteOverFailFormat"_jrs, RenX_LoggingPlugin::voteOverFailFmt = this->config.get("VoteOverFailFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" " IRCBOLD IRCCOLOR "04failed" IRCBOLD IRCCOLOR "%.*s (Votes Yes: %.*s | Votes No: %.*s).", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(), RenX::tags->objectTag.data(), RenX::tags->victimTeamColorTag.size(),
@ -603,64 +603,64 @@ bool RenX_LoggingPlugin::initialize()
RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(), RenX::tags->winScoreTag.data(), RenX::tags->loseScoreTag.size(),
RenX::tags->loseScoreTag.data())); RenX::tags->loseScoreTag.data()));
RenX_LoggingPlugin::voteCancelFmt = this->config.get("VoteCancelFormat"_jrs, RenX_LoggingPlugin::voteCancelFmt = this->config.get("VoteCancelFormat"sv,
string_printf(IRCCOLOR "%.*s[Vote] A vote for \"%.*s\" was " IRCBOLD IRCCOLOR "07cancelled" IRCCOLOR IRCBOLD ".", RenX::tags->victimTeamColorTag.size(), string_printf(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->victimTeamColorTag.data(), RenX::tags->objectTag.size(),
RenX::tags->objectTag.data())); RenX::tags->objectTag.data()));
RenX_LoggingPlugin::voteFmt = this->config.get("VoteFormat"_jrs, RenX_LoggingPlugin::voteFmt = this->config.get("VoteFormat"sv,
string_printf(IRCCOLOR "06[Vote]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "06[Vote]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapChangeFmt = this->config.get("MapChangeFormat"_jrs, RenX_LoggingPlugin::mapChangeFmt = this->config.get("MapChangeFormat"sv,
string_printf(IRCCOLOR "03Loading %.*s...", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "03Loading %.*s...", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapLoadFmt = this->config.get("MapLoadFormat"_jrs, RenX_LoggingPlugin::mapLoadFmt = this->config.get("MapLoadFormat"sv,
string_printf(IRCCOLOR "03%.*s loaded.", RenX::tags->messageTag.size(), RenX::tags->messageTag.data())); string_printf(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"sv,
string_printf(IRCCOLOR "03%.*s started.", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "03%.*s started.", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::mapFmt = this->config.get("MapFormat"_jrs, RenX_LoggingPlugin::mapFmt = this->config.get("MapFormat"sv,
string_printf(IRCCOLOR "06[Map]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "06[Map]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::demoRecordFmt = this->config.get("DemoRecordFormat"_jrs, RenX_LoggingPlugin::demoRecordFmt = this->config.get("DemoRecordFormat"sv,
string_printf("%.*s has started a demo recording.", RenX::tags->nameTag.size(), string_printf("%.*s has started a demo recording.", RenX::tags->nameTag.size(),
RenX::tags->nameTag.data())); RenX::tags->nameTag.data()));
RenX_LoggingPlugin::rconDemoRecordFmt = this->config.get("RCONDemoRecordFormat"_jrs, RenX_LoggingPlugin::rconDemoRecordFmt = this->config.get("RCONDemoRecordFormat"sv,
IRCCOLOR "07A demo recording has started."_jrs); IRCCOLOR "07A demo recording has started."sv);
RenX_LoggingPlugin::demoRecordStopFmt = this->config.get("DemoRecordStopFormat"_jrs, RenX_LoggingPlugin::demoRecordStopFmt = this->config.get("DemoRecordStopFormat"sv,
IRCCOLOR "07The demo recording has stopped."_jrs); IRCCOLOR "07The demo recording has stopped."sv);
RenX_LoggingPlugin::demoFmt = this->config.get("DemoFormat"_jrs, RenX_LoggingPlugin::demoFmt = this->config.get("DemoFormat"sv,
string_printf(IRCCOLOR "06[Demo]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "06[Demo]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::logFmt = this->config.get("LogFormat"_jrs, RenX_LoggingPlugin::logFmt = this->config.get("LogFormat"sv,
string_printf(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "07[Log]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::commandFmt = this->config.get("CommandFormat"_jrs, RenX_LoggingPlugin::commandFmt = this->config.get("CommandFormat"sv,
string_printf("")); // Disabled by default. string_printf("")); // Disabled by default.
RenX_LoggingPlugin::errorFmt = this->config.get("ErrorFormat"_jrs, RenX_LoggingPlugin::errorFmt = this->config.get("ErrorFormat"sv,
string_printf(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "04[Error]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
RenX_LoggingPlugin::versionFmt = this->config.get("VersionFormat"_jrs, RenX_LoggingPlugin::versionFmt = this->config.get("VersionFormat"sv,
string_printf(IRCCOLOR "03Renegade X RCON connection established; using RCON verison " IRCBOLD "%.*s" IRCBOLD " for game version " IRCBOLD "%.*s" IRCBOLD, RenX::tags->rconVersionTag.size(), string_printf(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->rconVersionTag.data(), RenX::tags->gameVersionTag.size(),
RenX::tags->gameVersionTag.data())); RenX::tags->gameVersionTag.data()));
RenX_LoggingPlugin::authorizedFmt = this->config.get("AuthorizedFormat"_jrs, RenX_LoggingPlugin::authorizedFmt = this->config.get("AuthorizedFormat"sv,
string_printf(IRCCOLOR "03RCON authorization completed.")); string_printf(IRCCOLOR "03RCON authorization completed."));
RenX_LoggingPlugin::otherFmt = this->config.get("OtherFormat"_jrs, RenX_LoggingPlugin::otherFmt = this->config.get("OtherFormat"sv,
string_printf(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), string_printf(IRCCOLOR "06[Other]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(),
RenX::tags->messageTag.data())); RenX::tags->messageTag.data()));
@ -1139,8 +1139,8 @@ void RenX_LoggingPlugin::RenX_OnHostAdminMessage(RenX::Server &server, std::stri
if (!msg.empty()) if (!msg.empty())
{ {
RenX::processTags(msg, &server); RenX::processTags(msg, &server);
RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message); RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message);
(server.*func)(msg); (server.*func)(msg);
} }
@ -1158,8 +1158,8 @@ void RenX_LoggingPlugin::RenX_OnHostAdminPMessage(RenX::Server &server, const Re
if (!msg.empty()) if (!msg.empty())
{ {
RenX::processTags(msg, &server, nullptr, &player); RenX::processTags(msg, &server, nullptr, &player);
RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message); RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message);
(server.*func)(msg); (server.*func)(msg);
} }
@ -1177,8 +1177,8 @@ void RenX_LoggingPlugin::RenX_OnHostWarnMessage(RenX::Server &server, std::strin
if (!msg.empty()) if (!msg.empty())
{ {
RenX::processTags(msg, &server); RenX::processTags(msg, &server);
RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message); RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message);
(server.*func)(msg); (server.*func)(msg);
} }
@ -1196,8 +1196,8 @@ void RenX_LoggingPlugin::RenX_OnHostWarnPMessage(RenX::Server &server, const Ren
if (!msg.empty()) if (!msg.empty())
{ {
RenX::processTags(msg, &server, nullptr, &player); RenX::processTags(msg, &server, nullptr, &player);
RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"_jrs); RenX::replace_tag(msg, RenX::tags->INTERNAL_RAW_NAME_TAG, "Host"sv);
RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message); RenX::replace_tag(msg, RenX::tags->INTERNAL_MESSAGE_TAG, message);
(server.*func)(msg); (server.*func)(msg);
} }

117
src/Plugins/RenX/RenX.Medals/RenX_Medals.cpp

@ -28,7 +28,6 @@
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Tags.h" #include "RenX_Tags.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
bool RenX_MedalsPlugin::initialize() bool RenX_MedalsPlugin::initialize()
@ -52,8 +51,8 @@ RenX_MedalsPlugin::~RenX_MedalsPlugin()
if (server->players.size() != 0) { if (server->players.size() != 0) {
for (auto node = server->players.begin(); node != server->players.end(); ++node) { for (auto node = server->players.begin(); node != server->players.end(); ++node) {
if (!node->uuid.empty() && !node->isBot) { if (!node->uuid.empty() && !node->isBot) {
RenX_MedalsPlugin::medalsFile[node->uuid].set("Recs"_jrs, node->varData[this->getName()].get("Recs"sv, ""s)); RenX_MedalsPlugin::medalsFile[node->uuid].set("Recs"sv, node->varData[this->getName()].get("Recs"sv, ""s));
RenX_MedalsPlugin::medalsFile[node->uuid].set("Noobs"_jrs, node->varData[this->getName()].get("Noobs"sv, ""s)); RenX_MedalsPlugin::medalsFile[node->uuid].set("Noobs"sv, node->varData[this->getName()].get("Noobs"sv, ""s));
} }
} }
} }
@ -65,7 +64,7 @@ RenX_MedalsPlugin::~RenX_MedalsPlugin()
struct CongratPlayerData struct CongratPlayerData
{ {
RenX::Server *server; RenX::Server *server;
Jupiter::StringS playerName; std::string playerName;
unsigned int type; unsigned int type;
}; };
@ -78,16 +77,16 @@ void congratPlayer(unsigned int, void *params)
switch (congratPlayerData->type) switch (congratPlayerData->type)
{ {
case 0: case 0:
congratPlayerData->server->sendMessage(congratPlayerData->playerName + " has been recommended for having the highest score last game!"_jrs); congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName, " has been recommended for having the highest score last game!"sv));
break; break;
case 1: case 1:
congratPlayerData->server->sendMessage(congratPlayerData->playerName + " has been recommended for having the most kills last game!"_jrs); congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName, " has been recommended for having the most kills last game!"sv));
break; break;
case 2: case 2:
congratPlayerData->server->sendMessage(congratPlayerData->playerName + " has been recommended for having the most vehicle kills last game!"_jrs); congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName, " has been recommended for having the most vehicle kills last game!"sv));
break; break;
case 3: case 3:
congratPlayerData->server->sendMessage(congratPlayerData->playerName + " has been recommended for having the highest Kill-Death ratio last game!"_jrs); congratPlayerData->server->sendMessage(jessilib::join<std::string>(congratPlayerData->playerName, " has been recommended for having the highest Kill-Death ratio last game!"sv));
break; break;
default: default:
break; break;
@ -104,8 +103,8 @@ void RenX_MedalsPlugin::RenX_SanitizeTags(std::string& fmt) {
void RenX_MedalsPlugin::RenX_ProcessTags(std::string& msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *, const RenX::BuildingInfo *) { void RenX_MedalsPlugin::RenX_ProcessTags(std::string& msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *, const RenX::BuildingInfo *) {
if (player != nullptr) { if (player != nullptr) {
std::string_view recs = RenX_MedalsPlugin::medalsFile.get(player->uuid, "Recs"_jrs); std::string_view recs = RenX_MedalsPlugin::medalsFile.get(player->uuid, "Recs"sv);
std::string_view noobs = RenX_MedalsPlugin::medalsFile.get(player->uuid, "Noobs"_jrs); std::string_view noobs = RenX_MedalsPlugin::medalsFile.get(player->uuid, "Noobs"sv);
RenX::replace_tag(msg, this->INTERNAL_RECS_TAG, recs); RenX::replace_tag(msg, this->INTERNAL_RECS_TAG, recs);
RenX::replace_tag(msg, this->INTERNAL_NOOB_TAG, noobs); RenX::replace_tag(msg, this->INTERNAL_NOOB_TAG, noobs);
@ -122,8 +121,8 @@ void RenX_MedalsPlugin::RenX_OnPlayerCreate(RenX::Server &, const RenX::PlayerIn
void RenX_MedalsPlugin::RenX_OnPlayerDelete(RenX::Server &, const RenX::PlayerInfo &player) { void RenX_MedalsPlugin::RenX_OnPlayerDelete(RenX::Server &, const RenX::PlayerInfo &player) {
if (!player.uuid.empty() && player.isBot == false) { if (!player.uuid.empty() && player.isBot == false) {
RenX_MedalsPlugin::medalsFile[player.uuid].set("Recs"_jrs, player.varData[this->getName()].get("Recs"sv, ""s)); RenX_MedalsPlugin::medalsFile[player.uuid].set("Recs"sv, player.varData[this->getName()].get("Recs"sv, ""s));
RenX_MedalsPlugin::medalsFile[player.uuid].set("Noobs"_jrs, player.varData[this->getName()].get("Noobs"sv, ""s)); RenX_MedalsPlugin::medalsFile[player.uuid].set("Noobs"sv, player.varData[this->getName()].get("Noobs"sv, ""s));
} }
} }
@ -132,9 +131,11 @@ void RenX_MedalsPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo
int worth = getWorth(player); int worth = getWorth(player);
Jupiter::Config *section = RenX_MedalsPlugin::config.getSection(RenX_MedalsPlugin::firstSection); Jupiter::Config *section = RenX_MedalsPlugin::config.getSection(RenX_MedalsPlugin::firstSection);
if (section != nullptr) { if (section != nullptr) {
while (section->get<int>("MaxRecs"_jrs, INT_MAX) < worth) while (section->get<int>("MaxRecs"sv, std::numeric_limits<int>::max()) < worth) {
if ((section = RenX_MedalsPlugin::config.getSection(section->get("NextSection"_jrs))) == nullptr) if ((section = RenX_MedalsPlugin::config.getSection(section->get("NextSection"sv))) == nullptr) {
return; // No matching section found. return; // No matching section found.
}
}
size_t table_size = section->getTable().size(); size_t table_size = section->getTable().size();
@ -253,15 +254,15 @@ int RenX_MedalsPlugin::OnRehash()
void RenX_MedalsPlugin::init() void RenX_MedalsPlugin::init()
{ {
RenX_MedalsPlugin::killCongratDelay = std::chrono::seconds(this->config.get<long long>("KillCongratDelay"_jrs, 60)); RenX_MedalsPlugin::killCongratDelay = std::chrono::seconds(this->config.get<long long>("KillCongratDelay"sv, 60));
RenX_MedalsPlugin::vehicleKillCongratDelay = std::chrono::seconds(this->config.get<long long>("VehicleKillCongratDelay"_jrs, 60)); RenX_MedalsPlugin::vehicleKillCongratDelay = std::chrono::seconds(this->config.get<long long>("VehicleKillCongratDelay"sv, 60));
RenX_MedalsPlugin::kdrCongratDelay = std::chrono::seconds(this->config.get<long long>("KDRCongratDelay"_jrs, 60)); RenX_MedalsPlugin::kdrCongratDelay = std::chrono::seconds(this->config.get<long long>("KDRCongratDelay"sv, 60));
RenX_MedalsPlugin::medalsFileName = this->config.get("MedalsFile"_jrs, "Medals.ini"_jrs); RenX_MedalsPlugin::medalsFileName = this->config.get("MedalsFile"sv, "Medals.ini"sv);
RenX_MedalsPlugin::medalsFile.read(RenX_MedalsPlugin::medalsFileName); RenX_MedalsPlugin::medalsFile.read(RenX_MedalsPlugin::medalsFileName);
RenX_MedalsPlugin::firstSection = RenX_MedalsPlugin::config.get("FirstSection"_jrs); RenX_MedalsPlugin::firstSection = RenX_MedalsPlugin::config.get("FirstSection"sv);
RenX_MedalsPlugin::recsTag = RenX_MedalsPlugin::config.get("RecsTag"_jrs, "{RECS}"_jrs); RenX_MedalsPlugin::recsTag = RenX_MedalsPlugin::config.get("RecsTag"sv, "{RECS}"sv);
RenX_MedalsPlugin::noobTag = RenX_MedalsPlugin::config.get("NoobsTag"_jrs, "{NOOBS}"_jrs); RenX_MedalsPlugin::noobTag = RenX_MedalsPlugin::config.get("NoobsTag"sv, "{NOOBS}"sv);
RenX_MedalsPlugin::worthTag = RenX_MedalsPlugin::config.get("WorthTag"_jrs, "{WORTH}"_jrs); RenX_MedalsPlugin::worthTag = RenX_MedalsPlugin::config.get("WorthTag"sv, "{WORTH}"sv);
RenX::Core *core = RenX::getCore(); RenX::Core *core = RenX::getCore();
size_t server_count = core->getServerCount(); size_t server_count = core->getServerCount();
@ -286,11 +287,11 @@ RenX_MedalsPlugin pluginInstance;
void RecsGameCommand::create() void RecsGameCommand::create()
{ {
this->addTrigger("recs"_jrs); this->addTrigger("recs"sv);
this->addTrigger("recommends"_jrs); this->addTrigger("recommends"sv);
this->addTrigger("recommendations"_jrs); this->addTrigger("recommendations"sv);
this->addTrigger("noobs"_jrs); this->addTrigger("noobs"sv);
this->addTrigger("n00bs"_jrs); this->addTrigger("n00bs"sv);
} }
void RecsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) void RecsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters)
@ -302,32 +303,32 @@ void RecsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
{ {
Jupiter::Config *section = pluginInstance.medalsFile.getSection(parameters); Jupiter::Config *section = pluginInstance.medalsFile.getSection(parameters);
if (section == nullptr) if (section == nullptr)
source->sendMessage(*player, "Error: Player not found! Syntax: recs [player]"_jrs); source->sendMessage(*player, "Error: Player not found! Syntax: recs [player]"sv);
else else
{ {
unsigned int recs = section->get<unsigned int>("Recs"_jrs); unsigned int recs = section->get<unsigned int>("Recs"sv);
unsigned int noobs = section->get<unsigned int>("Noobs"_jrs); unsigned int noobs = section->get<unsigned int>("Noobs"sv);
source->sendMessage(*player, string_printf("[Archive] %.*s has %u and %u n00bs. Their worth: %d", section->getName().size(), section->getName().c_str(), recs, noobs, recs - noobs)); source->sendMessage(*player, string_printf("[Archive] %.*s has %u and %u n00bs. Their worth: %d", section->getName().size(), section->getName().c_str(), recs, noobs, recs - noobs));
} }
} }
else if (target->uuid.empty()) else if (target->uuid.empty())
source->sendMessage(*player, "Error: Player is not using steam."_jrs); source->sendMessage(*player, "Error: Player is not using steam."sv);
else if (target->isBot) else if (target->isBot)
source->sendMessage(*player, "Error: Bots do not have any recommendations."_jrs); source->sendMessage(*player, "Error: Bots do not have any recommendations."sv);
else if (target == player) else if (target == player)
RecsGameCommand::trigger(source, player, ""_jrs); RecsGameCommand::trigger(source, player, ""sv);
else else
source->sendMessage(*player, string_printf("%.*s has %lu and %lu n00bs. Their worth: %d", target->name.size(), target->name.data(), getRecs(*target), getNoobs(*target), getWorth(*target))); source->sendMessage(*player, string_printf("%.*s has %lu and %lu n00bs. Their worth: %d", target->name.size(), target->name.data(), getRecs(*target), getNoobs(*target), getWorth(*target)));
} }
else if (player->uuid.empty()) else if (player->uuid.empty())
source->sendMessage(*player, "Error: You are not using steam."_jrs); source->sendMessage(*player, "Error: You are not using steam."sv);
else else
source->sendMessage(*player, string_printf("%.*s, you have %lu recs and %lu n00bs. Your worth: %d", player->name.size(), player->name.data(), getRecs(*player), getNoobs(*player), getWorth(*player))); source->sendMessage(*player, string_printf("%.*s, you have %lu recs and %lu n00bs. Your worth: %d", player->name.size(), player->name.data(), getRecs(*player), getNoobs(*player), getWorth(*player)));
} }
std::string_view RecsGameCommand::getHelp(std::string_view ) std::string_view RecsGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Gets a count of a player's recommendations and noobs. Syntax: recs [player]"); static constexpr std::string_view defaultHelp = "Gets a count of a player's recommendations and noobs. Syntax: recs [player]"sv;
return defaultHelp; return defaultHelp;
} }
@ -337,8 +338,8 @@ GAME_COMMAND_INIT(RecsGameCommand)
void RecGameCommand::create() void RecGameCommand::create()
{ {
this->addTrigger("rec"_jrs); this->addTrigger("rec"sv);
this->addTrigger("recommend"_jrs); this->addTrigger("recommend"sv);
} }
void RecGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void RecGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -349,25 +350,25 @@ void RecGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std
target = source->getPlayerByPartName(parameters_split.first); target = source->getPlayerByPartName(parameters_split.first);
} }
if (target == nullptr) { if (target == nullptr) {
source->sendMessage(*player, "Error: Player not found! Syntax: rec <player>"_jrs); source->sendMessage(*player, "Error: Player not found! Syntax: rec <player>"sv);
} }
else if (target->uuid.empty()) { else if (target->uuid.empty()) {
source->sendMessage(*player, "Error: Player is not using steam."_jrs); source->sendMessage(*player, "Error: Player is not using steam."sv);
} }
else if (target->isBot) { else if (target->isBot) {
source->sendMessage(*player, "Error: Bots can not receive recommendations."_jrs); source->sendMessage(*player, "Error: Bots can not receive recommendations."sv);
} }
else if (target == player) { else if (target == player) {
addNoob(*player); addNoob(*player);
source->sendMessage(*player, "You can't recommend yourself, you noob! (+1 noob)"_jrs); source->sendMessage(*player, "You can't recommend yourself, you noob! (+1 noob)"sv);
} }
else if (!player->varData["RenX.Medals"_jrs].get("gr"_jrs).empty() && player->adminType.empty()) { else if (!player->varData["RenX.Medals"sv].get("gr"sv).empty() && player->adminType.empty()) {
source->sendMessage(*player, "You can only give one recommendation per game."_jrs); source->sendMessage(*player, "You can only give one recommendation per game."sv);
} }
else { else {
addRec(*target); addRec(*target);
source->sendMessage(string_printf("%.*s has recommended %.*s!", player->name.size(), player->name.data(), target->name.size(), target->name.data())); source->sendMessage(string_printf("%.*s has recommended %.*s!", player->name.size(), player->name.data(), target->name.size(), target->name.data()));
player->varData["RenX.Medals"_jrs].set("gr"_jrs, "1"s); player->varData["RenX.Medals"sv].set("gr"sv, "1"s);
} }
} }
else RecsGameCommand_instance.trigger(source, player, parameters); else RecsGameCommand_instance.trigger(source, player, parameters);
@ -375,7 +376,7 @@ void RecGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std
std::string_view RecGameCommand::getHelp(std::string_view ) std::string_view RecGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Recommends a player for their gameplay. Syntax: rec <player> [reason]"); static constexpr std::string_view defaultHelp = "Recommends a player for their gameplay. Syntax: rec <player> [reason]"sv;
return defaultHelp; return defaultHelp;
} }
@ -385,8 +386,8 @@ GAME_COMMAND_INIT(RecGameCommand)
void NoobGameCommand::create() void NoobGameCommand::create()
{ {
this->addTrigger("noob"_jrs); this->addTrigger("noob"sv);
this->addTrigger("n00b"_jrs); this->addTrigger("n00b"sv);
} }
void NoobGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void NoobGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -397,21 +398,21 @@ void NoobGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
target = source->getPlayerByPartName(parameters_split.first); target = source->getPlayerByPartName(parameters_split.first);
} }
if (target == nullptr) { if (target == nullptr) {
source->sendMessage(*player, "Error: Player not found! Syntax: noob [player]"_jrs); source->sendMessage(*player, "Error: Player not found! Syntax: noob [player]"sv);
} }
else if (target->uuid.empty()) { else if (target->uuid.empty()) {
source->sendMessage(*player, "Error: Player is not using steam."_jrs); source->sendMessage(*player, "Error: Player is not using steam."sv);
} }
else if (target->isBot) { else if (target->isBot) {
source->sendMessage(*player, "Error: Bots can not receive n00bs."_jrs); source->sendMessage(*player, "Error: Bots can not receive n00bs."sv);
} }
else if (!player->varData["RenX.Medals"_jrs].get("gn"_jrs).empty() && player->adminType.empty()) { else if (!player->varData["RenX.Medals"sv].get("gn"sv).empty() && player->adminType.empty()) {
source->sendMessage(*player, "You can only give one noob per game."_jrs); source->sendMessage(*player, "You can only give one noob per game."sv);
} }
else { else {
addNoob(*target); addNoob(*target);
source->sendMessage(string_printf("%.*s has noob'd %.*s!", player->name.size(), player->name.data(), target->name.size(), target->name.data())); source->sendMessage(string_printf("%.*s has noob'd %.*s!", player->name.size(), player->name.data(), target->name.size(), target->name.data()));
player->varData["RenX.Medals"_jrs].set("gn"_jrs, "1"s); player->varData["RenX.Medals"sv].set("gn"sv, "1"s);
} }
} }
else RecsGameCommand_instance.trigger(source, player, parameters); else RecsGameCommand_instance.trigger(source, player, parameters);
@ -419,7 +420,7 @@ void NoobGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
std::string_view NoobGameCommand::getHelp(std::string_view ) std::string_view NoobGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Tells people that a player is bad. Syntax: noob [player]"); static constexpr std::string_view defaultHelp = "Tells people that a player is bad. Syntax: noob [player]"sv;
return defaultHelp; return defaultHelp;
} }
@ -427,24 +428,24 @@ GAME_COMMAND_INIT(NoobGameCommand)
void addRec(const RenX::PlayerInfo &player, int amount) { void addRec(const RenX::PlayerInfo &player, int amount) {
if (!jessilib::starts_withi(player.uuid, "Player"sv) && !player.isBot) { if (!jessilib::starts_withi(player.uuid, "Player"sv) && !player.isBot) {
player.varData[pluginInstance.getName()].set("Recs"_jrs, static_cast<std::string>(string_printf("%u", getRecs(player) + amount))); player.varData[pluginInstance.getName()].set("Recs"sv, static_cast<std::string>(string_printf("%u", getRecs(player) + amount)));
} }
} }
void addNoob(const RenX::PlayerInfo &player, int amount) { void addNoob(const RenX::PlayerInfo &player, int amount) {
if (!jessilib::starts_withi(player.uuid, "Player"sv) && !player.isBot) { if (!jessilib::starts_withi(player.uuid, "Player"sv) && !player.isBot) {
player.varData[pluginInstance.getName()].set("Noobs"_jrs,static_cast<std::string>(string_printf("%u", getNoobs(player) + amount))); player.varData[pluginInstance.getName()].set("Noobs"sv,static_cast<std::string>(string_printf("%u", getNoobs(player) + amount)));
} }
} }
unsigned long getRecs(const RenX::PlayerInfo &player) unsigned long getRecs(const RenX::PlayerInfo &player)
{ {
return player.varData[pluginInstance.getName()].get<unsigned long>("Recs"_jrs); return player.varData[pluginInstance.getName()].get<unsigned long>("Recs"sv);
} }
unsigned long getNoobs(const RenX::PlayerInfo &player) unsigned long getNoobs(const RenX::PlayerInfo &player)
{ {
return player.varData[pluginInstance.getName()].get<unsigned long>("Noobs"_jrs); return player.varData[pluginInstance.getName()].get<unsigned long>("Noobs"sv);
} }
int getWorth(const RenX::PlayerInfo &player) int getWorth(const RenX::PlayerInfo &player)

15
src/Plugins/RenX/RenX.Medals/RenX_Medals.h

@ -21,7 +21,6 @@
#include <chrono> #include <chrono>
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/String.hpp"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_GameCommand.h" #include "RenX_GameCommand.h"
@ -60,17 +59,17 @@ public:
std::chrono::milliseconds killCongratDelay; std::chrono::milliseconds killCongratDelay;
std::chrono::milliseconds vehicleKillCongratDelay; std::chrono::milliseconds vehicleKillCongratDelay;
std::chrono::milliseconds kdrCongratDelay; std::chrono::milliseconds kdrCongratDelay;
Jupiter::StringS recsTag; std::string recsTag;
Jupiter::StringS noobTag; std::string noobTag;
Jupiter::StringS worthTag; std::string worthTag;
std::string firstSection; std::string firstSection;
Jupiter::StringS medalsFileName; std::string medalsFileName;
Jupiter::INIConfig medalsFile; Jupiter::INIConfig medalsFile;
private: private:
Jupiter::StringS INTERNAL_RECS_TAG; std::string INTERNAL_RECS_TAG;
Jupiter::StringS INTERNAL_NOOB_TAG; std::string INTERNAL_NOOB_TAG;
Jupiter::StringS INTERNAL_WORTH_TAG; std::string INTERNAL_WORTH_TAG;
void init(); void init();
}; };

82
src/Plugins/RenX/RenX.MinPlayers/RenX_MinPlayers.cpp

@ -21,56 +21,48 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_MinPlayers.h" #include "RenX_MinPlayers.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_MinPlayersPlugin::initialize() bool RenX_MinPlayersPlugin::initialize() {
{ RenX_MinPlayersPlugin::player_threshold = this->config.get<size_t>("PlayerThreshold"sv, 20);
RenX_MinPlayersPlugin::player_threshold = this->config.get<size_t>("PlayerThreshold"_jrs, 20);
return true; return true;
} }
void RenX_MinPlayersPlugin::RenX_OnMapStart(RenX::Server &server, std::string_view map) void RenX_MinPlayersPlugin::RenX_OnMapStart(RenX::Server &server, std::string_view map) {
{ if (server.players.size() < RenX_MinPlayersPlugin::player_threshold) {
if (server.players.size() < RenX_MinPlayersPlugin::player_threshold)
server.send(string_printf("addbots %d", RenX_MinPlayersPlugin::player_threshold - server.players.size())); server.send(string_printf("addbots %d", RenX_MinPlayersPlugin::player_threshold - server.players.size()));
} }
}
void RenX_MinPlayersPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) void RenX_MinPlayersPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) {
{ if (server.players.size() > RenX_MinPlayersPlugin::player_threshold && server.isMatchInProgress()) {
if (server.players.size() > RenX_MinPlayersPlugin::player_threshold && server.isMatchInProgress())
++RenX_MinPlayersPlugin::phase_bots; ++RenX_MinPlayersPlugin::phase_bots;
} }
}
void RenX_MinPlayersPlugin::RenX_OnPart(RenX::Server &server, const RenX::PlayerInfo &player) void RenX_MinPlayersPlugin::RenX_OnPart(RenX::Server &server, const RenX::PlayerInfo &player) {
{ if (server.isMatchInProgress() && server.players.size() <= player_threshold) {
if (server.isMatchInProgress() && server.players.size() <= player_threshold) switch (player.team) {
{
switch (player.team)
{
case RenX::TeamType::GDI: case RenX::TeamType::GDI:
server.send("addredbots 1"_jrs); server.send("addredbots 1"sv);
break; break;
case RenX::TeamType::Nod: case RenX::TeamType::Nod:
server.send("addbluebots 1"_jrs); server.send("addbluebots 1"sv);
break; break;
case RenX::TeamType::None: case RenX::TeamType::None:
break; break;
default: default:
server.send("addbots 1"_jrs); server.send("addbots 1"sv);
break; break;
} }
} }
} }
void RenX_MinPlayersPlugin::AnyDeath(RenX::Server &server, const RenX::PlayerInfo &player) void RenX_MinPlayersPlugin::AnyDeath(RenX::Server &server, const RenX::PlayerInfo &player) {
{ if (RenX_MinPlayersPlugin::phase_bots != 0 && player.isBot && server.players.size() != 0) {
if (RenX_MinPlayersPlugin::phase_bots != 0 && player.isBot && server.players.size() != 0)
{
size_t gdi_count = 0, nod_count = 0; size_t gdi_count = 0, nod_count = 0;
for (auto node = server.players.begin(); node != server.players.end(); ++node) for (auto node = server.players.begin(); node != server.players.end(); ++node) {
{ switch (node->team) {
switch (node->team)
{
case RenX::TeamType::GDI: case RenX::TeamType::GDI:
++gdi_count; ++gdi_count;
break; break;
@ -82,54 +74,44 @@ void RenX_MinPlayersPlugin::AnyDeath(RenX::Server &server, const RenX::PlayerInf
} }
} }
if (gdi_count > nod_count) if (gdi_count > nod_count) {
{ if (player.team != RenX::TeamType::Nod) {
if (player.team != RenX::TeamType::Nod) server.kickPlayer(player, "Bot Phasing"sv);
{
server.kickPlayer(player, "Bot Phasing"_jrs);
--RenX_MinPlayersPlugin::phase_bots; --RenX_MinPlayersPlugin::phase_bots;
} }
} }
else if (nod_count > gdi_count) else if (nod_count > gdi_count) {
{ if (player.team != RenX::TeamType::GDI) {
if (player.team != RenX::TeamType::GDI) server.kickPlayer(player, "Bot Phasing"sv);
{
server.kickPlayer(player, "Bot Phasing"_jrs);
--RenX_MinPlayersPlugin::phase_bots; --RenX_MinPlayersPlugin::phase_bots;
} }
} }
else else {
{ server.kickPlayer(player, "Bot Phasing"sv);
server.kickPlayer(player, "Bot Phasing"_jrs);
--RenX_MinPlayersPlugin::phase_bots; --RenX_MinPlayersPlugin::phase_bots;
} }
} }
} }
void RenX_MinPlayersPlugin::RenX_OnSuicide(RenX::Server &server, const RenX::PlayerInfo &player, std::string_view damageType) void RenX_MinPlayersPlugin::RenX_OnSuicide(RenX::Server &server, const RenX::PlayerInfo &player, std::string_view damageType) {
{
this->AnyDeath(server, player); this->AnyDeath(server, player);
} }
void RenX_MinPlayersPlugin::RenX_OnKill(RenX::Server &server, const RenX::PlayerInfo &player, const RenX::PlayerInfo &victim, std::string_view damageType) void RenX_MinPlayersPlugin::RenX_OnKill(RenX::Server &server, const RenX::PlayerInfo &player, const RenX::PlayerInfo &victim, std::string_view damageType) {
{
this->AnyDeath(server, player); this->AnyDeath(server, player);
} }
void RenX_MinPlayersPlugin::RenX_OnKill(RenX::Server &server, std::string_view killer, const RenX::TeamType &killerTeam, const RenX::PlayerInfo &victim, std::string_view damageType) void RenX_MinPlayersPlugin::RenX_OnKill(RenX::Server &server, std::string_view killer, const RenX::TeamType &killerTeam, const RenX::PlayerInfo &victim, std::string_view damageType) {
{
this->AnyDeath(server, victim); this->AnyDeath(server, victim);
} }
void RenX_MinPlayersPlugin::RenX_OnDie(RenX::Server &server, const RenX::PlayerInfo &player, std::string_view damageType) void RenX_MinPlayersPlugin::RenX_OnDie(RenX::Server &server, const RenX::PlayerInfo &player, std::string_view damageType) {
{
this->AnyDeath(server, player); this->AnyDeath(server, player);
} }
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_MinPlayersPlugin pluginInstance; RenX_MinPlayersPlugin pluginInstance;
extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() extern "C" JUPITER_EXPORT Jupiter::Plugin *getPlugin() {
{
return &pluginInstance; return &pluginInstance;
} }

1
src/Plugins/RenX/RenX.MinPlayers/RenX_MinPlayers.h

@ -20,7 +20,6 @@
#define _RENX_MINPLAYERS_H_HEADER #define _RENX_MINPLAYERS_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_MinPlayersPlugin : public RenX::Plugin class RenX_MinPlayersPlugin : public RenX::Plugin

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

@ -26,36 +26,35 @@
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
constexpr std::string_view game_administrator_name = "administrator"sv; constexpr std::string_view game_administrator_name = "administrator"sv;
constexpr std::string_view game_moderator_name = "moderator"sv; constexpr std::string_view game_moderator_name = "moderator"sv;
bool RenX_ModSystemPlugin::initialize() { bool RenX_ModSystemPlugin::initialize() {
m_lockSteam = this->config.get<bool>("LockSteam"_jrs, true); m_lockSteam = this->config.get<bool>("LockSteam"sv, true);
m_lockIP = this->config.get<bool>("LockIP"_jrs, false); m_lockIP = this->config.get<bool>("LockIP"sv, false);
m_lockName = this->config.get<bool>("LockName"_jrs, false); m_lockName = this->config.get<bool>("LockName"sv, false);
m_kickLockMismatch = this->config.get<bool>("KickLockMismatch"_jrs, true); m_kickLockMismatch = this->config.get<bool>("KickLockMismatch"sv, true);
m_autoAuthSteam = this->config.get<bool>("AutoAuthSteam"_jrs, true); m_autoAuthSteam = this->config.get<bool>("AutoAuthSteam"sv, true);
m_autoAuthIP = this->config.get<bool>("AutoAuthIP"_jrs, false); m_autoAuthIP = this->config.get<bool>("AutoAuthIP"sv, false);
m_atmDefault = this->config.get("ATMDefault"_jrs); m_atmDefault = this->config.get("ATMDefault"sv);
m_moderatorGroup = this->config.get("Moderator"_jrs, "Moderator"_jrs); m_moderatorGroup = this->config.get("Moderator"sv, "Moderator"sv);
m_administratorGroup = this->config.get("Administrator"_jrs, "Administrator"_jrs); m_administratorGroup = this->config.get("Administrator"sv, "Administrator"sv);
ModGroup *group; ModGroup *group;
Jupiter::ReferenceString dotLockSteam = ".LockSteam"; static constexpr std::string_view dotLockSteam = ".LockSteam"sv;
Jupiter::ReferenceString dotLockIP = ".LockIP"; static constexpr std::string_view dotLockIP = ".LockIP"sv;
Jupiter::ReferenceString dotLockName = ".LockName"; static constexpr std::string_view dotLockName = ".LockName"sv;
Jupiter::ReferenceString dotKickLockMismatch = ".KickLockMismatch"; static constexpr std::string_view dotKickLockMismatch = ".KickLockMismatch"sv;
Jupiter::ReferenceString dotAutoAuthSteam = ".AutoAuthSteam"; static constexpr std::string_view dotAutoAuthSteam = ".AutoAuthSteam"sv;
Jupiter::ReferenceString dotAutoAuthIP = ".AutoAuthIP"; static constexpr std::string_view dotAutoAuthIP = ".AutoAuthIP"sv;
Jupiter::ReferenceString dotNext = ".Next"; static constexpr std::string_view dotNext = ".Next"sv;
Jupiter::ReferenceString dotAccess = ".Access"; static constexpr std::string_view dotAccess = ".Access"sv;
Jupiter::ReferenceString dotPrefix = ".Prefix"; static constexpr std::string_view dotPrefix = ".Prefix"sv;
Jupiter::ReferenceString dotGamePrefix = ".GamePrefix"; static constexpr std::string_view dotGamePrefix = ".GamePrefix"sv;
std::string groupName = this->config.get("Default"_jrs, ""s); std::string groupName = this->config.get("Default"sv, ""s);
while (!groupName.empty()) { while (!groupName.empty()) {
// Add group // Add group
@ -170,7 +169,7 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
if (!player.uuid.empty()) { if (!player.uuid.empty()) {
Jupiter::Config *section = this->config.getSection(player.uuid); Jupiter::Config *section = this->config.getSection(player.uuid);
if (section != nullptr) { if (section != nullptr) {
std::string_view groupName = section->get("Group"_jrs); std::string_view groupName = section->get("Group"sv);
if (groupName.empty()) { if (groupName.empty()) {
group = &RenX_ModSystemPlugin::groups.front(); group = &RenX_ModSystemPlugin::groups.front();
@ -182,10 +181,10 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
} }
auto sectionAuth = [&] { auto sectionAuth = [&] {
player.varData[this->name].set("Group"_jrs, group->name); player.varData[this->name].set("Group"sv, group->name);
player.formatNamePrefix = section->get("Prefix"_jrs, group->prefix); player.formatNamePrefix = section->get("Prefix"sv, group->prefix);
player.gamePrefix = section->get("GamePrefix"_jrs, group->gamePrefix); player.gamePrefix = section->get("GamePrefix"sv, group->gamePrefix);
player.access = section->get<int>("Access"_jrs, group->access); player.access = section->get<int>("Access"sv, group->access);
if (player.access != 0) if (player.access != 0)
{ {
server.sendMessage(player, string_printf("You are now authenticated with access level %d; group: %.*s.", player.access, group->name.size(), group->name.data())); server.sendMessage(player, string_printf("You are now authenticated with access level %d; group: %.*s.", player.access, group->name.size(), group->name.data()));
@ -197,7 +196,7 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
server.sendData(string_printf("d%d\n", player.id)); server.sendData(string_printf("d%d\n", player.id));
} }
} }
Jupiter::String playerName = RenX::getFormattedPlayerName(player); std::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(), 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()); playerName.data(), player.access, group->name.size(), group->name.data());
return player.access; return player.access;
@ -206,16 +205,16 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
if (forceAuth) if (forceAuth)
return sectionAuth(); return sectionAuth();
bool lockSteam_l = section->get<bool>("LockSteam"_jrs, group->lockSteam); bool lockSteam_l = section->get<bool>("LockSteam"sv, group->lockSteam);
bool lockIP_l = section->get<bool>("LockIP"_jrs, group->lockIP); bool lockIP_l = section->get<bool>("LockIP"sv, group->lockIP);
bool lockName_l = section->get<bool>("LockName"_jrs, group->lockName); bool lockName_l = section->get<bool>("LockName"sv, group->lockName);
bool kickLockMismatch_l = section->get<bool>("KickLockMismatch"_jrs, group->kickLockMismatch); bool kickLockMismatch_l = section->get<bool>("KickLockMismatch"sv, group->kickLockMismatch);
bool autoAuthSteam_l = section->get<bool>("AutoAuthSteam"_jrs, group->autoAuthSteam); bool autoAuthSteam_l = section->get<bool>("AutoAuthSteam"sv, group->autoAuthSteam);
bool autoAuthIP_l = section->get<bool>("AutoAuthIP"_jrs, group->autoAuthIP); bool autoAuthIP_l = section->get<bool>("AutoAuthIP"sv, group->autoAuthIP);
uint64_t steamid = Jupiter::from_string<uint64_t>(section->get("SteamID"sv)); uint64_t steamid = Jupiter::from_string<uint64_t>(section->get("SteamID"sv));
std::string_view ip = section->get("LastIP"_jrs); std::string_view ip = section->get("LastIP"sv);
std::string_view name = section->get("Name"_jrs); std::string_view name = section->get("Name"sv);
if ((lockSteam_l == false || player.steamid == steamid) && (lockIP_l == false || player.ip == ip) && (lockName_l == false || jessilib::equalsi(player.name, name))) if ((lockSteam_l == false || player.steamid == steamid) && (lockIP_l == false || player.ip == ip) && (lockName_l == false || jessilib::equalsi(player.name, name)))
{ {
@ -224,14 +223,14 @@ int RenX_ModSystemPlugin::auth(RenX::Server &server, const RenX::PlayerInfo &pla
} }
else if (kickLockMismatch_l) else if (kickLockMismatch_l)
{ {
server.kickPlayer(player, "Moderator entry lock mismatch"_jrs); server.kickPlayer(player, "Moderator entry lock mismatch"sv);
return -1; return -1;
} }
} }
} }
group = this->getDefaultGroup(); group = this->getDefaultGroup();
player.varData[this->name].set("Group"_jrs, group->name); player.varData[this->name].set("Group"sv, group->name);
player.formatNamePrefix = group->prefix; player.formatNamePrefix = group->prefix;
player.gamePrefix = group->gamePrefix; player.gamePrefix = group->gamePrefix;
return player.access = group->access; return player.access = group->access;
@ -241,7 +240,7 @@ void RenX_ModSystemPlugin::tempAuth(RenX::Server &server, const RenX::PlayerInfo
if (group == nullptr) if (group == nullptr)
group = this->getDefaultGroup(); group = this->getDefaultGroup();
player.varData[name].set("Group"_jrs, group->name); player.varData[name].set("Group"sv, group->name);
player.formatNamePrefix = group->prefix; player.formatNamePrefix = group->prefix;
player.gamePrefix = group->gamePrefix; player.gamePrefix = group->gamePrefix;
player.access = group->access; player.access = group->access;
@ -251,10 +250,10 @@ void RenX_ModSystemPlugin::tempAuth(RenX::Server &server, const RenX::PlayerInfo
} }
bool RenX_ModSystemPlugin::set(RenX::PlayerInfo &player, ModGroup &group) { bool RenX_ModSystemPlugin::set(RenX::PlayerInfo &player, ModGroup &group) {
bool r = this->config[player.uuid].set("Group"_jrs, group.name); bool r = this->config[player.uuid].set("Group"sv, group.name);
this->config[player.uuid].set("SteamID"_jrs, static_cast<std::string>(string_printf("%llu", player.steamid))); this->config[player.uuid].set("SteamID"sv, static_cast<std::string>(string_printf("%llu", player.steamid)));
this->config[player.uuid].set("LastIP"_jrs, static_cast<std::string>(player.ip)); this->config[player.uuid].set("LastIP"sv, static_cast<std::string>(player.ip));
this->config[player.uuid].set("Name"_jrs, player.name); this->config[player.uuid].set("Name"sv, player.name);
this->config.write(); this->config.write();
return r; return r;
@ -299,7 +298,7 @@ int RenX_ModSystemPlugin::getConfigAccess(std::string_view uuid) const {
return RenX_ModSystemPlugin::groups.front().access; return RenX_ModSystemPlugin::groups.front().access;
} }
return section->get<int>("Access"_jrs, getGroupByName(section->get("Group"_jrs),const_cast<ModGroup *>(&groups.front()))->access); return section->get<int>("Access"sv, getGroupByName(section->get("Group"sv),const_cast<ModGroup *>(&groups.front()))->access);
} }
size_t RenX_ModSystemPlugin::getGroupCount() const { size_t RenX_ModSystemPlugin::getGroupCount() const {
@ -331,9 +330,9 @@ RenX_ModSystemPlugin::~RenX_ModSystemPlugin() {
if (server->players.size() != server->getBotCount()) { if (server->players.size() != server->getBotCount()) {
for (auto node = server->players.begin(); node != server->players.end(); ++node) { for (auto node = server->players.begin(); node != server->players.end(); ++node) {
if (node->isBot == false) { if (node->isBot == false) {
node->varData[RenX_ModSystemPlugin::name].remove("Group"_jrs); node->varData[RenX_ModSystemPlugin::name].remove("Group"sv);
node->gamePrefix.truncate(node->gamePrefix.size()); node->gamePrefix.clear();
node->formatNamePrefix.truncate(node->formatNamePrefix.size()); node->formatNamePrefix.clear();
if (node->adminType == game_administrator_name) if (node->adminType == game_administrator_name)
node->access = 2; node->access = 2;
else if (node->adminType == game_moderator_name) else if (node->adminType == game_moderator_name)
@ -358,9 +357,9 @@ void RenX_ModSystemPlugin::RenX_OnPlayerDelete(RenX::Server &server, const RenX:
if (RenX_ModSystemPlugin::groups.size() != 0 && !player.isBot && !player.uuid.empty()) { if (RenX_ModSystemPlugin::groups.size() != 0 && !player.isBot && !player.uuid.empty()) {
Jupiter::Config *section = this->config.getSection(player.uuid); Jupiter::Config *section = this->config.getSection(player.uuid);
if (section != nullptr) { if (section != nullptr) {
section->set("SteamID"_jrs, static_cast<std::string>(string_printf("%llu", player.steamid))); section->set("SteamID"sv, static_cast<std::string>(string_printf("%llu", player.steamid)));
section->set("LastIP"_jrs, static_cast<std::string>(player.ip)); section->set("LastIP"sv, static_cast<std::string>(player.ip));
section->set("Name"_jrs, player.name); section->set("Name"sv, player.name);
} }
} }
} }
@ -427,7 +426,7 @@ RenX_ModSystemPlugin pluginInstance;
void AuthIRCCommand::create() void AuthIRCCommand::create()
{ {
this->addTrigger("auth"_jrs); this->addTrigger("auth"sv);
this->setAccessLevel(3); this->setAccessLevel(3);
} }
@ -450,32 +449,32 @@ void AuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::str
serverMatch = true; serverMatch = true;
player = server->getPlayerByPartName(parameters); player = server->getPlayerByPartName(parameters);
if (player == nullptr) if (player == nullptr)
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
else else
{ {
int uAccess = source->getAccessLevel(channel, nick); int uAccess = source->getAccessLevel(channel, nick);
int cAccess = pluginInstance.getConfigAccess(player->uuid); int cAccess = pluginInstance.getConfigAccess(player->uuid);
if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size())) if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size()))
source->sendNotice(nick, "Error: Can't authenticate higher level moderators."_jrs); source->sendNotice(nick, "Error: Can't authenticate higher level moderators."sv);
else if (player->access == cAccess) else if (player->access == cAccess)
source->sendNotice(nick, "Error: Player is already authenticated"_jrs); source->sendNotice(nick, "Error: Player is already authenticated"sv);
else if (player->access > cAccess) else if (player->access > cAccess)
source->sendNotice(nick, "Error: Player is already temporarily authenticated."_jrs); source->sendNotice(nick, "Error: Player is already temporarily authenticated."sv);
else else
{ {
RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup(); RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup();
if (pluginInstance.auth(*server, *player) == -1) if (pluginInstance.auth(*server, *player) == -1)
source->sendNotice(nick, "Error: Player failed to pass strict lock checks. Player kicked."_jrs); source->sendNotice(nick, "Error: Player failed to pass strict lock checks. Player kicked."sv);
else if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"_jrs)) else if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"sv))
source->sendNotice(nick, "Error: Failed to authenticate player."_jrs); source->sendNotice(nick, "Error: Failed to authenticate player."sv);
else else
source->sendNotice(nick, "Player authenticated successfully."_jrs); source->sendNotice(nick, "Player authenticated successfully."sv);
} }
} }
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
else else
@ -484,7 +483,7 @@ void AuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::str
std::string_view AuthIRCCommand::getHelp(std::string_view ) std::string_view AuthIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Authenticates a player in-game. Syntax: auth [player=you]"); static constexpr std::string_view defaultHelp = "Authenticates a player in-game. Syntax: auth [player=you]"sv;
return defaultHelp; return defaultHelp;
} }
@ -494,10 +493,10 @@ IRC_COMMAND_INIT(AuthIRCCommand)
void DeAuthIRCCommand::create() void DeAuthIRCCommand::create()
{ {
this->addTrigger("unauth"_jrs); this->addTrigger("unauth"sv);
this->addTrigger("deauth"_jrs); this->addTrigger("deauth"sv);
this->addTrigger("demod"_jrs); this->addTrigger("demod"sv);
this->addTrigger("dtm"_jrs); this->addTrigger("dtm"sv);
this->setAccessLevel(3); this->setAccessLevel(3);
} }
@ -520,22 +519,22 @@ void DeAuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::s
serverMatch = true; serverMatch = true;
player = server->getPlayerByPartName(parameters); player = server->getPlayerByPartName(parameters);
if (player == nullptr) if (player == nullptr)
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
else else
{ {
int uAccess = source->getAccessLevel(channel, nick); int uAccess = source->getAccessLevel(channel, nick);
int cAccess = pluginInstance.getConfigAccess(player->uuid); int cAccess = pluginInstance.getConfigAccess(player->uuid);
if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size())) if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size()))
source->sendNotice(nick, "Error: Can't unauthenticate higher level moderators."_jrs); source->sendNotice(nick, "Error: Can't unauthenticate higher level moderators."sv);
else if (pluginInstance.resetAccess(*player)) else if (pluginInstance.resetAccess(*player))
source->sendNotice(nick, "Player unauthenticated successfully."_jrs); source->sendNotice(nick, "Player unauthenticated successfully."sv);
else else
source->sendNotice(nick, "Error: Player not authenticated."_jrs); source->sendNotice(nick, "Error: Player not authenticated."sv);
} }
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
else else
@ -544,7 +543,7 @@ void DeAuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::s
std::string_view DeAuthIRCCommand::getHelp(std::string_view ) std::string_view DeAuthIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Unauthenticates a player in-game. Syntax: deauth [player=you]"); static constexpr std::string_view defaultHelp = "Unauthenticates a player in-game. Syntax: deauth [player=you]"sv;
return defaultHelp; return defaultHelp;
} }
@ -554,7 +553,7 @@ IRC_COMMAND_INIT(DeAuthIRCCommand)
void ATMIRCCommand::create() void ATMIRCCommand::create()
{ {
this->addTrigger("atm"_jrs); this->addTrigger("atm"sv);
this->setAccessLevel(3); this->setAccessLevel(3);
} }
@ -577,7 +576,7 @@ void ATMIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
int index = Jupiter::asInt(parameters_split.first); int index = Jupiter::asInt(parameters_split.first);
if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) { if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) {
source->sendNotice(nick, "Warning: Invalid group index. Ingoring parameter..."_jrs); source->sendNotice(nick, "Warning: Invalid group index. Ingoring parameter..."sv);
} }
else if (index == 0) { else if (index == 0) {
source->sendNotice(nick, "Error: Default group is not valid for this command. Use \"deauth\" to deauthorize a player."sv); source->sendNotice(nick, "Error: Default group is not valid for this command. Use \"deauth\" to deauthorize a player."sv);
@ -596,7 +595,7 @@ void ATMIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
} }
} }
if (group == nullptr) if (group == nullptr)
source->sendNotice(nick, "Error: Invalid group."_jrs); source->sendNotice(nick, "Error: Invalid group."sv);
else else
{ {
for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++)
@ -607,18 +606,18 @@ void ATMIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
serverMatch = true; serverMatch = true;
player = server->getPlayerByPartName(playerName); player = server->getPlayerByPartName(playerName);
if (player == nullptr) if (player == nullptr)
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
else if (player->access > group->access) else if (player->access > group->access)
source->sendNotice(nick, "Error: This command can not lower a player's access level."_jrs); source->sendNotice(nick, "Error: This command can not lower a player's access level."sv);
else else
{ {
pluginInstance.tempAuth(*server, *player, group); pluginInstance.tempAuth(*server, *player, group);
source->sendNotice(nick, "Player successfully temporarily authenticated."_jrs); source->sendNotice(nick, "Player successfully temporarily authenticated."sv);
} }
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
} }
@ -626,7 +625,7 @@ void ATMIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
std::string_view ATMIRCCommand::getHelp(std::string_view ) std::string_view ATMIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Temporarily authenticates a player in-game. Syntax: atm [level] [player=you]"); static constexpr std::string_view defaultHelp = "Temporarily authenticates a player in-game. Syntax: atm [level] [player=you]"sv;
return defaultHelp; return defaultHelp;
} }
@ -636,16 +635,16 @@ IRC_COMMAND_INIT(ATMIRCCommand)
void AddIRCCommand::create() void AddIRCCommand::create()
{ {
this->addTrigger("addmod"_jrs); this->addTrigger("addmod"sv);
this->addTrigger("add"_jrs); this->addTrigger("add"sv);
this->addTrigger("set"_jrs); this->addTrigger("set"sv);
this->setAccessLevel(5); this->setAccessLevel(5);
} }
void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) { void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) {
auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (parameters_split.second.empty()) { if (parameters_split.second.empty()) {
source->sendNotice(nick, "Error: Too few parameters. Syntax: add <level> <player>"_jrs); source->sendNotice(nick, "Error: Too few parameters. Syntax: add <level> <player>"sv);
return; return;
} }
@ -662,7 +661,7 @@ void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
int index = Jupiter::asInt(parameters_split.first); int index = Jupiter::asInt(parameters_split.first);
if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) { if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) {
source->sendNotice(nick, "Error: Invalid group index."_jrs); source->sendNotice(nick, "Error: Invalid group index."sv);
} }
else { else {
group = pluginInstance.getGroupByIndex(index); group = pluginInstance.getGroupByIndex(index);
@ -670,7 +669,7 @@ void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
} }
} }
if (group == nullptr) if (group == nullptr)
source->sendNotice(nick, "Error: Invalid group."_jrs); source->sendNotice(nick, "Error: Invalid group."sv);
else { else {
for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) { for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) {
server = RenX::getCore()->getServer(i); server = RenX::getCore()->getServer(i);
@ -678,11 +677,11 @@ void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
serverMatch = true; serverMatch = true;
player = server->getPlayerByPartName(playerName); player = server->getPlayerByPartName(playerName);
if (player == nullptr) if (player == nullptr)
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
else if (player->isBot) else if (player->isBot)
source->sendNotice(nick, "Error: A bot can not be a moderator."_jrs); source->sendNotice(nick, "Error: A bot can not be a moderator."sv);
else if (player->uuid.empty()) else if (player->uuid.empty())
source->sendNotice(nick, "Error: Player has no UUID."_jrs); source->sendNotice(nick, "Error: Player has no UUID."sv);
else { else {
pluginInstance.resetAccess(*player); pluginInstance.resetAccess(*player);
if (pluginInstance.set(*player, *group)) if (pluginInstance.set(*player, *group))
@ -694,14 +693,14 @@ void AddIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
} }
std::string_view AddIRCCommand::getHelp(std::string_view ) std::string_view AddIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Adds a player to the in-game moderator list. Syntax: add <level> <player>"); static constexpr std::string_view defaultHelp = "Adds a player to the in-game moderator list. Syntax: add <level> <player>"sv;
return defaultHelp; return defaultHelp;
} }
@ -711,10 +710,10 @@ IRC_COMMAND_INIT(AddIRCCommand)
void DelIRCCommand::create() void DelIRCCommand::create()
{ {
this->addTrigger("delmod"_jrs); this->addTrigger("delmod"sv);
this->addTrigger("remmod"_jrs); this->addTrigger("remmod"sv);
this->addTrigger("del"_jrs); this->addTrigger("del"sv);
this->addTrigger("rem"_jrs); this->addTrigger("rem"sv);
this->setAccessLevel(5); this->setAccessLevel(5);
} }
@ -722,7 +721,7 @@ void DelIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
{ {
std::string_view parameters_view = parameters; std::string_view parameters_view = parameters;
if (parameters.empty()) if (parameters.empty())
source->sendNotice(nick, "Error: Too few parameters. Syntax: del <player>"_jrs); source->sendNotice(nick, "Error: Too few parameters. Syntax: del <player>"sv);
else else
{ {
Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); Jupiter::IRC::Client::Channel *chan = source->getChannel(channel);
@ -742,43 +741,43 @@ void DelIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::stri
if (player == nullptr) if (player == nullptr)
{ {
if (pluginInstance.removeModSection(parameters)) if (pluginInstance.removeModSection(parameters))
source->sendNotice(nick, "Player has been removed from the moderator list."_jrs); source->sendNotice(nick, "Player has been removed from the moderator list."sv);
else else
{ {
for (auto& section : pluginInstance.getConfig().getSections()) for (auto& section : pluginInstance.getConfig().getSections())
{ {
if (jessilib::equalsi(section.second.get("Name"_jrs), parameters_view)) { if (jessilib::equalsi(section.second.get("Name"sv), parameters_view)) {
if (pluginInstance.removeModSection(section.first)) if (pluginInstance.removeModSection(section.first))
source->sendNotice(nick, "Player has been removed from the moderator list."_jrs); source->sendNotice(nick, "Player has been removed from the moderator list."sv);
else else
source->sendNotice(nick, "Error: Unknown error occurred."_jrs); source->sendNotice(nick, "Error: Unknown error occurred."sv);
return; return;
} }
} }
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
} }
} }
else if (player->isBot) else if (player->isBot)
source->sendNotice(nick, "Error: A bot can not be a moderator."_jrs); source->sendNotice(nick, "Error: A bot can not be a moderator."sv);
else if (pluginInstance.removeModSection(player->uuid)) else if (pluginInstance.removeModSection(player->uuid))
source->sendNotice(nick, "Player has been removed from the moderator list."_jrs); source->sendNotice(nick, "Player has been removed from the moderator list."sv);
else else
source->sendNotice(nick, "Player is not in the moderator list."_jrs); source->sendNotice(nick, "Player is not in the moderator list."sv);
break; break;
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
} }
std::string_view DelIRCCommand::getHelp(std::string_view ) std::string_view DelIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Removes a player from the in-game moderator list. Syntax: del <player>"); static constexpr std::string_view defaultHelp = "Removes a player from the in-game moderator list. Syntax: del <player>"sv;
return defaultHelp; return defaultHelp;
} }
@ -788,8 +787,8 @@ IRC_COMMAND_INIT(DelIRCCommand)
void ForceAuthIRCCommand::create() void ForceAuthIRCCommand::create()
{ {
this->addTrigger("fauth"_jrs); this->addTrigger("fauth"sv);
this->addTrigger("forceauth"_jrs); this->addTrigger("forceauth"sv);
this->setAccessLevel(4); this->setAccessLevel(4);
} }
@ -812,31 +811,31 @@ void ForceAuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std
serverMatch = true; serverMatch = true;
player = server->getPlayerByPartName(parameters); player = server->getPlayerByPartName(parameters);
if (player == nullptr) if (player == nullptr)
source->sendNotice(nick, "Error: Player not found."_jrs); source->sendNotice(nick, "Error: Player not found."sv);
else else
{ {
int uAccess = source->getAccessLevel(channel, nick); int uAccess = source->getAccessLevel(channel, nick);
int cAccess = pluginInstance.getConfigAccess(player->uuid); int cAccess = pluginInstance.getConfigAccess(player->uuid);
if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size())) if (cAccess > uAccess && uAccess < static_cast<int>(source->getPrefixes().size()))
source->sendNotice(nick, "Error: Can't authenticate higher level moderators."_jrs); source->sendNotice(nick, "Error: Can't authenticate higher level moderators."sv);
else if (player->access == cAccess) else if (player->access == cAccess)
source->sendNotice(nick, "Error: Player is already authenticated"_jrs); source->sendNotice(nick, "Error: Player is already authenticated"sv);
else if (player->access > cAccess) else if (player->access > cAccess)
source->sendNotice(nick, "Error: Player is already temporarily authenticated."_jrs); source->sendNotice(nick, "Error: Player is already temporarily authenticated."sv);
else else
{ {
RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup(); RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup();
pluginInstance.auth(*server, *player, false, true); pluginInstance.auth(*server, *player, false, true);
if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"_jrs)) if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"sv))
source->sendNotice(nick, "Error: Failed to authenticate player."_jrs); source->sendNotice(nick, "Error: Failed to authenticate player."sv);
else else
source->sendNotice(nick, "Player authenticated successfully."_jrs); source->sendNotice(nick, "Player authenticated successfully."sv);
} }
} }
} }
} }
if (serverMatch == false) if (serverMatch == false)
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
} }
} }
else else
@ -845,7 +844,7 @@ void ForceAuthIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std
std::string_view ForceAuthIRCCommand::getHelp(std::string_view ) std::string_view ForceAuthIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Forcefully authenticates a player in-game. Syntax: auth [player=you]"); static constexpr std::string_view defaultHelp = "Forcefully authenticates a player in-game. Syntax: auth [player=you]"sv;
return defaultHelp; return defaultHelp;
} }
@ -854,12 +853,12 @@ IRC_COMMAND_INIT(ForceAuthIRCCommand)
// ModList IRC Command // ModList IRC Command
void ModListIRCCommand::create() { void ModListIRCCommand::create() {
this->addTrigger("modlist"_jrs); this->addTrigger("modlist"sv);
this->addTrigger("mlist"_jrs); this->addTrigger("mlist"sv);
} }
void ModListIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) { void ModListIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) {
Jupiter::String msg; std::string msg;
size_t msgBaseSize; size_t msgBaseSize;
bool haveMods = false; bool haveMods = false;
for (auto node = pluginInstance.groups.begin(); node != pluginInstance.groups.end(); ++node) { for (auto node = pluginInstance.groups.begin(); node != pluginInstance.groups.end(); ++node) {
@ -869,24 +868,25 @@ void ModListIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::
msgBaseSize = msg.size(); msgBaseSize = msg.size();
for (auto& section : pluginInstance.getConfig().getSections()) { for (auto& section : pluginInstance.getConfig().getSections()) {
if (jessilib::equalsi(section.second.get("Group"_jrs), node->name)) { if (jessilib::equalsi(section.second.get("Group"sv), node->name)) {
msg += section.second.get("Name"_jrs, section.second.getName()); msg += section.second.get("Name"sv, section.second.getName());
msg += ", "_jrs; msg += ", "sv;
} }
} }
if (msg.size() != msgBaseSize) { if (msg.size() != msgBaseSize) {
msg.truncate(2); msg.pop_back(); // ' '
msg.pop_back(); // ','
source->sendMessage(channel, msg); source->sendMessage(channel, msg);
haveMods = true; haveMods = true;
} }
} }
if (!haveMods) if (!haveMods)
source->sendMessage(channel, "There are no configured moderators."_jrs); source->sendMessage(channel, "There are no configured moderators."sv);
} }
std::string_view ModListIRCCommand::getHelp(std::string_view ) { std::string_view ModListIRCCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays the moderator list. Syntax: modlist"); static constexpr std::string_view defaultHelp = "Displays the moderator list. Syntax: modlist"sv;
return defaultHelp; return defaultHelp;
} }
@ -898,7 +898,7 @@ IRC_COMMAND_INIT(ModListIRCCommand)
void AuthGameCommand::create() void AuthGameCommand::create()
{ {
this->addTrigger("auth"_jrs); this->addTrigger("auth"sv);
this->setAccessLevel(3); this->setAccessLevel(3);
} }
@ -908,37 +908,37 @@ void AuthGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
{ {
RenX::PlayerInfo *target = source->getPlayerByPartName(parameters); RenX::PlayerInfo *target = source->getPlayerByPartName(parameters);
if (target == nullptr) if (target == nullptr)
source->sendMessage(*player, "Error: Player not found."_jrs); source->sendMessage(*player, "Error: Player not found."sv);
else if (target == player) else if (target == player)
source->sendMessage(*player, "Error: You can not authenticate yourself."_jrs); source->sendMessage(*player, "Error: You can not authenticate yourself."sv);
else else
{ {
int cAccess = pluginInstance.getConfigAccess(target->uuid); int cAccess = pluginInstance.getConfigAccess(target->uuid);
if (cAccess > player->access) if (cAccess > player->access)
source->sendMessage(*player, "Error: Can't authenticate higher level moderators."_jrs); source->sendMessage(*player, "Error: Can't authenticate higher level moderators."sv);
else if (target->access == cAccess) else if (target->access == cAccess)
source->sendMessage(*player, "Error: Player is already authenticated"_jrs); source->sendMessage(*player, "Error: Player is already authenticated"sv);
else if (target->access > cAccess) else if (target->access > cAccess)
source->sendMessage(*player, "Error: Player is already temporarily authenticated."_jrs); source->sendMessage(*player, "Error: Player is already temporarily authenticated."sv);
else else
{ {
RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup(); RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup();
if (pluginInstance.auth(*source, *player) == -1) if (pluginInstance.auth(*source, *player) == -1)
source->sendMessage(*player, "Error: Player failed to pass strict lock checks. Player kicked."_jrs); source->sendMessage(*player, "Error: Player failed to pass strict lock checks. Player kicked."sv);
else if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"_jrs)) else if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"sv))
source->sendMessage(*player, "Error: Failed to authenticate player."_jrs); source->sendMessage(*player, "Error: Failed to authenticate player."sv);
else else
source->sendMessage(*player, "Player authenticated successfully."_jrs); source->sendMessage(*player, "Player authenticated successfully."sv);
} }
} }
} }
else else
source->sendMessage(*player, "Error: Too few parameters. Syntax: auth <player>"_jrs); source->sendMessage(*player, "Error: Too few parameters. Syntax: auth <player>"sv);
} }
std::string_view AuthGameCommand::getHelp(std::string_view ) std::string_view AuthGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Authenticates a player. Syntax: auth <player>"); static constexpr std::string_view defaultHelp = "Authenticates a player. Syntax: auth <player>"sv;
return defaultHelp; return defaultHelp;
} }
@ -948,7 +948,7 @@ GAME_COMMAND_INIT(AuthGameCommand)
void ATMGameCommand::create() void ATMGameCommand::create()
{ {
this->addTrigger("atm"_jrs); this->addTrigger("atm"sv);
this->setAccessLevel(3); this->setAccessLevel(3);
} }
@ -963,17 +963,17 @@ void ATMGameCommand::trigger(RenX::Server *server, RenX::PlayerInfo *player, std
int index = Jupiter::asInt(parameters_split.first); int index = Jupiter::asInt(parameters_split.first);
if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) { if (index < 0 || index >= static_cast<int>(pluginInstance.groups.size())) {
server->sendMessage(*player, "Warning: Invalid group index. Ingoring parameter..."_jrs); server->sendMessage(*player, "Warning: Invalid group index. Ingoring parameter..."sv);
} }
else if (index == 0) { else if (index == 0) {
server->sendMessage(*player, "Error: Default group is not valid for this command. Use \"deauth\" to deauthorize a player."_jrs); server->sendMessage(*player, "Error: Default group is not valid for this command. Use \"deauth\" to deauthorize a player."sv);
return; return;
} }
else { else {
group = pluginInstance.getGroupByIndex(index); group = pluginInstance.getGroupByIndex(index);
if (group->access > player->access) { if (group->access > player->access) {
group = pluginInstance.getDefaultATMGroup(); group = pluginInstance.getDefaultATMGroup();
server->sendMessage(*player, "Warning: You can not authorize an access level higher than yourself. Ignoring parameter..."_jrs); server->sendMessage(*player, "Warning: You can not authorize an access level higher than yourself. Ignoring parameter..."sv);
} }
playerName = parameters_split.second; playerName = parameters_split.second;
} }
@ -981,25 +981,25 @@ void ATMGameCommand::trigger(RenX::Server *server, RenX::PlayerInfo *player, std
if (group != nullptr) { if (group != nullptr) {
target = server->getPlayerByPartName(playerName); target = server->getPlayerByPartName(playerName);
if (target == nullptr) if (target == nullptr)
server->sendMessage(*player, "Error: Player not found."_jrs); server->sendMessage(*player, "Error: Player not found."sv);
else if (target->access > group->access) else if (target->access > group->access)
server->sendMessage(*player, "Error: This command can not lower a player's access level."_jrs); server->sendMessage(*player, "Error: This command can not lower a player's access level."sv);
else else
{ {
pluginInstance.tempAuth(*server, *target, group); pluginInstance.tempAuth(*server, *target, group);
server->sendMessage(*player, "Player successfully temporarily authenticated."_jrs); server->sendMessage(*player, "Player successfully temporarily authenticated."sv);
} }
} }
else else
server->sendMessage(*player, "Error: Invalid group."_jrs); server->sendMessage(*player, "Error: Invalid group."sv);
} }
else else
server->sendMessage(*player, "Error: Too few parameters. Syntax: auth <player>"_jrs); server->sendMessage(*player, "Error: Too few parameters. Syntax: auth <player>"sv);
} }
std::string_view ATMGameCommand::getHelp(std::string_view ) std::string_view ATMGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Temporarily authenticates a player. Syntax: atm [level] <player>"); static constexpr std::string_view defaultHelp = "Temporarily authenticates a player. Syntax: atm [level] <player>"sv;
return defaultHelp; return defaultHelp;
} }
@ -1009,8 +1009,8 @@ GAME_COMMAND_INIT(ATMGameCommand)
void ForceAuthGameCommand::create() void ForceAuthGameCommand::create()
{ {
this->addTrigger("fauth"_jrs); this->addTrigger("fauth"sv);
this->addTrigger("forceauth"_jrs); this->addTrigger("forceauth"sv);
this->setAccessLevel(4); this->setAccessLevel(4);
} }
@ -1020,36 +1020,36 @@ void ForceAuthGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *playe
{ {
RenX::PlayerInfo *target = source->getPlayerByPartName(parameters); RenX::PlayerInfo *target = source->getPlayerByPartName(parameters);
if (target == nullptr) if (target == nullptr)
source->sendMessage(*player, "Error: Player not found."_jrs); source->sendMessage(*player, "Error: Player not found."sv);
else if (target == player) else if (target == player)
source->sendMessage(*player, "Error: You can not force-authenticate yourself."_jrs); source->sendMessage(*player, "Error: You can not force-authenticate yourself."sv);
else else
{ {
int cAccess = pluginInstance.getConfigAccess(target->uuid); int cAccess = pluginInstance.getConfigAccess(target->uuid);
if (cAccess > player->access) if (cAccess > player->access)
source->sendMessage(*player, "Error: Can't authenticate higher level moderators."_jrs); source->sendMessage(*player, "Error: Can't authenticate higher level moderators."sv);
else if (target->access == cAccess) else if (target->access == cAccess)
source->sendMessage(*player, "Error: Player is already authenticated"_jrs); source->sendMessage(*player, "Error: Player is already authenticated"sv);
else if (target->access > cAccess) else if (target->access > cAccess)
source->sendMessage(*player, "Error: Player is already temporarily authenticated."_jrs); source->sendMessage(*player, "Error: Player is already temporarily authenticated."sv);
else else
{ {
RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup(); RenX_ModSystemPlugin::ModGroup *defaultGroup = pluginInstance.getDefaultGroup();
pluginInstance.auth(*source, *player, false, true); pluginInstance.auth(*source, *player, false, true);
if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"_jrs)) if (defaultGroup->name == player->varData[pluginInstance.getName()].get("Group"sv))
source->sendMessage(*player, "Error: Failed to authenticate player."_jrs); source->sendMessage(*player, "Error: Failed to authenticate player."sv);
else else
source->sendMessage(*player, "Player authenticated successfully."_jrs); source->sendMessage(*player, "Player authenticated successfully."sv);
} }
} }
} }
else else
source->sendMessage(*player, "Error: Too few parameters. Syntax: fauth <player>"_jrs); source->sendMessage(*player, "Error: Too few parameters. Syntax: fauth <player>"sv);
} }
std::string_view ForceAuthGameCommand::getHelp(std::string_view ) std::string_view ForceAuthGameCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Forcefully authenticates a player. Syntax: fauth <player>"); static constexpr std::string_view defaultHelp = "Forcefully authenticates a player. Syntax: fauth <player>"sv;
return defaultHelp; return defaultHelp;
} }

2
src/Plugins/RenX/RenX.ModSystem/RenX_ModSystem.h

@ -21,8 +21,6 @@
#include <list> #include <list>
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/String.hpp"
#include "IRC_Command.h" #include "IRC_Command.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_GameCommand.h" #include "RenX_GameCommand.h"

3
src/Plugins/RenX/RenX.NicknameUUID/RenX_NicknameUUID.cpp

@ -16,14 +16,13 @@
* Written by Jessica James <jessica.aj@outlook.com> * Written by Jessica James <jessica.aj@outlook.com>
*/ */
#include "Jupiter/String.hpp"
#include "RenX_Core.h" #include "RenX_Core.h"
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_Functions.h" #include "RenX_Functions.h"
#include "RenX_NicknameUUID.h" #include "RenX_NicknameUUID.h"
Jupiter::StringS calc_uuid(RenX::PlayerInfo &player) std::string calc_uuid(RenX::PlayerInfo &player)
{ {
return player.name; return player.name;
} }

1
src/Plugins/RenX/RenX.NicknameUUID/RenX_NicknameUUID.h

@ -20,7 +20,6 @@
#define _RENX_NICKNAMEUUID_H_HEADER #define _RENX_NICKNAMEUUID_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_NicknameUUIDPlugin : public RenX::Plugin class RenX_NicknameUUIDPlugin : public RenX::Plugin

1
src/Plugins/RenX/RenX.Plugin.Template/Example.h

@ -10,7 +10,6 @@
#define _EXAMPLE_H_HEADER #define _EXAMPLE_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_TPlugin : public RenX::Plugin class RenX_TPlugin : public RenX::Plugin

34
src/Plugins/RenX/RenX.Relay/RenX_Relay.cpp

@ -11,6 +11,7 @@
#include <unordered_set> #include <unordered_set>
#include <cassert> #include <cassert>
#include <fstream> #include <fstream>
#include <iostream>
#include "fmt/format.h" // TODO: replace with <format> later #include "fmt/format.h" // TODO: replace with <format> later
#include <charconv> #include <charconv>
#include "jessilib/split.hpp" #include "jessilib/split.hpp"
@ -23,7 +24,6 @@
// String literal redefinition of RenX::DelimC // String literal redefinition of RenX::DelimC
#define RX_DELIM "\x02" #define RX_DELIM "\x02"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
constexpr const char g_blank_steamid[] = "0x0000000000000000"; constexpr const char g_blank_steamid[] = "0x0000000000000000";
constexpr std::chrono::steady_clock::duration g_reconnect_delay = std::chrono::seconds{15 }; // game server: 120s constexpr std::chrono::steady_clock::duration g_reconnect_delay = std::chrono::seconds{15 }; // game server: 120s
@ -178,7 +178,7 @@ bool RenX_RelayPlugin::initialize() {
m_default_settings = get_settings(config); m_default_settings = get_settings(config);
std::string_view upstreams_list = config.get("Upstreams"_jrs, ""sv); std::string_view upstreams_list = config.get("Upstreams"sv, ""sv);
std::vector<std::string_view> upstream_names = jessilib::word_split_view(upstreams_list, WHITESPACE_SV); std::vector<std::string_view> upstream_names = jessilib::word_split_view(upstreams_list, WHITESPACE_SV);
for (auto upstream_name : upstream_names) { for (auto upstream_name : upstream_names) {
auto upstream_config = config.getSection(upstream_name); auto upstream_config = config.getSection(upstream_name);
@ -325,7 +325,7 @@ void RenX_RelayPlugin::RenX_OnRaw(RenX::Server &server, std::string_view line) {
// This is a command response for an upstream command; this is only relevant to one server: that server // This is a command response for an upstream command; this is only relevant to one server: that server
// Always echo the command back exactly as it was sent // Always echo the command back exactly as it was sent
Jupiter::StringS line_sanitized; std::string line_sanitized;
const auto& rcon_username = get_upstream_rcon_username(*front_server_info, server); const auto& rcon_username = get_upstream_rcon_username(*front_server_info, server);
if (rcon_username == server.getRCONUsername()) { if (rcon_username == server.getRCONUsername()) {
// No need to recombine tokens // No need to recombine tokens
@ -556,20 +556,20 @@ RenX_RelayPlugin::upstream_settings RenX_RelayPlugin::get_settings(const Jupiter
upstream_settings result{}; upstream_settings result{};
// Read in settings // Read in settings
result.m_upstream_hostname = in_config.get<std::string>("UpstreamHost"_jrs, m_default_settings.m_upstream_hostname); result.m_upstream_hostname = in_config.get<std::string>("UpstreamHost"sv, m_default_settings.m_upstream_hostname);
result.m_upstream_port = in_config.get<uint16_t>("UpstreamPort"_jrs, m_default_settings.m_upstream_port); result.m_upstream_port = in_config.get<uint16_t>("UpstreamPort"sv, m_default_settings.m_upstream_port);
result.m_rcon_username = in_config.get<std::string>("RconUsername"_jrs, m_default_settings.m_rcon_username); result.m_rcon_username = in_config.get<std::string>("RconUsername"sv, m_default_settings.m_rcon_username);
result.m_log_traffic = in_config.get<bool>("LogTraffic"_jrs, m_default_settings.m_log_traffic); result.m_log_traffic = in_config.get<bool>("LogTraffic"sv, m_default_settings.m_log_traffic);
result.m_fake_pings = in_config.get<bool>("FakePings"_jrs, m_default_settings.m_fake_pings); result.m_fake_pings = in_config.get<bool>("FakePings"sv, m_default_settings.m_fake_pings);
result.m_fake_ignored_commands = in_config.get<bool>("FakeSuppressedCommands"_jrs, m_default_settings.m_fake_ignored_commands); result.m_fake_ignored_commands = in_config.get<bool>("FakeSuppressedCommands"sv, m_default_settings.m_fake_ignored_commands);
result.m_sanitize_names = in_config.get<bool>("SanitizeNames"_jrs, m_default_settings.m_sanitize_names); result.m_sanitize_names = in_config.get<bool>("SanitizeNames"sv, m_default_settings.m_sanitize_names);
result.m_sanitize_ips = in_config.get<bool>("SanitizeIPs"_jrs, m_default_settings.m_sanitize_ips); result.m_sanitize_ips = in_config.get<bool>("SanitizeIPs"sv, m_default_settings.m_sanitize_ips);
result.m_sanitize_hwids = in_config.get<bool>("SanitizeHWIDs"_jrs, m_default_settings.m_sanitize_hwids); result.m_sanitize_hwids = in_config.get<bool>("SanitizeHWIDs"sv, m_default_settings.m_sanitize_hwids);
result.m_sanitize_steam_ids = in_config.get<bool>("SanitizeSteamIDs"_jrs, m_default_settings.m_sanitize_steam_ids); result.m_sanitize_steam_ids = in_config.get<bool>("SanitizeSteamIDs"sv, m_default_settings.m_sanitize_steam_ids);
result.m_suppress_unknown_commands = in_config.get<bool>("SuppressUnknownCmds"_jrs, m_default_settings.m_suppress_unknown_commands); result.m_suppress_unknown_commands = in_config.get<bool>("SuppressUnknownCmds"sv, m_default_settings.m_suppress_unknown_commands);
result.m_suppress_blacklisted_commands = in_config.get<bool>("SuppressBlacklistedCmds"_jrs, m_default_settings.m_suppress_blacklisted_commands); result.m_suppress_blacklisted_commands = in_config.get<bool>("SuppressBlacklistedCmds"sv, m_default_settings.m_suppress_blacklisted_commands);
result.m_suppress_chat_logs = in_config.get<bool>("SuppressChatLogs"_jrs, m_default_settings.m_suppress_chat_logs); result.m_suppress_chat_logs = in_config.get<bool>("SuppressChatLogs"sv, m_default_settings.m_suppress_chat_logs);
result.m_suppress_rcon_command_logs = in_config.get<bool>("SuppressRconCommandLogs"_jrs, m_default_settings.m_suppress_rcon_command_logs); result.m_suppress_rcon_command_logs = in_config.get<bool>("SuppressRconCommandLogs"sv, m_default_settings.m_suppress_rcon_command_logs);
// Populate fake command handlers // Populate fake command handlers
if (result.m_fake_pings) { if (result.m_fake_pings) {

1
src/Plugins/RenX/RenX.Relay/RenX_Relay.h

@ -10,7 +10,6 @@
#include <deque> #include <deque>
#include <functional> #include <functional>
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "Jupiter/TCPSocket.h" #include "Jupiter/TCPSocket.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"

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

@ -17,6 +17,7 @@
*/ */
#include "jessilib/split.hpp" #include "jessilib/split.hpp"
#include "jessilib/unicode.hpp"
#include "Jupiter/IRC_Client.h" #include "Jupiter/IRC_Client.h"
#include "Jupiter/HTTP.h" #include "Jupiter/HTTP.h"
#include "Jupiter/HTTP_QueryString.h" #include "Jupiter/HTTP_QueryString.h"
@ -27,10 +28,9 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_ServerList.h" #include "RenX_ServerList.h"
using namespace Jupiter::literals;
using namespace std::literals; using namespace std::literals;
static STRING_LITERAL_AS_NAMED_REFERENCE(CONTENT_TYPE_APPLICATION_JSON, "application/json"); static constexpr std::string_view CONTENT_TYPE_APPLICATION_JSON = "application/json"sv;
constexpr std::string_view server_list_game_header = "<html><body>"sv; constexpr std::string_view server_list_game_header = "<html><body>"sv;
constexpr std::string_view server_list_game_footer = "\n</body></html>"sv; constexpr std::string_view server_list_game_footer = "\n</body></html>"sv;
@ -94,13 +94,13 @@ std::string jsonify(std::string_view in_str) {
} }
bool RenX_ServerListPlugin::initialize() { bool RenX_ServerListPlugin::initialize() {
m_web_hostname = this->config.get("Hostname"_jrs, ""_jrs); m_web_hostname = this->config.get("Hostname"sv, ""sv);
m_web_path = this->config.get("Path"_jrs, "/"_jrs); m_web_path = this->config.get("Path"sv, "/"sv);
m_server_list_page_name = this->config.get("ServersPageName"_jrs, "servers"_jrs); m_server_list_page_name = this->config.get("ServersPageName"sv, "servers"sv);
m_server_list_long_page_name = this->config.get("HumanServersPageName"_jrs, "servers_long"_jrs); m_server_list_long_page_name = this->config.get("HumanServersPageName"sv, "servers_long"sv);
m_server_page_name = this->config.get("ServerPageName"_jrs, "server"_jrs); m_server_page_name = this->config.get("ServerPageName"sv, "server"sv);
m_metadata_page_name = this->config.get("MetadataPageName"_jrs, "metadata"_jrs); m_metadata_page_name = this->config.get("MetadataPageName"sv, "metadata"sv);
m_metadata_prometheus_page_name = this->config.get("MetadataPrometheusPageName"_jrs, "metadata_prometheus"_jrs); m_metadata_prometheus_page_name = this->config.get("MetadataPrometheusPageName"sv, "metadata_prometheus"sv);
/** Initialize content */ /** Initialize content */
Jupiter::HTTP::Server &server = getHTTPServer(); Jupiter::HTTP::Server &server = getHTTPServer();
@ -184,16 +184,16 @@ std::string RenX_ServerListPlugin::server_as_json(const RenX::Server &server) {
return "null"s; return "null"s;
} }
Jupiter::String server_name = jsonify(server.getName()); std::string server_name = jsonify(server.getName());
Jupiter::String server_map = jsonify(server.getMap().name); std::string server_map = jsonify(server.getMap().name);
Jupiter::String server_version = jsonify(server.getGameVersion()); std::string server_version = jsonify(server.getGameVersion());
Jupiter::ReferenceString server_hostname = serverInfo.hostname; std::string_view server_hostname = serverInfo.hostname;
unsigned short server_port = serverInfo.port; unsigned short server_port = serverInfo.port;
Jupiter::String server_prefix = jsonify(serverInfo.namePrefix); std::string server_prefix = jsonify(serverInfo.namePrefix);
// Some members we only include if they're populated // Some members we only include if they're populated
if (!server_prefix.empty()) { if (!server_prefix.empty()) {
server_prefix = R"json("NamePrefix":")json"s + server_prefix + "\","_jrs; server_prefix = jessilib::join<std::string>(R"json("NamePrefix":")json"sv, server_prefix, "\","sv);
} }
std::string server_attributes; std::string server_attributes;
@ -249,20 +249,20 @@ std::string RenX_ServerListPlugin::server_as_server_details_json(const RenX::Ser
// Levels // Levels
if (server.maps.size() != 0) { if (server.maps.size() != 0) {
server_json_block += "\"Levels\":["_jrs; server_json_block += "\"Levels\":["sv;
server_json_block += "{\"Name\":\""_jrs; server_json_block += "{\"Name\":\""sv;
server_json_block += jsonify(server.maps[0].name); server_json_block += jsonify(server.maps[0].name);
server_json_block += "\",\"GUID\":\""_jrs; server_json_block += "\",\"GUID\":\""sv;
server_json_block += RenX::formatGUID(server.maps[0]); server_json_block += RenX::formatGUID(server.maps[0]);
server_json_block += "\"}"_jrs; server_json_block += "\"}"sv;
for (size_t index = 1; index != server.maps.size(); ++index) { for (size_t index = 1; index != server.maps.size(); ++index) {
server_json_block += ",{\"Name\":\""_jrs; server_json_block += ",{\"Name\":\""sv;
server_json_block += jsonify(server.maps[index].name); server_json_block += jsonify(server.maps[index].name);
server_json_block += "\",\"GUID\":\""_jrs; server_json_block += "\",\"GUID\":\""sv;
server_json_block += RenX::formatGUID(server.maps[index]); server_json_block += RenX::formatGUID(server.maps[index]);
server_json_block += "\"}"_jrs; server_json_block += "\"}"sv;
} }
server_json_block += ']'; server_json_block += ']';
@ -271,17 +271,17 @@ std::string RenX_ServerListPlugin::server_as_server_details_json(const RenX::Ser
// Mutators // Mutators
if (server.mutators.size() != 0) { if (server.mutators.size() != 0) {
if (server.maps.size() != 0) if (server.maps.size() != 0)
server_json_block += ","_jrs; server_json_block += ","sv;
server_json_block += "\"Mutators\":["_jrs; server_json_block += "\"Mutators\":["sv;
server_json_block += "{\"Name\":\""_jrs; server_json_block += "{\"Name\":\""sv;
server_json_block += jsonify(server.mutators[0]); server_json_block += jsonify(server.mutators[0]);
server_json_block += "\"}"_jrs; server_json_block += "\"}"sv;
for (size_t index = 1; index != server.mutators.size(); ++index) { for (size_t index = 1; index != server.mutators.size(); ++index) {
server_json_block += ",{\"Name\":\""_jrs; server_json_block += ",{\"Name\":\""sv;
server_json_block += jsonify(server.mutators[index]); server_json_block += jsonify(server.mutators[index]);
server_json_block += "\"}"_jrs; server_json_block += "\"}"sv;
} }
server_json_block += ']'; server_json_block += ']';
@ -289,35 +289,35 @@ std::string RenX_ServerListPlugin::server_as_server_details_json(const RenX::Ser
// Player List // Player List
if (server.players.size() != 0 && server.players.size() != server.getBotCount()) { if (server.players.size() != 0 && server.players.size() != server.getBotCount()) {
server_json_block += ",\"PlayerList\":["_jrs; server_json_block += ",\"PlayerList\":["sv;
auto node = server.players.begin(); auto node = server.players.begin();
if (node != server.players.end()) { if (node != server.players.end()) {
server_json_block += "{\"Name\":\""_jrs; server_json_block += "{\"Name\":\""sv;
server_json_block += jsonify(node->name); server_json_block += jsonify(node->name);
server_json_block += "\", \"isBot\":"_jrs; server_json_block += "\", \"isBot\":"sv;
server_json_block += json_bool_as_cstring(node->isBot); server_json_block += json_bool_as_cstring(node->isBot);
server_json_block += ", \"Team\":"_jrs; server_json_block += ", \"Team\":"sv;
server_json_block += std::to_string(static_cast<int>(node->team)); server_json_block += std::to_string(static_cast<int>(node->team));
server_json_block += "}"_jrs; server_json_block += "}"sv;
++node; ++node;
} }
while (node != server.players.end()) { while (node != server.players.end()) {
server_json_block += ",{\"Name\":\""_jrs; server_json_block += ",{\"Name\":\""sv;
server_json_block += jsonify(node->name); server_json_block += jsonify(node->name);
server_json_block += "\", \"isBot\":"_jrs; server_json_block += "\", \"isBot\":"sv;
server_json_block += json_bool_as_cstring(node->isBot); server_json_block += json_bool_as_cstring(node->isBot);
server_json_block += ", \"Team\":"_jrs; server_json_block += ", \"Team\":"sv;
server_json_block += std::to_string(static_cast<int>(node->team)); server_json_block += std::to_string(static_cast<int>(node->team));
server_json_block += "}"_jrs; server_json_block += "}"sv;
++node; ++node;
} }
server_json_block += "]"_jrs; server_json_block += "]"sv;
} }
server_json_block += '}'; server_json_block += '}';
@ -327,12 +327,12 @@ std::string RenX_ServerListPlugin::server_as_server_details_json(const RenX::Ser
std::string RenX_ServerListPlugin::server_as_long_json(const RenX::Server &server) { std::string RenX_ServerListPlugin::server_as_long_json(const RenX::Server &server) {
ListServerInfo serverInfo = getListServerInfo(server); ListServerInfo serverInfo = getListServerInfo(server);
Jupiter::String server_name = jsonify(server.getName()); std::string server_name = jsonify(server.getName());
Jupiter::String server_map = jsonify(server.getMap().name); std::string server_map = jsonify(server.getMap().name);
Jupiter::String server_version = jsonify(server.getGameVersion()); std::string server_version = jsonify(server.getGameVersion());
Jupiter::ReferenceString server_hostname = serverInfo.hostname; std::string_view server_hostname = serverInfo.hostname;
unsigned short server_port = serverInfo.port; unsigned short server_port = serverInfo.port;
Jupiter::String server_prefix = jsonify(serverInfo.namePrefix); std::string server_prefix = jsonify(serverInfo.namePrefix);
std::vector<const RenX::PlayerInfo*> activePlayers = server.activePlayers(false); std::vector<const RenX::PlayerInfo*> activePlayers = server.activePlayers(false);
std::string server_attributes = "[]"; std::string server_attributes = "[]";
@ -403,72 +403,72 @@ std::string RenX_ServerListPlugin::server_as_long_json(const RenX::Server &serve
// Level Rotation // Level Rotation
if (server.maps.size() != 0) { if (server.maps.size() != 0) {
server_json_block += ",\n\t\t\"Levels\": ["_jrs; server_json_block += ",\n\t\t\"Levels\": ["sv;
server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify(server.maps[0].name); server_json_block += jsonify(server.maps[0].name);
server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs; server_json_block += "\",\n\t\t\t\t\"GUID\": \""sv;
server_json_block += RenX::formatGUID(server.maps[0]); server_json_block += RenX::formatGUID(server.maps[0]);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
for (size_t index = 1; index != server.maps.size(); ++index) { for (size_t index = 1; index != server.maps.size(); ++index) {
server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify(server.maps[index].name); server_json_block += jsonify(server.maps[index].name);
server_json_block += "\",\n\t\t\t\t\"GUID\": \""_jrs; server_json_block += "\",\n\t\t\t\t\"GUID\": \""sv;
server_json_block += RenX::formatGUID(server.maps[index]); server_json_block += RenX::formatGUID(server.maps[index]);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
} }
server_json_block += "\n\t\t]"_jrs; server_json_block += "\n\t\t]"sv;
} }
// Mutators // Mutators
if (server.mutators.size() != 0) { if (server.mutators.size() != 0) {
server_json_block += ",\n\t\t\"Mutators\": ["_jrs; server_json_block += ",\n\t\t\"Mutators\": ["sv;
server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify(server.mutators[0]); server_json_block += jsonify(server.mutators[0]);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
for (size_t index = 1; index != server.mutators.size(); ++index) { for (size_t index = 1; index != server.mutators.size(); ++index) {
server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify(server.mutators[index]); server_json_block += jsonify(server.mutators[index]);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
} }
server_json_block += "\n\t\t]"_jrs; server_json_block += "\n\t\t]"sv;
} }
// Player List // Player List
if (activePlayers.size() != 0) { if (activePlayers.size() != 0) {
server_json_block += ",\n\t\t\"PlayerList\": ["_jrs; server_json_block += ",\n\t\t\"PlayerList\": ["sv;
auto node = activePlayers.begin(); auto node = activePlayers.begin();
// Add first player to JSON // Add first player to JSON
server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += "\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify((*node)->name); server_json_block += jsonify((*node)->name);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
++node; ++node;
// Add remaining players to JSON // Add remaining players to JSON
while (node != activePlayers.end()) { while (node != activePlayers.end()) {
server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""_jrs; server_json_block += ",\n\t\t\t{\n\t\t\t\t\"Name\": \""sv;
server_json_block += jsonify((*node)->name); server_json_block += jsonify((*node)->name);
server_json_block += "\"\n\t\t\t}"_jrs; server_json_block += "\"\n\t\t\t}"sv;
++node; ++node;
} }
server_json_block += "\n\t\t]"_jrs; server_json_block += "\n\t\t]"sv;
} }
server_json_block += "\n\t}"_jrs; server_json_block += "\n\t}"sv;
return static_cast<std::string>(server_json_block); return static_cast<std::string>(server_json_block);
} }
void RenX_ServerListPlugin::addServerToServerList(RenX::Server &server) { void RenX_ServerListPlugin::addServerToServerList(RenX::Server &server) {
Jupiter::String server_json_block(256); std::string server_json_block;
// append to server_list_json // append to server_list_json
server_json_block = server_as_json(server); server_json_block = server_as_json(server);
@ -481,7 +481,6 @@ void RenX_ServerListPlugin::addServerToServerList(RenX::Server &server) {
} }
m_server_list_json += server_json_block; m_server_list_json += server_json_block;
m_server_list_json += ']'; m_server_list_json += ']';
server_json_block.clear();
// Also update metadata so it reflects the now added server // Also update metadata so it reflects the now added server
updateMetadata(); updateMetadata();
@ -543,23 +542,23 @@ void RenX_ServerListPlugin::updateMetadata() {
} }
void RenX_ServerListPlugin::markDetailsStale(RenX::Server& in_server) { void RenX_ServerListPlugin::markDetailsStale(RenX::Server& in_server) {
in_server.varData[this->name].remove("j"_jrs); in_server.varData[this->name].remove("j"sv);
} }
void RenX_ServerListPlugin::touchDetails(RenX::Server& in_server) { void RenX_ServerListPlugin::touchDetails(RenX::Server& in_server) {
auto& server_varData = in_server.varData[this->name]; auto& server_varData = in_server.varData[this->name];
if (server_varData.get("j"_jrs).empty()) { if (server_varData.get("j"sv).empty()) {
auto server_json_block = server_as_server_details_json(in_server); auto server_json_block = server_as_server_details_json(in_server);
server_varData.set("j"_jrs, server_json_block); server_varData.set("j"sv, server_json_block);
} }
} }
std::string_view RenX_ServerListPlugin::getListServerAddress(const RenX::Server& server) { std::string_view RenX_ServerListPlugin::getListServerAddress(const RenX::Server& server) {
Jupiter::ReferenceString serverHostname; std::string_view serverHostname;
serverHostname = server.getSocketHostname(); serverHostname = server.getSocketHostname();
if (auto section = config.getSection(serverHostname)) { if (auto section = config.getSection(serverHostname)) {
serverHostname = section->get("ListAddress"_jrs, serverHostname); serverHostname = section->get("ListAddress"sv, serverHostname);
} }
return serverHostname; return serverHostname;
@ -573,12 +572,12 @@ RenX_ServerListPlugin::ListServerInfo RenX_ServerListPlugin::getListServerInfo(c
return; return;
} }
result.hostname = section->get("ListAddress"_jrs, result.hostname); result.hostname = section->get("ListAddress"sv, result.hostname);
result.port = section->get("ListPort"_jrs, result.port); result.port = section->get("ListPort"sv, result.port);
result.namePrefix = section->get("ListNamePrefix"_jrs, result.namePrefix); result.namePrefix = section->get("ListNamePrefix"sv, result.namePrefix);
// Attributes // Attributes
std::string_view attributes_str = section->get("ListAttributes"_jrs); std::string_view attributes_str = section->get("ListAttributes"sv);
if (!attributes_str.empty()) { if (!attributes_str.empty()) {
result.attributes = jessilib::split_view(attributes_str, ' '); result.attributes = jessilib::split_view(attributes_str, ' ');
} }
@ -641,12 +640,12 @@ std::string* handle_server_list_long_page(std::string_view) {
// regenerate server_list_json // regenerate server_list_json
*server_list_long_json = "["_jrs; *server_list_long_json = "["sv;
while (index != servers.size()) { while (index != servers.size()) {
server = servers[index]; server = servers[index];
if (server->isConnected() && server->isFullyConnected()) { if (server->isConnected() && server->isFullyConnected()) {
*server_list_long_json += "\n\t"_jrs; *server_list_long_json += "\n\t"sv;
*server_list_long_json += pluginInstance.server_as_long_json(*server); *server_list_long_json += pluginInstance.server_as_long_json(*server);
++index; ++index;
break; break;
@ -656,20 +655,20 @@ std::string* handle_server_list_long_page(std::string_view) {
while (index != servers.size()) { while (index != servers.size()) {
server = servers[index]; server = servers[index];
if (server->isConnected() && server->isFullyConnected()) { if (server->isConnected() && server->isFullyConnected()) {
*server_list_long_json += ",\n\t"_jrs; *server_list_long_json += ",\n\t"sv;
*server_list_long_json += pluginInstance.server_as_long_json(*server); *server_list_long_json += pluginInstance.server_as_long_json(*server);
} }
++index; ++index;
} }
*server_list_long_json += "\n]"_jrs; *server_list_long_json += "\n]"sv;
return server_list_long_json; return server_list_long_json;
} }
std::string* handle_server_page(std::string_view query_string) { std::string* handle_server_page(std::string_view query_string) {
Jupiter::HTTP::HTMLFormResponse html_form_response(query_string); Jupiter::HTTP::HTMLFormResponse html_form_response(query_string);
Jupiter::ReferenceString address; std::string_view address;
int port = 0; int port = 0;
RenX::Server *server; RenX::Server *server;
@ -700,7 +699,7 @@ std::string* handle_server_page(std::string_view query_string) {
// return server data // return server data
pluginInstance.touchDetails(*server); pluginInstance.touchDetails(*server);
return new std::string(server->varData[pluginInstance.getName()].get("j"_jrs)); return new std::string(server->varData[pluginInstance.getName()].get("j"sv));
} }
std::string* handle_metadata_page(std::string_view) { std::string* handle_metadata_page(std::string_view) {

5
src/Plugins/RenX/RenX.ServerList/RenX_ServerList.h

@ -20,16 +20,15 @@
#define _RENX_SERVERLIST_H_HEADER #define _RENX_SERVERLIST_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
class RenX_ServerListPlugin : public RenX::Plugin class RenX_ServerListPlugin : public RenX::Plugin
{ {
public: // RenX_ServerListPlugin public: // RenX_ServerListPlugin
struct ListServerInfo { struct ListServerInfo {
Jupiter::ReferenceString hostname; std::string_view hostname;
unsigned short port; unsigned short port;
Jupiter::ReferenceString namePrefix; std::string_view namePrefix;
std::vector<std::string_view> attributes; std::vector<std::string_view> attributes;
}; };

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

@ -21,7 +21,7 @@
#include "RenX_Server.h" #include "RenX_Server.h"
#include "RenX_SetJoin.h" #include "RenX_SetJoin.h"
using namespace Jupiter::literals; using namespace std::literals;
void RenX_SetJoinPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) { void RenX_SetJoinPlugin::RenX_OnJoin(RenX::Server &server, const RenX::PlayerInfo &player) {
if (!player.uuid.empty() && server.isMatchInProgress()) { if (!player.uuid.empty() && server.isMatchInProgress()) {
@ -37,8 +37,8 @@ RenX_SetJoinPlugin pluginInstance;
// ViewJoin Game Command // ViewJoin Game Command
void ViewJoinGameCommand::create() { void ViewJoinGameCommand::create() {
this->addTrigger("viewjoin"_jrs); this->addTrigger("viewjoin"sv);
this->addTrigger("vjoin"_jrs); this->addTrigger("vjoin"sv);
} }
void ViewJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void ViewJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -48,14 +48,14 @@ void ViewJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player
if (!setjoin.empty()) if (!setjoin.empty())
source->sendMessage(*player, string_printf("[%.*s] %.*s", player->name.size(), player->name.data(), setjoin.size(), setjoin.data())); source->sendMessage(*player, string_printf("[%.*s] %.*s", player->name.size(), player->name.data(), setjoin.size(), setjoin.data()));
else else
source->sendMessage(*player, "Error: No setjoin found."_jrs); source->sendMessage(*player, "Error: No setjoin found."sv);
} }
else else
source->sendMessage(*player, "Error: A setjoin message requires steam."_jrs); source->sendMessage(*player, "Error: A setjoin message requires steam."sv);
} }
std::string_view ViewJoinGameCommand::getHelp(std::string_view ) { std::string_view ViewJoinGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays your join message. Syntax: viewjoin"); static constexpr std::string_view defaultHelp = "Displays your join message. Syntax: viewjoin"sv;
return defaultHelp; return defaultHelp;
} }
@ -64,8 +64,8 @@ GAME_COMMAND_INIT(ViewJoinGameCommand)
// ShowJoin Game Command // ShowJoin Game Command
void ShowJoinGameCommand::create() { void ShowJoinGameCommand::create() {
this->addTrigger("showjoin"_jrs); this->addTrigger("showjoin"sv);
this->addTrigger("shjoin"_jrs); this->addTrigger("shjoin"sv);
} }
void ShowJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void ShowJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -75,14 +75,14 @@ void ShowJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player
if (!setjoin.empty()) if (!setjoin.empty())
source->sendMessage(string_printf("[%.*s] %.*s", player->name.size(), player->name.data(), setjoin.size(), setjoin.data())); source->sendMessage(string_printf("[%.*s] %.*s", player->name.size(), player->name.data(), setjoin.size(), setjoin.data()));
else else
source->sendMessage(*player, "Error: No setjoin found."_jrs); source->sendMessage(*player, "Error: No setjoin found."sv);
} }
else else
source->sendMessage(*player, "Error: A setjoin message requires steam."_jrs); source->sendMessage(*player, "Error: A setjoin message requires steam."sv);
} }
std::string_view ShowJoinGameCommand::getHelp(std::string_view ) { std::string_view ShowJoinGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Displays your join message. Syntax: showjoin"); static constexpr std::string_view defaultHelp = "Displays your join message. Syntax: showjoin"sv;
return defaultHelp; return defaultHelp;
} }
@ -92,10 +92,10 @@ GAME_COMMAND_INIT(ShowJoinGameCommand)
void DelJoinGameCommand::create() void DelJoinGameCommand::create()
{ {
this->addTrigger("deljoin"_jrs); this->addTrigger("deljoin"sv);
this->addTrigger("remjoin"_jrs); this->addTrigger("remjoin"sv);
this->addTrigger("djoin"_jrs); this->addTrigger("djoin"sv);
this->addTrigger("rjoin"_jrs); this->addTrigger("rjoin"sv);
} }
void DelJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view ) { void DelJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view ) {
@ -103,14 +103,14 @@ void DelJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
if (pluginInstance.setjoin_file.remove(player->uuid)) if (pluginInstance.setjoin_file.remove(player->uuid))
source->sendMessage(*player, string_printf("%.*s, your join message has been removed.", player->name.size(), player->name.data())); source->sendMessage(*player, string_printf("%.*s, your join message has been removed.", player->name.size(), player->name.data()));
else else
source->sendMessage(*player, "Error: Setjoin not found."_jrs); source->sendMessage(*player, "Error: Setjoin not found."sv);
} }
else else
source->sendMessage(*player, "Error: A setjoin message requires steam."_jrs); source->sendMessage(*player, "Error: A setjoin message requires steam."sv);
} }
std::string_view DelJoinGameCommand::getHelp(std::string_view ) { std::string_view DelJoinGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Removes your automatic join message. Syntax: deljoin"); static constexpr std::string_view defaultHelp = "Removes your automatic join message. Syntax: deljoin"sv;
return defaultHelp; return defaultHelp;
} }
@ -119,8 +119,8 @@ GAME_COMMAND_INIT(DelJoinGameCommand)
// SetJoin Game Command // SetJoin Game Command
void SetJoinGameCommand::create() { void SetJoinGameCommand::create() {
this->addTrigger("setjoin"_jrs); this->addTrigger("setjoin"sv);
this->addTrigger("sjoin"_jrs); this->addTrigger("sjoin"sv);
} }
void SetJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) { void SetJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, std::string_view parameters) {
@ -133,11 +133,11 @@ void SetJoinGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
} }
else DelJoinGameCommand_instance.trigger(source, player, parameters); else DelJoinGameCommand_instance.trigger(source, player, parameters);
} }
else source->sendMessage(*player, "Error: A setjoin message requires steam."_jrs); else source->sendMessage(*player, "Error: A setjoin message requires steam."sv);
} }
std::string_view SetJoinGameCommand::getHelp(std::string_view ) { std::string_view SetJoinGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sets an automatic join message. Syntax: setjoin [message]"); static constexpr std::string_view defaultHelp = "Sets an automatic join message. Syntax: setjoin [message]"sv;
return defaultHelp; return defaultHelp;
} }

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

@ -22,11 +22,11 @@
#include "RenX_PlayerInfo.h" #include "RenX_PlayerInfo.h"
#include "RenX_Warn.h" #include "RenX_Warn.h"
using namespace Jupiter::literals; using namespace std::literals;
bool RenX_WarnPlugin::initialize() { bool RenX_WarnPlugin::initialize() {
m_maxWarns = this->config.get<int>("MaxWarns"_jrs, 3); m_maxWarns = this->config.get<int>("MaxWarns"sv, 3);
m_warnAction = this->config.get<int>("MaxAction"_jrs, -1); m_warnAction = this->config.get<int>("MaxAction"sv, -1);
return true; return true;
} }
@ -38,20 +38,20 @@ int RenX_WarnPlugin::OnRehash() {
// Plugin instantiation and entry point. // Plugin instantiation and entry point.
RenX_WarnPlugin pluginInstance; RenX_WarnPlugin pluginInstance;
STRING_LITERAL_AS_NAMED_REFERENCE(WARNS_KEY, "w"); static constexpr std::string_view WARNS_KEY = "w"sv;
// Warn IRC Command // Warn IRC Command
void WarnIRCCommand::create() { void WarnIRCCommand::create() {
this->addTrigger("warn"_jrs); this->addTrigger("warn"sv);
this->addTrigger("w"_jrs); this->addTrigger("w"sv);
this->setAccessLevel(2); this->setAccessLevel(2);
} }
void WarnIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) { void WarnIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) {
auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV); auto parameters_split = jessilib::word_split_once_view(std::string_view{parameters}, WHITESPACE_SV);
if (parameters_split.second.empty()) { if (parameters_split.second.empty()) {
source->sendNotice(nick, "Error: Too Few Parameters. Syntax: Warn <Player> <Reason>"_jrs); source->sendNotice(nick, "Error: Too Few Parameters. Syntax: Warn <Player> <Reason>"sv);
return; return;
} }
@ -62,7 +62,7 @@ void WarnIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::str
const auto& servers = RenX::getCore()->getServers(chan->getType()); const auto& servers = RenX::getCore()->getServers(chan->getType());
if (servers.empty()) { if (servers.empty()) {
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
return; return;
} }
@ -82,7 +82,7 @@ void WarnIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::str
source->sendNotice(nick, string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).", player->name.size(), player->name.data(), warns)); source->sendNotice(nick, string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).", player->name.size(), player->name.data(), warns));
break; break;
default: default:
server->banPlayer(*player, "Jupiter Bot/RenX.Warn"_jrs, string_printf("Warning limit reached (%d warnings)", warns), std::chrono::seconds(pluginInstance.m_warnAction)); server->banPlayer(*player, "Jupiter Bot/RenX.Warn"sv, string_printf("Warning limit reached (%d warnings)", warns), std::chrono::seconds(pluginInstance.m_warnAction));
source->sendNotice(nick, string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).", player->name.size(), player->name.data(), reason.size(), reason.data(), warns)); source->sendNotice(nick, string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).", player->name.size(), player->name.data(), reason.size(), reason.data(), warns));
break; break;
} }
@ -99,7 +99,7 @@ void WarnIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::str
} }
std::string_view WarnIRCCommand::getHelp(std::string_view ) { std::string_view WarnIRCCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Warns a player. Syntax: Warn <Player> <Reason>"); static constexpr std::string_view defaultHelp = "Warns a player. Syntax: Warn <Player> <Reason>"sv;
return defaultHelp; return defaultHelp;
} }
@ -108,9 +108,9 @@ IRC_COMMAND_INIT(WarnIRCCommand)
// Pardon IRC Command // Pardon IRC Command
void PardonIRCCommand::create() { void PardonIRCCommand::create() {
this->addTrigger("pardon"_jrs); this->addTrigger("pardon"sv);
this->addTrigger("forgive"_jrs); this->addTrigger("forgive"sv);
this->addTrigger("unwarn"_jrs); this->addTrigger("unwarn"sv);
this->setAccessLevel(2); this->setAccessLevel(2);
} }
@ -127,7 +127,7 @@ void PardonIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::s
const auto& servers = RenX::getCore()->getServers(chan->getType()); const auto& servers = RenX::getCore()->getServers(chan->getType());
if (servers.empty()) { if (servers.empty()) {
source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."_jrs); source->sendMessage(channel, "Error: Channel not attached to any connected Renegade X servers."sv);
return; return;
} }
@ -146,7 +146,7 @@ void PardonIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::s
} }
std::string_view PardonIRCCommand::getHelp(std::string_view ) { std::string_view PardonIRCCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Resets a player's warnings. Syntax: Pardon <Player>"); static constexpr std::string_view defaultHelp = "Resets a player's warnings. Syntax: Pardon <Player>"sv;
return defaultHelp; return defaultHelp;
} }
@ -155,8 +155,8 @@ IRC_COMMAND_INIT(PardonIRCCommand)
// Warn Game Command // Warn Game Command
void WarnGameCommand::create() { void WarnGameCommand::create() {
this->addTrigger("warn"_jrs); this->addTrigger("warn"sv);
this->addTrigger("w"_jrs); this->addTrigger("w"sv);
this->setAccessLevel(1); this->setAccessLevel(1);
} }
@ -177,7 +177,7 @@ void WarnGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
source->sendMessage(*player, string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).", target->name.size(), target->name.data(), warns)); source->sendMessage(*player, string_printf("%.*s has been kicked from the server for exceeding the warning limit (%d warnings).", target->name.size(), target->name.data(), warns));
break; break;
default: default:
source->banPlayer(*target, "Jupiter Bot/RenX.Warn"_jrs, string_printf("Warning limit reached (%d warnings)", warns), std::chrono::seconds(pluginInstance.m_warnAction)); source->banPlayer(*target, "Jupiter Bot/RenX.Warn"sv, string_printf("Warning limit reached (%d warnings)", warns), std::chrono::seconds(pluginInstance.m_warnAction));
source->sendMessage(*player, string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).", target->name.size(), target->name.data(), warns)); source->sendMessage(*player, string_printf("%.*s has been banned from the server for exceeding the warning limit (%d warnings).", target->name.size(), target->name.data(), warns));
break; break;
} }
@ -190,11 +190,11 @@ void WarnGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, st
} }
} }
else else
source->sendMessage(*player, "Error: Too few parameters. Syntax: Warn <Player> <Reason>"_jrs); source->sendMessage(*player, "Error: Too few parameters. Syntax: Warn <Player> <Reason>"sv);
} }
std::string_view WarnGameCommand::getHelp(std::string_view ) { std::string_view WarnGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Warns a player. Syntax: Warn <Player> <Reason>"); static constexpr std::string_view defaultHelp = "Warns a player. Syntax: Warn <Player> <Reason>"sv;
return defaultHelp; return defaultHelp;
} }
@ -203,9 +203,9 @@ GAME_COMMAND_INIT(WarnGameCommand)
// Pardon Game Command // Pardon Game Command
void PardonGameCommand::create() { void PardonGameCommand::create() {
this->addTrigger("pardon"_jrs); this->addTrigger("pardon"sv);
this->addTrigger("forgive"_jrs); this->addTrigger("forgive"sv);
this->addTrigger("unwarn"_jrs); this->addTrigger("unwarn"sv);
this->setAccessLevel(1); this->setAccessLevel(1);
} }
@ -224,7 +224,7 @@ void PardonGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player,
} }
std::string_view PardonGameCommand::getHelp(std::string_view ) { std::string_view PardonGameCommand::getHelp(std::string_view ) {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Resets a player's warnings. Syntax: Pardon <Player>"); static constexpr std::string_view defaultHelp = "Resets a player's warnings. Syntax: Pardon <Player>"sv;
return defaultHelp; return defaultHelp;
} }

1
src/Plugins/RenX/RenX.Warn/RenX_Warn.h

@ -20,7 +20,6 @@
#define _RENX_WARN_H_HEADER #define _RENX_WARN_H_HEADER
#include "Jupiter/Plugin.h" #include "Jupiter/Plugin.h"
#include "Jupiter/Reference_String.h"
#include "IRC_Command.h" #include "IRC_Command.h"
#include "RenX_Plugin.h" #include "RenX_Plugin.h"
#include "RenX_GameCommand.h" #include "RenX_GameCommand.h"

60
src/Plugins/SetJoin/SetJoin.cpp

@ -17,19 +17,22 @@
*/ */
#include <cstring> #include <cstring>
#include "jessilib/unicode.hpp"
#include "Jupiter/Functions.h" #include "Jupiter/Functions.h"
#include "SetJoin.h" #include "SetJoin.h"
#include "IRC_Bot.h" #include "IRC_Bot.h"
using namespace Jupiter::literals; using namespace std::literals;
void SetJoinPlugin::OnJoin(Jupiter::IRC::Client *server, std::string_view chan, std::string_view nick) void SetJoinPlugin::OnJoin(Jupiter::IRC::Client *server, std::string_view chan, std::string_view nick) {
{
std::string_view setjoin = this->config[server->getConfigSection()].get(nick); std::string_view setjoin = this->config[server->getConfigSection()].get(nick);
if (setjoin.empty()) if (setjoin.empty()) {
server->sendNotice(nick, "No setjoin has been set for you. To set one, use the !setjoin command"_jrs); server->sendNotice(nick, "No setjoin has been set for you. To set one, use the !setjoin command"sv);
else return;
server->sendMessage(chan, string_printf(IRCBOLD IRCCOLOR "07[%.*s]" IRCCOLOR IRCBOLD ": %.*s", nick.size(), nick.data(), setjoin.size(), setjoin.data())); }
std::string join_message = jessilib::join<std::string>(IRCBOLD IRCCOLOR "07["sv, nick, "]" IRCCOLOR IRCBOLD ": "sv, setjoin);
server->sendMessage(chan, join_message);
} }
SetJoinPlugin pluginInstance; SetJoinPlugin pluginInstance;
@ -38,7 +41,7 @@ SetJoinPlugin pluginInstance;
void SetJoinIRCCommand::create() void SetJoinIRCCommand::create()
{ {
this->addTrigger("setJoin"_jrs); this->addTrigger("setJoin"sv);
} }
void SetJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) void SetJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters)
@ -47,14 +50,14 @@ void SetJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::
{ {
pluginInstance.setjoin_file[source->getConfigSection()].set(nick, static_cast<std::string>(parameters)); pluginInstance.setjoin_file[source->getConfigSection()].set(nick, static_cast<std::string>(parameters));
pluginInstance.setjoin_file.write(); pluginInstance.setjoin_file.write();
source->sendMessage(channel, "Your join message has been set."_jrs); source->sendMessage(channel, "Your join message has been set."sv);
} }
else source->sendMessage(channel, "Too few parameters! Syntax: setjoin <message>"_jrs); else source->sendMessage(channel, "Too few parameters! Syntax: setjoin <message>"sv);
} }
std::string_view SetJoinIRCCommand::getHelp(std::string_view ) std::string_view SetJoinIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Sets your join message. Syntax: setjoin <message>"); static constexpr std::string_view defaultHelp = "Sets your join message. Syntax: setjoin <message>"sv;
return defaultHelp; return defaultHelp;
} }
@ -64,26 +67,29 @@ IRC_COMMAND_INIT(SetJoinIRCCommand)
void ViewJoinIRCCommand::create() void ViewJoinIRCCommand::create()
{ {
this->addTrigger("viewJoin"_jrs); this->addTrigger("viewJoin"sv);
this->addTrigger("vJoin"_jrs); this->addTrigger("vJoin"sv);
} }
void ViewJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) void ViewJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) {
{
std::string_view target = parameters.empty() ? nick : parameters; std::string_view target = parameters.empty() ? nick : parameters;
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, string_printf("No setjoin has been set for \"%.*s\".", target.size(), source->sendMessage(channel, jessilib::join<std::string>("No setjoin has been set for \""sv, target, "\"."sv));
target.data())); }
else else {
source->sendMessage(channel, string_printf(IRCBOLD IRCCOLOR "07[%.*s]" IRCCOLOR IRCBOLD ": %.*s", target.size(), std::string join_message = IRCBOLD IRCCOLOR "07[";
target.data(), setjoin.size(), setjoin.data())); join_message += target;
join_message += "]" IRCCOLOR IRCBOLD ": ";
join_message += setjoin;
source->sendMessage(channel, join_message);
}
} }
std::string_view ViewJoinIRCCommand::getHelp(std::string_view ) std::string_view ViewJoinIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Views a user's join message. Syntax: viewjoin [user=you]"); static constexpr std::string_view defaultHelp = "Views a user's join message. Syntax: viewjoin [user=you]"sv;
return defaultHelp; return defaultHelp;
} }
@ -93,20 +99,20 @@ IRC_COMMAND_INIT(ViewJoinIRCCommand)
void DelJoinIRCCommand::create() void DelJoinIRCCommand::create()
{ {
this->addTrigger("delJoin"_jrs); this->addTrigger("delJoin"sv);
this->addTrigger("dJoin"_jrs); this->addTrigger("dJoin"sv);
} }
void DelJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters) void DelJoinIRCCommand::trigger(IRC_Bot *source, std::string_view channel, std::string_view nick, std::string_view parameters)
{ {
if (pluginInstance.setjoin_file[source->getConfigSection()].remove(nick)) if (pluginInstance.setjoin_file[source->getConfigSection()].remove(nick))
source->sendNotice(nick, "Your setjoin has been deleted successfully."_jrs); source->sendNotice(nick, "Your setjoin has been deleted successfully."sv);
else source->sendNotice(nick, "No setjoin was found to delete."_jrs); else source->sendNotice(nick, "No setjoin was found to delete."sv);
} }
std::string_view DelJoinIRCCommand::getHelp(std::string_view ) std::string_view DelJoinIRCCommand::getHelp(std::string_view )
{ {
static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Deletes your join message. Syntax: deljoin"); static constexpr std::string_view defaultHelp = "Deletes your join message. Syntax: deljoin"sv;
return defaultHelp; return defaultHelp;
} }

Loading…
Cancel
Save