diff --git a/src/Bot/include/IRC_Bot.h b/src/Bot/include/IRC_Bot.h index cd94cb7..f4d9540 100644 --- a/src/Bot/include/IRC_Bot.h +++ b/src/Bot/include/IRC_Bot.h @@ -61,7 +61,7 @@ public: * @param trigger Trigger of the command to remove * @return True if a command is removed, false otherwise. */ - bool freeCommand(const Jupiter::ReadableString &trigger); + bool freeCommand(std::string_view trigger); /** * @return Gets a command. @@ -69,7 +69,7 @@ public: * @param trigger Trigger of the command to find. * @return First command using the specified trigger, nullptr otherwise. */ - IRCCommand *getCommand(const Jupiter::ReadableString &trigger) const; + IRCCommand *getCommand(std::string_view trigger) const; /** * @brief Creates and returns a vector of IRC Commands with a specified access level. @@ -86,7 +86,7 @@ public: * @param cmds Commands to construct the string with. * @return A string containing the triggers of the commands in a space-deliminated list. */ - static Jupiter::StringL getTriggers(std::vector &cmds); + static std::string getTriggers(std::vector &cmds); /** * @brief Reloads some settings. @@ -117,7 +117,7 @@ protected: /** Private members for internal usage */ private: std::vector> m_commands; - Jupiter::StringS m_commandPrefix; + std::string m_commandPrefix; }; /** Re-enable warnings */ diff --git a/src/Bot/include/ServerManager.h b/src/Bot/include/ServerManager.h index 6605434..845a2d6 100644 --- a/src/Bot/include/ServerManager.h +++ b/src/Bot/include/ServerManager.h @@ -109,7 +109,7 @@ public: * * @return True if a socket connection was successfully established, false otherwise. */ - bool addServer(const Jupiter::ReadableString &serverConfig); + bool addServer(std::string_view serverConfig); /** * @brief Removes a server from the manager, based on its index. diff --git a/src/Bot/src/IRC_Bot.cpp b/src/Bot/src/IRC_Bot.cpp index cfe0a56..c39d58c 100644 --- a/src/Bot/src/IRC_Bot.cpp +++ b/src/Bot/src/IRC_Bot.cpp @@ -19,6 +19,7 @@ #include #include #include +#include "jessilib/unicode.hpp" #include "Jupiter/Config.h" #include "Jupiter/Plugin.h" #include "Jupiter/Functions.h" @@ -26,6 +27,7 @@ #include "IRC_Command.h" using namespace Jupiter::literals; +using namespace std::literals; IRC_Bot::IRC_Bot(Jupiter::Config *in_primary_section, Jupiter::Config *in_secondary_section) : Client(in_primary_section, in_secondary_section) { @@ -53,7 +55,7 @@ void IRC_Bot::addCommand(IRCCommand *in_command) { setCommandAccessLevels(in_command); } -bool IRC_Bot::freeCommand(const Jupiter::ReadableString &trigger) { +bool IRC_Bot::freeCommand(std::string_view trigger) { for (auto itr = m_commands.begin(); itr != m_commands.end(); ++itr) { if ((*itr)->matches(trigger)) { m_commands.erase(itr); @@ -64,7 +66,7 @@ bool IRC_Bot::freeCommand(const Jupiter::ReadableString &trigger) { return false; } -IRCCommand* IRC_Bot::getCommand(const Jupiter::ReadableString &trigger) const { +IRCCommand* IRC_Bot::getCommand(std::string_view trigger) const { for (const auto& command : m_commands) { if (command->matches(trigger)) { return command.get(); @@ -86,8 +88,8 @@ std::vector IRC_Bot::getAccessCommands(Jupiter::IRC::Client::Channe } // TODO: This isn't really needed on here -Jupiter::StringL IRC_Bot::getTriggers(std::vector &commands) { - Jupiter::StringL result; +std::string IRC_Bot::getTriggers(std::vector &commands) { + std::string result; for (const auto& command : commands) { result += command->getTrigger(); result += ' '; @@ -116,33 +118,33 @@ void IRC_Bot::setCommandAccessLevels(IRCCommand *in_command) { if (tmp_index != Jupiter::INVALID_INDEX) { // non-default access assignment - tmp_key.set(entry.first.ptr(), tmp_index); + tmp_key.set(entry.first.data(), tmp_index); tmp_sub_key = entry.first; tmp_sub_key.shiftRight(tmp_index + 1); - if (tmp_sub_key.findi("Type."_jrs) == 0) { + if (jessilib::starts_withi(tmp_sub_key, "Type."sv)) { tmp_sub_key.shiftRight(5); // shift beyond "Type." command = this->getCommand(tmp_key); if (command != nullptr && (in_command == nullptr || in_command == command)) { - command->setAccessLevel(tmp_sub_key.asInt(), entry.second.asInt()); + command->setAccessLevel(tmp_sub_key.asInt(), Jupiter::ReferenceString{entry.second}.asInt()); } } - else if (tmp_sub_key.findi("Channel."_jrs) == 0) { + else if (jessilib::starts_withi(tmp_sub_key, "Channel."sv)) { tmp_sub_key.shiftRight(8); // shift beyond "Channel." // Assign access level to command (if command exists) command = this->getCommand(tmp_key); if (command != nullptr && (in_command == nullptr || in_command == command)) - command->setAccessLevel(tmp_sub_key, entry.second.asInt()); + command->setAccessLevel(tmp_sub_key, Jupiter::ReferenceString{entry.second}.asInt()); } } else { // Assign access level to command (if command exists) command = this->getCommand(entry.first); if (command != nullptr && (in_command == nullptr || in_command == command)) - command->setAccessLevel(entry.second.asInt()); + command->setAccessLevel(Jupiter::ReferenceString{entry.second}.asInt()); } }; }; diff --git a/src/Bot/src/Main.cpp b/src/Bot/src/Main.cpp index 7215ca0..b2262ef 100644 --- a/src/Bot/src/Main.cpp +++ b/src/Bot/src/Main.cpp @@ -189,7 +189,7 @@ int main(int argc, const char **args) { configFileName = args[i]; else if ("-pluginsdir"_jrs.equalsi(args[i]) && ++i < argc) plugins_directory = args[i]; - else if ("-configsdir"_jrs.equals(args[i]) && ++i < argc) + else if ("-configsdir"_jrs.equalsi(args[i]) && ++i < argc) configs_directory = args[i]; else if ("-configFormat"_jrs.equalsi(args[i]) && ++i < argc) puts("Feature not yet supported!"); diff --git a/src/Bot/src/ServerManager.cpp b/src/Bot/src/ServerManager.cpp index 5ec0702..7dfe594 100644 --- a/src/Bot/src/ServerManager.cpp +++ b/src/Bot/src/ServerManager.cpp @@ -102,7 +102,7 @@ IRC_Bot *ServerManager::getServer(size_t serverIndex) { return nullptr; } -bool ServerManager::addServer(const Jupiter::ReadableString &serverConfig) { +bool ServerManager::addServer(std::string_view serverConfig) { auto server = std::make_unique(m_config->getSection(serverConfig), m_config->getSection("Default"_jrs)); if (server->connect()) { m_servers.push_back(std::move(server)); diff --git a/src/Jupiter b/src/Jupiter index 5715a04..90165ee 160000 --- a/src/Jupiter +++ b/src/Jupiter @@ -1 +1 @@ -Subproject commit 5715a041d2791d36128cc840c81626030091157b +Subproject commit 90165eead3d3bdbaf7403eb947a41b4a7513b161 diff --git a/src/Plugins/CoreCommands/CoreCommands.cpp b/src/Plugins/CoreCommands/CoreCommands.cpp index 6a5ef4f..40a6812 100644 --- a/src/Plugins/CoreCommands/CoreCommands.cpp +++ b/src/Plugins/CoreCommands/CoreCommands.cpp @@ -31,13 +31,13 @@ HelpConsoleCommand::HelpConsoleCommand() { void HelpConsoleCommand::trigger(const Jupiter::ReadableString ¶meters) { if (parameters.isEmpty()) { - fputs("Supported commands:", stdout); + std::cout << "Supported commands:"; for (const auto& command : consoleCommands) { - fputc(' ', stdout); - command->getTrigger().print(stdout); + std::cout << ' ' << command->getTrigger(); } - printf(ENDL "%s - %s" ENDL, Jupiter::version, Jupiter::copyright); - puts("For command-specific help, use: help "); + std::cout << std::endl + << Jupiter::version << " - " << Jupiter::copyright << std::endl + << "For command-specific help, use: help " << std::endl; return; } @@ -69,7 +69,7 @@ void HelpIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &in_ if (channel != nullptr) { int access = source->getAccessLevel(*channel, nick); - if (parameters == nullptr) + if (parameters.isEmpty()) { for (int i = 0; i <= access; i++) { diff --git a/src/Plugins/FunCommands/FunCommands.cpp b/src/Plugins/FunCommands/FunCommands.cpp index 4623f60..a950161 100644 --- a/src/Plugins/FunCommands/FunCommands.cpp +++ b/src/Plugins/FunCommands/FunCommands.cpp @@ -23,6 +23,7 @@ #include "IRC_Bot.h" using namespace Jupiter::literals; +using namespace std::literals; // 8ball @@ -78,7 +79,7 @@ void EightBallIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString msg.set("Fuck your lineage."_jrs); break; case 13: - if (channel.equals("#Jail"_jrs)) + if (channel == "#Jail"sv) msg.set("Ask me those kind of questions in #Politics"_jrs); else msg.set("Ask me those kind of questions in #Jail"_jrs); diff --git a/src/Plugins/IRC.Core/IRC_Core.cpp b/src/Plugins/IRC.Core/IRC_Core.cpp index ec57428..9d955da 100644 --- a/src/Plugins/IRC.Core/IRC_Core.cpp +++ b/src/Plugins/IRC.Core/IRC_Core.cpp @@ -16,6 +16,7 @@ * Written by Jessica James */ +#include "jessilib/word_split.hpp" #include "Jupiter/GenericCommand.h" #include "ServerManager.h" #include "IRC_Command.h" @@ -32,13 +33,13 @@ IRCCorePlugin::~IRCCorePlugin() { bool IRCCorePlugin::initialize() { // TODO: initialize() isn't bringing in generic commands from already-loaded plugins - const Jupiter::ReadableString &serverList = this->config.get("Servers"_jrs); - if (serverList != nullptr) { + std::string_view serverList = this->config.get("Servers"_jrs); + if (!serverList.empty()) { serverManager->setConfig(this->config); - unsigned int server_count = serverList.wordCount(WHITESPACE); - for (unsigned int index = 0; index != server_count; ++index) { - serverManager->addServer(Jupiter::ReferenceString::getWord(serverList, index, WHITESPACE)); + auto server_entries = jessilib::word_split(serverList, WHITESPACE_SV); + for (const auto& entry : server_entries) { + serverManager->addServer(entry); } } diff --git a/src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp b/src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp index ed1c28e..dd98162 100644 --- a/src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp +++ b/src/Plugins/RenX/RenX.Commands/RenX_Commands.cpp @@ -20,6 +20,7 @@ #include #include "Jupiter/Functions.h" #include "jessilib/duration.hpp" +#include "jessilib/unicode.hpp" #include "IRC_Bot.h" #include "RenX_Commands.h" #include "RenX_Core.h" @@ -33,11 +34,12 @@ using namespace Jupiter::literals; using namespace jessilib::literals; +using namespace std::literals; const Jupiter::ReferenceString RxCommandsSection = "RenX.Commands"_jrs; bool togglePhasing(RenX::Server *server, bool newState) { - server->varData[RxCommandsSection].set("phasing"_jrs, newState ? "true"_jrs : "false"_jrs); + server->varData[RxCommandsSection].set("phasing"sv, newState ? "true"s : "false"s); return newState; } @@ -660,9 +662,9 @@ void PlayerTableIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableStri auto output_player = [server, type, source, &channel, maxNickLen, idColLen, scoreColLen, creditColLen](RenX::PlayerInfo *player, const Jupiter::ReadableString &color) { if (server->isAdminLogChanType(type)) - source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCNORMAL " %.*s", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.ptr(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits, player->ip.size(), player->ip.ptr())); + source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCNORMAL " %.*s", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits, player->ip.size(), player->ip.ptr())); else - source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.ptr(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits)); + source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "%.*s%*.*s" IRCCOLOR " " IRCCOLOR "03|" IRCCOLOR " %*d " IRCCOLOR "03|" IRCCOLOR " %*.0f " IRCCOLOR "03|" IRCCOLOR " %*.0f", color.size(), color.ptr(), maxNickLen, player->name.size(), player->name.data(), idColLen, player->id, scoreColLen, player->score, creditColLen, player->credits)); }; for (auto node = gPlayers.begin(); node != gPlayers.end(); ++node) @@ -723,7 +725,7 @@ void PlayerInfoIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableStrin server = RenX::getCore()->getServer(index++); if (server->isLogChanType(type) && server->players.size() != 0) { for (auto node = server->players.begin(); node != server->players.end(); ++node) { - if (node->name.findi(parameters) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(node->name, std::string_view{parameters}) != std::string::npos) { msg = player_info_format; RenX::processTags(msg, server, &*node); source->sendMessage(channel, msg); @@ -895,7 +897,7 @@ void RotationIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString if (server->isLogChanType(type)) { list = STRING_LITERAL_AS_REFERENCE(IRCCOLOR "03[Rotation]" IRCNORMAL); for (const auto& map : server->maps) { - if (server->getMap().name.equalsi(map.name)) { + if (jessilib::equalsi(server->getMap().name, map.name)) { list += STRING_LITERAL_AS_REFERENCE(" " IRCBOLD "[") + map.name + STRING_LITERAL_AS_REFERENCE("]" IRCBOLD); } else { @@ -981,7 +983,7 @@ void GameInfoIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString match = true; const RenX::Map &map = server->getMap(); std::chrono::seconds time = std::chrono::duration_cast(server->getGameTime()); - source->sendMessage(channel, IRCCOLOR "03[GameInfo] "_jrs IRCCOLOR + server->getGameVersion()); + source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "03[GameInfo] " IRCCOLOR "%.*s", server->getGameVersion().size(), server->getGameVersion().data())); source->sendMessage(channel, IRCCOLOR "03[GameInfo] " IRCCOLOR "10Map" IRCCOLOR ": "_jrs + map.name + "; " IRCCOLOR "10GUID" IRCCOLOR ": "_jrs + RenX::formatGUID(map)); source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "03[GameInfo] " IRCCOLOR "10Elapsed time" IRCCOLOR ": %.2lld:%.2lld:%.2lld", time.count() / 3600, (time.count() % 3600) / 60, time.count() % 60)); source->sendMessage(channel, Jupiter::StringS::Format(IRCCOLOR "03[GameInfo] " IRCCOLOR "There are " IRCCOLOR "10%d" IRCCOLOR " players online.", server->players.size())); @@ -1024,7 +1026,7 @@ void SteamIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &ch { for (auto node = server->players.begin(); node != server->players.end(); ++node) { - if (node->name.findi(parameters) != Jupiter::INVALID_INDEX) + if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos) { Jupiter::String playerName = RenX::getFormattedPlayerName(*node); msg.format(IRCCOLOR "03[Steam] " IRCCOLOR "%.*s (ID: %d) ", playerName.size(), playerName.ptr(), node->id); @@ -1110,7 +1112,7 @@ void KillDeathRatioIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableS { for (auto node = server->players.begin(); node != server->players.end(); ++node) { - if (node->name.findi(parameters) != Jupiter::INVALID_INDEX) + if (jessilib::findi(node->name, Jupiter::ReferenceString{parameters}) != std::string::npos) { Jupiter::String playerName = RenX::getFormattedPlayerName(*node); msg.format(IRCBOLD "%.*s" IRCBOLD IRCCOLOR ": Kills: %u - Deaths: %u - KDR: %.2f", playerName.size(), playerName.ptr(), node->kills, node->deaths, static_cast(node->kills) / (node->deaths == 0 ? 1.0f : static_cast(node->deaths))); @@ -1431,7 +1433,7 @@ void SetMapIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &c Jupiter::IRC::Client::Channel *chan = source->getChannel(channel); if (chan != nullptr) { - const Jupiter::ReadableString *map_name = nullptr; + std::string_view map_name; int type = chan->getType(); for (unsigned int i = 0; i != RenX::getCore()->getServerCount(); i++) { @@ -1439,9 +1441,9 @@ void SetMapIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &c if (server->isLogChanType(type)) { map_name = server->getMapName(parameters); - if (map_name == nullptr) + if (map_name.empty()) source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Map not in rotation.")); - else if (server->setMap(*map_name) == false) + else if (server->setMap(map_name) == false) source->sendMessage(channel, STRING_LITERAL_AS_REFERENCE("Error: Transmission error.")); } } @@ -1903,15 +1905,15 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString case 2: // IP return entry->ip == params.asUnsignedInt(); case 3: // HWID - return entry->hwid.equals(params); + return entry->hwid == std::string_view{params}; case 4: // RDNS - return entry->rdns.equals(params); + return entry->rdns == std::string_view{params}; case 5: // STEAM return entry->steamid == params.asUnsignedLongLong(); case 6: // NAME return entry->name.equalsi(params); case 7: // BANNER - return entry->banner.equalsi(params); + return jessilib::equalsi(entry->banner, params); case 8: // ACTIVE return params.asBool() == entry->is_active(); } @@ -1919,7 +1921,7 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString unsigned int type; Jupiter::ReferenceString type_str = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); - if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("all")) || type_str.equals('*')) + if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("all")) || type_str == '*') type = 1; else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("ip"))) type = 2; @@ -1986,14 +1988,14 @@ void BanSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString out.format("ID: %lu (" IRCCOLOR "%sactive" IRCCOLOR "); Added: %s; Expires: %s; IP: %.*s/%u; HWID: %.*s; Steam: %llu; Types:%.*s Name: %.*s; Banner: %.*s", i, entry->is_active() ? "12" : "04in", dateStr, expireStr, ip_str.size(), ip_str.ptr(), entry->prefix_length, entry->hwid.size(), entry->hwid.ptr(), entry->steamid, - types.size(), types.ptr(), entry->name.size(), entry->name.ptr(), entry->banner.size(), entry->banner.ptr()); + types.size(), types.ptr(), entry->name.size(), entry->name.ptr(), entry->banner.size(), entry->banner.data()); if (entry->rdns.isNotEmpty()) { out.concat("; RDNS: "_jrs); out.concat(entry->rdns); } - if (entry->reason.isNotEmpty()) + if (!entry->reason.empty()) { out.concat("; Reason: "_jrs); out.concat(entry->reason); @@ -2492,7 +2494,7 @@ void ExemptionSearchIRCCommand::trigger(IRC_Bot *source, const Jupiter::Readable unsigned int type; Jupiter::ReferenceString type_str = Jupiter::ReferenceString::getWord(parameters, 0, WHITESPACE); - if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("all")) || type_str.equals('*')) + if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("all")) || type_str == '*') type = 1; else if (type_str.equalsi(STRING_LITERAL_AS_REFERENCE("ip"))) type = 2; @@ -3043,7 +3045,7 @@ void RefundIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableString &c if (server->giveCredits(*player, credits)) { msg.format("You have been refunded %.0f credits by %.*s.", credits, nick.size(), nick.ptr()); server->sendMessage(*player, msg); - msg.format("%.*s has been refunded %.0f credits.", player->name.size(), player->name.ptr(), credits); + msg.format("%.*s has been refunded %.0f credits.", player->name.size(), player->name.data(), credits); } else { msg.set("Error: Server does not support refunds."); @@ -3097,7 +3099,7 @@ void TeamChangeIRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableStrin { for (auto node = server->players.begin(); node != server->players.end(); ++node) { - if (node->name.findi(playerName) != Jupiter::INVALID_INDEX) + if (jessilib::findi(node->name, playerName) != std::string::npos) { playerFound = true; if (server->changeTeam(*node) == false) @@ -3150,7 +3152,7 @@ void TeamChange2IRCCommand::trigger(IRC_Bot *source, const Jupiter::ReadableStri { for (auto node = server->players.begin(); node != server->players.end(); ++node) { - if (node->name.findi(playerName) != Jupiter::INVALID_INDEX) + if (jessilib::findi(node->name, playerName) != std::string::npos) { playerFound = true; if (server->changeTeam(*node, false) == false) @@ -3351,7 +3353,7 @@ void HelpGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, co unsigned int cmdCount = 0; auto getAccessCommands = [&](int accessLevel) { - Jupiter::String list; + std::string list; unsigned int i = 0; while (i != source->getCommandCount()) { @@ -3359,7 +3361,8 @@ void HelpGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, co if (cmd->getAccessLevel() == accessLevel) { cmdCount++; - list.format("Access level %d commands: %.*s", accessLevel, cmd->getTrigger().size(), cmd->getTrigger().ptr()); + list = "Access level "s + std::to_string(accessLevel) + " commands: "s; + list += cmd->getTrigger(); break; } } @@ -3381,7 +3384,7 @@ void HelpGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, co for (int i = 0; i <= player->access; i++) { auto msg = getAccessCommands(i); - if (msg.isNotEmpty()) + if (!msg.empty()) source->sendMessage(*player, getAccessCommands(i)); } if (cmdCount == 0) @@ -3435,7 +3438,7 @@ void ModsGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *, const Ju msg += "No "_jrs + staff_word + "s are in-game"_jrs; RenX::GameCommand *cmd = source->getCommand(STRING_LITERAL_AS_REFERENCE("modrequest")); if (cmd != nullptr) - msg.aformat("; please use \"%.*s%.*s\" if you require assistance.", source->getCommandPrefix().size(), source->getCommandPrefix().ptr(), cmd->getTrigger().size(), cmd->getTrigger().ptr()); + msg.aformat("; please use \"%.*s%.*s\" if you require assistance.", source->getCommandPrefix().size(), source->getCommandPrefix().data(), cmd->getTrigger().size(), cmd->getTrigger().data()); else msg += '.'; } source->sendMessage(msg); @@ -3498,7 +3501,7 @@ void ModRequestGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *play for (auto& user : channel.getUsers()) { if (channel.getUserPrefix(*user.second) != 0 // If the user has a prefix... - && !user.second->getNickname().equals(server.getNickname())) { // And the user isn't this bot... + && user.second->getNickname() != server.getNickname()) { // And the user isn't this bot... // Alert the user server.sendMessage(user.second->getNickname(), user_message); ++total_user_alerts; diff --git a/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp b/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp index a849ff5..2780cff 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.cpp @@ -157,7 +157,7 @@ void RenX::BanDatabase::write(Entry* entry, FILE *file) { fgetpos(file, std::addressof(m_eof)); } -void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo &player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, std::chrono::seconds length, uint16_t flags) { +void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo &player, std::string_view banner, std::string_view reason, std::chrono::seconds length, uint16_t flags) { std::unique_ptr entry = std::make_unique(); if (flags != 0) { entry->set_active(); @@ -190,7 +190,7 @@ void RenX::BanDatabase::add(RenX::Server *server, const RenX::PlayerInfo &player write(m_entries.back().get()); } -void RenX::BanDatabase::add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &hwid, const Jupiter::ReadableString &rdns, const Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, std::chrono::seconds length, uint16_t flags) { +void RenX::BanDatabase::add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &hwid, const Jupiter::ReadableString &rdns, std::string_view banner, std::string_view reason, std::chrono::seconds length, uint16_t flags) { std::unique_ptr entry = std::make_unique(); entry->set_active(); entry->flags |= flags; diff --git a/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h b/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h index 7e26616..03dde0c 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h +++ b/src/Plugins/RenX/RenX.Core/RenX_BanDatabase.h @@ -90,8 +90,8 @@ namespace RenX Jupiter::StringS hwid; /** Hardware ID of the banned player */ Jupiter::StringS rdns /** RDNS of the banned player */; Jupiter::StringS name /** Name of the banned player */; - Jupiter::StringS banner /** Name of the user who initiated the ban */; - Jupiter::StringS reason /** Reason the player was banned */; + std::string banner /** Name of the user who initiated the ban */; + std::string reason /** Reason the player was banned */; VarDataTableType varData; /** Variable entry data */ static const uint16_t FLAG_ACTIVE = 0x8000U; @@ -144,7 +144,7 @@ namespace RenX * @param player Data of the player to be banned * @param length Duration of the ban */ - void add(RenX::Server *server, const RenX::PlayerInfo &player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, std::chrono::seconds length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); + void add(RenX::Server *server, const RenX::PlayerInfo &player, std::string_view banner, std::string_view reason, std::chrono::seconds length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); /** * @brief Adds a ban entry for a set of player information and immediately writes it to the database. @@ -158,7 +158,7 @@ namespace RenX * @param reason Reason the player is getting banned * @param length Duration of the ban */ - void add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &hwid, const Jupiter::ReadableString &rdns, const Jupiter::ReadableString &banner, Jupiter::ReadableString &reason, std::chrono::seconds length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); + void add(const Jupiter::ReadableString &name, uint32_t ip, uint8_t prefix_length, uint64_t steamid, const Jupiter::ReadableString &hwid, const Jupiter::ReadableString &rdns, std::string_view banner, std::string_view reason, std::chrono::seconds length, uint16_t flags = RenX::BanDatabase::Entry::FLAG_TYPE_GAME); /** * @brief Upgrades the ban database to the current write_version. diff --git a/src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h b/src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h index 3e825bf..a8ff07c 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h +++ b/src/Plugins/RenX/RenX.Core/RenX_BuildingInfo.h @@ -42,7 +42,7 @@ namespace RenX */ struct RENX_API BuildingInfo { - Jupiter::StringS name; + std::string name; TeamType team = TeamType::Other; int health = 0; int max_health = 0; diff --git a/src/Plugins/RenX/RenX.Core/RenX_Core.cpp b/src/Plugins/RenX/RenX.Core/RenX_Core.cpp index 98d4f32..5763e73 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Core.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_Core.cpp @@ -17,6 +17,7 @@ */ #include +#include "jessilib/word_split.hpp" #include "Jupiter/Functions.h" #include "IRC_Bot.h" #include "RenX_Core.h" @@ -44,14 +45,12 @@ bool RenX::Core::initialize() { RenX::tags->initialize(); RenX::initTranslations(this->config); - const Jupiter::ReadableString &serverList = this->config.get("Servers"_jrs); + std::string_view serverList = this->config.get("Servers"_jrs); m_commandsFile.read(this->config.get("CommandsFile"_jrs, "RenXGameCommands.ini"_jrs)); - unsigned int wc = serverList.wordCount(WHITESPACE); - - std::unique_ptr server; - for (unsigned int i = 0; i != wc; i++) { - server = std::make_unique(Jupiter::ReferenceString::getWord(serverList, i, WHITESPACE)); + auto server_entries = jessilib::word_split_view(serverList, WHITESPACE_SV); + for (const auto& entry : server_entries) { + auto server = std::make_unique(entry); if (server->connect() == false) { fprintf(stderr, "[RenX] ERROR: Failed to connect to %s on port %u. Error code: %d" ENDL, server->getHostname().c_str(), server->getPort(), Jupiter::Socket::getLastError()); diff --git a/src/Plugins/RenX/RenX.Core/RenX_Functions.cpp b/src/Plugins/RenX/RenX.Core/RenX_Functions.cpp index 8d6f8ee..e63acb7 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Functions.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_Functions.cpp @@ -47,7 +47,7 @@ Jupiter::ReferenceString OtherLongName = "Unknown"; /** RenegadeX RCON protocol message deliminator */ const char RenX::DelimC = '\x02'; const char RenX::DelimC3 = '\xA0'; -const Jupiter::ReferenceString RenX::DevBotName = "DevBot"_jrs; +const std::string_view RenX::DevBotName = "DevBot"sv; /** WinType translations */ @@ -453,51 +453,51 @@ const Jupiter::ReferenceString &translateCharacter(Jupiter::ReferenceString &obj if (object.find(STRING_LITERAL_AS_REFERENCE("GDI_")) == 0) { object.shiftRight(4); - if (object.equals(STRING_LITERAL_AS_REFERENCE("Deadeye"))) return translated_GDI_Deadeye; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Engineer"))) return translated_GDI_Engineer; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Grenadier"))) return translated_GDI_Grenadier; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Gunner"))) return translated_GDI_Gunner; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Havoc"))) return translated_GDI_Havoc; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Hotwire"))) return translated_GDI_Hotwire; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Marksman"))) return translated_GDI_Marksman; - if (object.equals(STRING_LITERAL_AS_REFERENCE("McFarland"))) return translated_GDI_McFarland; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Mobius"))) return translated_GDI_Mobius; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Officer"))) return translated_GDI_Officer; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Patch"))) return translated_GDI_Patch; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketSoldier"))) return translated_GDI_RocketSoldier; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Shotgunner"))) return translated_GDI_Shotgunner; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Soldier"))) return translated_GDI_Soldier; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Sydney"))) return translated_GDI_Sydney; + if (object == "Deadeye"sv) return translated_GDI_Deadeye; + if (object == "Engineer"sv) return translated_GDI_Engineer; + if (object == "Grenadier"sv) return translated_GDI_Grenadier; + if (object == "Gunner"sv) return translated_GDI_Gunner; + if (object == "Havoc"sv) return translated_GDI_Havoc; + if (object == "Hotwire"sv) return translated_GDI_Hotwire; + if (object == "Marksman"sv) return translated_GDI_Marksman; + if (object == "McFarland"sv) return translated_GDI_McFarland; + if (object == "Mobius"sv) return translated_GDI_Mobius; + if (object == "Officer"sv) return translated_GDI_Officer; + if (object == "Patch"sv) return translated_GDI_Patch; + if (object == "RocketSoldier"sv) return translated_GDI_RocketSoldier; + if (object == "Shotgunner"sv) return translated_GDI_Shotgunner; + if (object == "Soldier"sv) return translated_GDI_Soldier; + if (object == "Sydney"sv) return translated_GDI_Sydney; } else if (object.find(STRING_LITERAL_AS_REFERENCE("Nod_")) == 0) { object.shiftRight(4); - if (object.equals(STRING_LITERAL_AS_REFERENCE("BlackHandSniper"))) return translated_Nod_BlackHandSniper; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ChemicalTrooper"))) return translated_Nod_ChemicalTrooper; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Engineer"))) return translated_Nod_Engineer; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlameTrooper"))) return translated_Nod_FlameTrooper; - if (object.equals(STRING_LITERAL_AS_REFERENCE("LaserChainGunner"))) return translated_Nod_LaserChainGunner; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Marksman"))) return translated_Nod_Marksman; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Mendoza"))) return translated_Nod_Mendoza; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Officer"))) return translated_Nod_Officer; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Raveshaw"))) return translated_Nod_Raveshaw; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketSoldier"))) return translated_Nod_RocketSoldier; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Sakura"))) return translated_Nod_Sakura; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Shotgunner"))) return translated_Nod_Shotgunner; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Soldier"))) return translated_Nod_Soldier; - if (object.equals(STRING_LITERAL_AS_REFERENCE("StealthBlackHand"))) return translated_Nod_StealthBlackHand; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Technician"))) return translated_Nod_Technician; + if (object == "BlackHandSniper"sv) return translated_Nod_BlackHandSniper; + if (object == "ChemicalTrooper"sv) return translated_Nod_ChemicalTrooper; + if (object == "Engineer"sv) return translated_Nod_Engineer; + if (object == "FlameTrooper"sv) return translated_Nod_FlameTrooper; + if (object == "LaserChainGunner"sv) return translated_Nod_LaserChainGunner; + if (object == "Marksman"sv) return translated_Nod_Marksman; + if (object == "Mendoza"sv) return translated_Nod_Mendoza; + if (object == "Officer"sv) return translated_Nod_Officer; + if (object == "Raveshaw"sv) return translated_Nod_Raveshaw; + if (object == "RocketSoldier"sv) return translated_Nod_RocketSoldier; + if (object == "Sakura"sv) return translated_Nod_Sakura; + if (object == "Shotgunner"sv) return translated_Nod_Shotgunner; + if (object == "Soldier"sv) return translated_Nod_Soldier; + if (object == "StealthBlackHand"sv) return translated_Nod_StealthBlackHand; + if (object == "Technician"sv) return translated_Nod_Technician; } return object; } -const Jupiter::ReferenceString RenX::translateName(const Jupiter::ReadableString &obj) +std::string_view RenX::translateName(std::string_view obj) { - if (obj.isEmpty()) + if (obj.empty()) return Jupiter::ReferenceString::empty; - Jupiter::ReferenceString iniTranslation = RenX::getCore()->getConfig()["Name"_jrs].get(obj); + Jupiter::ReferenceString iniTranslation = RenX::getCore()->getConfig()["Name"_jrs].get(Jupiter::ReferenceString{obj}); if (iniTranslation.isNotEmpty()) return iniTranslation; @@ -516,71 +516,71 @@ const Jupiter::ReferenceString RenX::translateName(const Jupiter::ReadableString object.shiftRight(8); /** Nod Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Harvester_Nod"))) return translated_Vehicle_Harvester_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Buggy"))) return translated_Vehicle_Buggy; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Artillery"))) return translated_Vehicle_Artillery; - if (object.equals(STRING_LITERAL_AS_REFERENCE("APC_Nod"))) return translated_Vehicle_APC_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("LightTank"))) return translated_Vehicle_LightTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlameTank"))) return translated_Vehicle_FlameTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("StealthTank"))) return translated_Vehicle_StealthTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Chinook_Nod"))) return translated_Vehicle_Chinook_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Apache"))) return translated_Vehicle_Apache; - - if (object.equals(STRING_LITERAL_AS_REFERENCE("ReconBike"))) return translated_Vehicle_ReconBike; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TickTank"))) return translated_Vehicle_TickTank; + if (object == "Harvester_Nod"sv) return translated_Vehicle_Harvester_Nod; + if (object == "Buggy"sv) return translated_Vehicle_Buggy; + if (object == "Artillery"sv) return translated_Vehicle_Artillery; + if (object == "APC_Nod"sv) return translated_Vehicle_APC_Nod; + if (object == "LightTank"sv) return translated_Vehicle_LightTank; + if (object == "FlameTank"sv) return translated_Vehicle_FlameTank; + if (object == "StealthTank"sv) return translated_Vehicle_StealthTank; + if (object == "Chinook_Nod"sv) return translated_Vehicle_Chinook_Nod; + if (object == "Apache"sv) return translated_Vehicle_Apache; + + if (object == "ReconBike"sv) return translated_Vehicle_ReconBike; + if (object == "TickTank"sv) return translated_Vehicle_TickTank; /** GDI Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Harvester_GDI"))) return translated_Vehicle_Harvester_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Humvee"))) return translated_Vehicle_Humvee; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MRLS"))) return translated_Vehicle_MRLS; - if (object.equals(STRING_LITERAL_AS_REFERENCE("APC_GDI"))) return translated_Vehicle_APC_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MediumTank"))) return translated_Vehicle_MediumTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MammothTank"))) return translated_Vehicle_MammothTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Chinook_GDI"))) return translated_Vehicle_Chinook_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Orca"))) return translated_Vehicle_Orca; - - if (object.equals(STRING_LITERAL_AS_REFERENCE("HoverMRLS"))) return translated_Vehicle_HoverMRLS; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Titan"))) return translated_Vehicle_Titan; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Wolverine"))) return translated_Vehicle_Wolverine; + if (object == "Harvester_GDI"sv) return translated_Vehicle_Harvester_GDI; + if (object == "Humvee"sv) return translated_Vehicle_Humvee; + if (object == "MRLS"sv) return translated_Vehicle_MRLS; + if (object == "APC_GDI"sv) return translated_Vehicle_APC_GDI; + if (object == "MediumTank"sv) return translated_Vehicle_MediumTank; + if (object == "MammothTank"sv) return translated_Vehicle_MammothTank; + if (object == "Chinook_GDI"sv) return translated_Vehicle_Chinook_GDI; + if (object == "Orca"sv) return translated_Vehicle_Orca; + + if (object == "HoverMRLS"sv) return translated_Vehicle_HoverMRLS; + if (object == "Titan"sv) return translated_Vehicle_Titan; + if (object == "Wolverine"sv) return translated_Vehicle_Wolverine; /** Other Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("A10_DmgType_GattlingGun"))) return translated_Vehicle_A10_DmgType_GattlingGun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("A10_DmgType_Bomb"))) return translated_Vehicle_A10_DmgType_Bomb; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AC130_DmgType_HeavyCannon"))) return translated_Vehicle_AC130_DmgType_HeavyCannon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AC130_DmgType_AutoCannon"))) return translated_Vehicle_AC130_DmgType_AutoCannon; + if (object == "A10_DmgType_GattlingGun"sv) return translated_Vehicle_A10_DmgType_GattlingGun; + if (object == "A10_DmgType_Bomb"sv) return translated_Vehicle_A10_DmgType_Bomb; + if (object == "AC130_DmgType_HeavyCannon"sv) return translated_Vehicle_AC130_DmgType_HeavyCannon; + if (object == "AC130_DmgType_AutoCannon"sv) return translated_Vehicle_AC130_DmgType_AutoCannon; } else if (object.find(STRING_LITERAL_AS_REFERENCE("Weapon_")) == 0) { object.shiftRight(7); - if (object.equals(STRING_LITERAL_AS_REFERENCE("HeavyPistol"))) return translated_Weapon_HeavyPistol; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Carbine"))) return translated_Weapon_Carbine; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Airstrike_GDI"))) return translated_Weapon_Airstrike_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Airstrike_Nod"))) return translated_Weapon_Airstrike_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumFlechetteRifle"))) return translated_Weapon_TiberiumFlechetteRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumAutoRifle"))) return translated_Weapon_TiberiumAutoRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumAutoRifle_Blue"))) return translated_Weapon_TiberiumAutoRifle_Blue; - if (object.equals(STRING_LITERAL_AS_REFERENCE("EMPGrenade"))) return translated_Weapon_EMPGrenade; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SmokeGrenade"))) return translated_Weapon_SmokeGrenade; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TimedC4"))) return translated_Weapon_TimedC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RemoteC4"))) return translated_Weapon_RemoteC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ProxyC4"))) return translated_Weapon_ProxyC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ATMine"))) return translated_Weapon_ATMine; - if (object.equals(STRING_LITERAL_AS_REFERENCE("IonCannonBeacon"))) return translated_Weapon_IonCannonBeacon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("NukeBeacon"))) return translated_Weapon_NukeBeacon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedC4"))) return translated_Weapon_DeployedC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedTimedC4"))) return translated_Weapon_DeployedTimedC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedRemoteC4"))) return translated_Weapon_DeployedRemoteC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedProxyC4"))) return translated_Weapon_DeployedProxyC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedATMine"))) return translated_Weapon_DeployedATMine; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedIonCannonBeacon"))) return translated_Weapon_DeployedIonCannonBeacon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("DeployedNukeBeacon"))) return translated_Weapon_DeployedNukeBeacon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("CrateNuke"))) return translated_Weapon_CrateNuke; + if (object == "HeavyPistol"sv) return translated_Weapon_HeavyPistol; + if (object == "Carbine"sv) return translated_Weapon_Carbine; + if (object == "Airstrike_GDI"sv) return translated_Weapon_Airstrike_GDI; + if (object == "Airstrike_Nod"sv) return translated_Weapon_Airstrike_Nod; + if (object == "TiberiumFlechetteRifle"sv) return translated_Weapon_TiberiumFlechetteRifle; + if (object == "TiberiumAutoRifle"sv) return translated_Weapon_TiberiumAutoRifle; + if (object == "TiberiumAutoRifle_Blue"sv) return translated_Weapon_TiberiumAutoRifle_Blue; + if (object == "EMPGrenade"sv) return translated_Weapon_EMPGrenade; + if (object == "SmokeGrenade"sv) return translated_Weapon_SmokeGrenade; + if (object == "TimedC4"sv) return translated_Weapon_TimedC4; + if (object == "RemoteC4"sv) return translated_Weapon_RemoteC4; + if (object == "ProxyC4"sv) return translated_Weapon_ProxyC4; + if (object == "ATMine"sv) return translated_Weapon_ATMine; + if (object == "IonCannonBeacon"sv) return translated_Weapon_IonCannonBeacon; + if (object == "NukeBeacon"sv) return translated_Weapon_NukeBeacon; + if (object == "DeployedC4"sv) return translated_Weapon_DeployedC4; + if (object == "DeployedTimedC4"sv) return translated_Weapon_DeployedTimedC4; + if (object == "DeployedRemoteC4"sv) return translated_Weapon_DeployedRemoteC4; + if (object == "DeployedProxyC4"sv) return translated_Weapon_DeployedProxyC4; + if (object == "DeployedATMine"sv) return translated_Weapon_DeployedATMine; + if (object == "DeployedIonCannonBeacon"sv) return translated_Weapon_DeployedIonCannonBeacon; + if (object == "DeployedNukeBeacon"sv) return translated_Weapon_DeployedNukeBeacon; + if (object == "CrateNuke"sv) return translated_Weapon_CrateNuke; } else if (object.find(STRING_LITERAL_AS_REFERENCE("Projectile_")) == 0) { object.shiftRight(11); - if (object.equals(STRING_LITERAL_AS_REFERENCE("EMPGrenade"))) return translated_Projectile_EMPGrenade; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SmokeGrenade"))) return translated_Projectile_SmokeGrenade; + if (object == "EMPGrenade"sv) return translated_Projectile_EMPGrenade; + if (object == "SmokeGrenade"sv) return translated_Projectile_SmokeGrenade; } else if (object.find(STRING_LITERAL_AS_REFERENCE("InventoryManager_")) == 0) { @@ -597,196 +597,196 @@ const Jupiter::ReferenceString RenX::translateName(const Jupiter::ReadableString object.shiftRight(8); /** Non-weapon damage types */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Suicided"))) return translated_DmgType_Suicided; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Fell"))) return translated_DmgType_Fell; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Tiberium"))) return translated_DmgType_Tiberium; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumBleed"))) return translated_DmgType_TiberiumBleed; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumBleed_Blue"))) return translated_DmgType_TiberiumBleed_Blue; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RanOver"))) return translated_DmgType_RanOver; + if (object == "Suicided"sv) return translated_DmgType_Suicided; + if (object == "Fell"sv) return translated_DmgType_Fell; + if (object == "Tiberium"sv) return translated_DmgType_Tiberium; + if (object == "TiberiumBleed"sv) return translated_DmgType_TiberiumBleed; + if (object == "TiberiumBleed_Blue"sv) return translated_DmgType_TiberiumBleed_Blue; + if (object == "RanOver"sv) return translated_DmgType_RanOver; /** Infantry weapons */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Pistol"))) return translated_DmgType_Pistol; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SMG"))) return translated_DmgType_SMG; - if (object.equals(STRING_LITERAL_AS_REFERENCE("HeavyPistol"))) return translated_DmgType_HeavyPistol; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Carbine"))) return translated_DmgType_Carbine; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumFlechetteRifle"))) return translated_DmgType_TiberiumFlechetteRifle; // Not a rifle. - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumAutoRifle"))) return translated_DmgType_TiberiumAutoRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumAutoRifle_Blue"))) return translated_DmgType_TiberiumAutoRifle_Blue; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TiberiumAutoRifle_Flechette_Blue"))) return translated_DmgType_TiberiumAutoRifle_Flechette_Blue; - - if (object.equals(STRING_LITERAL_AS_REFERENCE("Grenade"))) return translated_DmgType_Grenade; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TimedC4"))) return translated_DmgType_TimedC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RemoteC4"))) return translated_DmgType_RemoteC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ProxyC4"))) return translated_DmgType_ProxyC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ATMine"))) return translated_DmgType_ATMine; - if (object.equals(STRING_LITERAL_AS_REFERENCE("EMPGrenade"))) return translated_DmgType_EMPGrenade; - if (object.equals(STRING_LITERAL_AS_REFERENCE("BurnC4"))) return translated_DmgType_BurnC4; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FireBleed"))) return translated_DmgType_FireBleed; // Caused by C4 or flame weapons - - if (object.equals(STRING_LITERAL_AS_REFERENCE("AutoRifle"))) return translated_DmgType_AutoRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Shotgun"))) return translated_DmgType_Shotgun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlameThrower"))) return translated_DmgType_FlameThrower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("GrenadeLauncher"))) return translated_DmgType_GrenadeLauncher; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MarksmanRifle"))) return translated_DmgType_MarksmanRifle; - - if (object.equals(STRING_LITERAL_AS_REFERENCE("ChainGun"))) return translated_DmgType_ChainGun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MissileLauncher"))) return translated_DmgType_MissileLauncher; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MissileLauncher_Alt"))) return translated_DmgType_MissileLauncher_Alt; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ChemicalThrower"))) return translated_DmgType_ChemicalThrower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("LaserRifle"))) return translated_DmgType_LaserRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("TacticalRifle"))) return translated_DmgType_TacticalRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketLauncher"))) return translated_DmgType_RocketLauncher; - if (object.equals(STRING_LITERAL_AS_REFERENCE("LaserChainGun"))) return translated_DmgType_LaserChainGun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlakCannon"))) return translated_DmgType_FlakCannon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlakCannon_Alt"))) return translated_DmgType_FlakCannon_Alt; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SniperRifle"))) return translated_DmgType_SniperRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RamjetRifle"))) return translated_DmgType_RamjetRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Railgun"))) return translated_DmgType_Railgun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("PersonalIonCannon"))) return translated_DmgType_PersonalIonCannon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("VoltRifle"))) return translated_DmgType_VoltRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("VoltRifle_Alt"))) return translated_DmgType_VoltRifle_Alt; - if (object.equals(STRING_LITERAL_AS_REFERENCE("VoltAutoRifle"))) return translated_DmgType_VoltAutoRifle; - if (object.equals(STRING_LITERAL_AS_REFERENCE("VoltAutoRifle_Alt"))) return translated_DmgType_VoltAutoRifle_Alt; + if (object == "Pistol"sv) return translated_DmgType_Pistol; + if (object == "SMG"sv) return translated_DmgType_SMG; + if (object == "HeavyPistol"sv) return translated_DmgType_HeavyPistol; + if (object == "Carbine"sv) return translated_DmgType_Carbine; + if (object == "TiberiumFlechetteRifle"sv) return translated_DmgType_TiberiumFlechetteRifle; // Not a rifle. + if (object == "TiberiumAutoRifle"sv) return translated_DmgType_TiberiumAutoRifle; + if (object == "TiberiumAutoRifle_Blue"sv) return translated_DmgType_TiberiumAutoRifle_Blue; + if (object == "TiberiumAutoRifle_Flechette_Blue"sv) return translated_DmgType_TiberiumAutoRifle_Flechette_Blue; + + if (object == "Grenade"sv) return translated_DmgType_Grenade; + if (object == "TimedC4"sv) return translated_DmgType_TimedC4; + if (object == "RemoteC4"sv) return translated_DmgType_RemoteC4; + if (object == "ProxyC4"sv) return translated_DmgType_ProxyC4; + if (object == "ATMine"sv) return translated_DmgType_ATMine; + if (object == "EMPGrenade"sv) return translated_DmgType_EMPGrenade; + if (object == "BurnC4"sv) return translated_DmgType_BurnC4; + if (object == "FireBleed"sv) return translated_DmgType_FireBleed; // Caused by C4 or flame weapons + + if (object == "AutoRifle"sv) return translated_DmgType_AutoRifle; + if (object == "Shotgun"sv) return translated_DmgType_Shotgun; + if (object == "FlameThrower"sv) return translated_DmgType_FlameThrower; + if (object == "GrenadeLauncher"sv) return translated_DmgType_GrenadeLauncher; + if (object == "MarksmanRifle"sv) return translated_DmgType_MarksmanRifle; + + if (object == "ChainGun"sv) return translated_DmgType_ChainGun; + if (object == "MissileLauncher"sv) return translated_DmgType_MissileLauncher; + if (object == "MissileLauncher_Alt"sv) return translated_DmgType_MissileLauncher_Alt; + if (object == "ChemicalThrower"sv) return translated_DmgType_ChemicalThrower; + if (object == "LaserRifle"sv) return translated_DmgType_LaserRifle; + if (object == "TacticalRifle"sv) return translated_DmgType_TacticalRifle; + if (object == "RocketLauncher"sv) return translated_DmgType_RocketLauncher; + if (object == "LaserChainGun"sv) return translated_DmgType_LaserChainGun; + if (object == "FlakCannon"sv) return translated_DmgType_FlakCannon; + if (object == "FlakCannon_Alt"sv) return translated_DmgType_FlakCannon_Alt; + if (object == "SniperRifle"sv) return translated_DmgType_SniperRifle; + if (object == "RamjetRifle"sv) return translated_DmgType_RamjetRifle; + if (object == "Railgun"sv) return translated_DmgType_Railgun; + if (object == "PersonalIonCannon"sv) return translated_DmgType_PersonalIonCannon; + if (object == "VoltRifle"sv) return translated_DmgType_VoltRifle; + if (object == "VoltRifle_Alt"sv) return translated_DmgType_VoltRifle_Alt; + if (object == "VoltAutoRifle"sv) return translated_DmgType_VoltAutoRifle; + if (object == "VoltAutoRifle_Alt"sv) return translated_DmgType_VoltAutoRifle_Alt; /** Vehicle weapons */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("MammothTank_Missile"))) return translated_DmgType_MammothTank_Missile; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MammothTank_Cannon"))) return translated_DmgType_MammothTank_Cannon; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Orca_Missile"))) return translated_DmgType_Orca_Missile; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Orca_Gun"))) return translated_DmgType_Orca_Gun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Orca_Passenger"))) return translated_DmgType_Orca_Passenger; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Apache_Rocket"))) return translated_DmgType_Apache_Rocket; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Apache_Gun"))) return translated_DmgType_Apache_Gun; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Apache_Passenger"))) return translated_DmgType_Apache_Passenger; + if (object == "MammothTank_Missile"sv) return translated_DmgType_MammothTank_Missile; + if (object == "MammothTank_Cannon"sv) return translated_DmgType_MammothTank_Cannon; + if (object == "Orca_Missile"sv) return translated_DmgType_Orca_Missile; + if (object == "Orca_Gun"sv) return translated_DmgType_Orca_Gun; + if (object == "Orca_Passenger"sv) return translated_DmgType_Orca_Passenger; + if (object == "Apache_Rocket"sv) return translated_DmgType_Apache_Rocket; + if (object == "Apache_Gun"sv) return translated_DmgType_Apache_Gun; + if (object == "Apache_Passenger"sv) return translated_DmgType_Apache_Passenger; /** Base Defence Weapons */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_MG"))) return translated_DmgType_AGT_MG; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_Rocket"))) return translated_DmgType_AGT_Rocket; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Obelisk"))) return translated_DmgType_Obelisk; + if (object == "AGT_MG"sv) return translated_DmgType_AGT_MG; + if (object == "AGT_Rocket"sv) return translated_DmgType_AGT_Rocket; + if (object == "Obelisk"sv) return translated_DmgType_Obelisk; /** Defence Structure Weapons */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_MG"))) return translated_DmgType_AGT_MG; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_Rocket"))) return translated_DmgType_AGT_Rocket; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Obelisk"))) return translated_DmgType_Obelisk; - if (object.equals(STRING_LITERAL_AS_REFERENCE("GuardTower"))) return translated_DmgType_GuardTower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Turret"))) return translated_DmgType_Turret; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SAMSite"))) return translated_DmgType_SAMSite; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AATower"))) return translated_DmgType_AATower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("GunEmpl"))) return translated_DmgType_GunEmpl; - if (object.equals(STRING_LITERAL_AS_REFERENCE("GunEmpl_Alt"))) return translated_DmgType_GunEmpl_Alt; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketEmpl_Swarm"))) return translated_DmgType_RocketEmpl_Swarm; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketEmpl_Missile"))) return translated_DmgType_RocketEmpl_Missile; + if (object == "AGT_MG"sv) return translated_DmgType_AGT_MG; + if (object == "AGT_Rocket"sv) return translated_DmgType_AGT_Rocket; + if (object == "Obelisk"sv) return translated_DmgType_Obelisk; + if (object == "GuardTower"sv) return translated_DmgType_GuardTower; + if (object == "Turret"sv) return translated_DmgType_Turret; + if (object == "SAMSite"sv) return translated_DmgType_SAMSite; + if (object == "AATower"sv) return translated_DmgType_AATower; + if (object == "GunEmpl"sv) return translated_DmgType_GunEmpl; + if (object == "GunEmpl_Alt"sv) return translated_DmgType_GunEmpl_Alt; + if (object == "RocketEmpl_Swarm"sv) return translated_DmgType_RocketEmpl_Swarm; + if (object == "RocketEmpl_Missile"sv) return translated_DmgType_RocketEmpl_Missile; /** Other Weapons */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Nuke"))) return translated_DmgType_Nuke; - if (object.equals(STRING_LITERAL_AS_REFERENCE("IonCannon"))) return translated_DmgType_IonCannon; + if (object == "Nuke"sv) return translated_DmgType_Nuke; + if (object == "IonCannon"sv) return translated_DmgType_IonCannon; /** Nod Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Harvester_Nod"))) return translated_DmgType_Harvester_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Buggy"))) return translated_DmgType_Buggy; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Artillery"))) return translated_DmgType_Artillery; - if (object.equals(STRING_LITERAL_AS_REFERENCE("APC_Nod"))) return translated_DmgType_APC_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("LightTank"))) return translated_DmgType_LightTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("FlameTank"))) return translated_DmgType_FlameTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("StealthTank"))) return translated_DmgType_StealthTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Chinook_Nod"))) return translated_DmgType_Chinook_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Apache"))) return translated_DmgType_Apache; + if (object == "Harvester_Nod"sv) return translated_DmgType_Harvester_Nod; + if (object == "Buggy"sv) return translated_DmgType_Buggy; + if (object == "Artillery"sv) return translated_DmgType_Artillery; + if (object == "APC_Nod"sv) return translated_DmgType_APC_Nod; + if (object == "LightTank"sv) return translated_DmgType_LightTank; + if (object == "FlameTank"sv) return translated_DmgType_FlameTank; + if (object == "StealthTank"sv) return translated_DmgType_StealthTank; + if (object == "Chinook_Nod"sv) return translated_DmgType_Chinook_Nod; + if (object == "Apache"sv) return translated_DmgType_Apache; /** GDI Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Harvester_GDI"))) return translated_DmgType_Harvester_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Humvee"))) return translated_DmgType_Humvee; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MRLS"))) return translated_DmgType_MRLS; - if (object.equals(STRING_LITERAL_AS_REFERENCE("APC_GDI"))) return translated_DmgType_APC_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MediumTank"))) return translated_DmgType_MediumTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MammothTank"))) return translated_DmgType_MammothTank; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Chinook_GDI"))) return translated_DmgType_Chinook_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Orca"))) return translated_DmgType_Orca; + if (object == "Harvester_GDI"sv) return translated_DmgType_Harvester_GDI; + if (object == "Humvee"sv) return translated_DmgType_Humvee; + if (object == "MRLS"sv) return translated_DmgType_MRLS; + if (object == "APC_GDI"sv) return translated_DmgType_APC_GDI; + if (object == "MediumTank"sv) return translated_DmgType_MediumTank; + if (object == "MammothTank"sv) return translated_DmgType_MammothTank; + if (object == "Chinook_GDI"sv) return translated_DmgType_Chinook_GDI; + if (object == "Orca"sv) return translated_DmgType_Orca; /** Other Vehicles */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("A10_Missile"))) 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) { object.shiftRight(9); /** Nod structures */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("HandOfNod"))) return translated_Building_HandOfNod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AirTower"))) return translated_Building_AirTower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Airstrip"))) return translated_Building_Airstrip; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Refinery_Nod"))) return translated_Building_Refinery_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("PowerPlant_Nod"))) return translated_Building_PowerPlant_Nod; - if (object.equals(STRING_LITERAL_AS_REFERENCE("HandOfNod_Internals"))) return translated_Building_HandOfNod_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AirTower_Internals"))) return translated_Building_AirTower_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Airstrip_Internals"))) return translated_Building_Airstrip_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Refinery_Nod_Internals"))) return translated_Building_Refinery_Nod_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("PowerPlant_Nod_Internals"))) return translated_Building_PowerPlant_Nod_Internals; + if (object == "HandOfNod"sv) return translated_Building_HandOfNod; + if (object == "AirTower"sv) return translated_Building_AirTower; + if (object == "Airstrip"sv) return translated_Building_Airstrip; + if (object == "Refinery_Nod"sv) return translated_Building_Refinery_Nod; + if (object == "PowerPlant_Nod"sv) return translated_Building_PowerPlant_Nod; + if (object == "HandOfNod_Internals"sv) return translated_Building_HandOfNod_Internals; + if (object == "AirTower_Internals"sv) return translated_Building_AirTower_Internals; + if (object == "Airstrip_Internals"sv) return translated_Building_Airstrip_Internals; + if (object == "Refinery_Nod_Internals"sv) return translated_Building_Refinery_Nod_Internals; + if (object == "PowerPlant_Nod_Internals"sv) return translated_Building_PowerPlant_Nod_Internals; /** GDI structures */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Barracks"))) return translated_Building_Barracks; - if (object.equals(STRING_LITERAL_AS_REFERENCE("WeaponsFactory"))) return translated_Building_WeaponsFactory; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Refinery_GDI"))) return translated_Building_Refinery_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("PowerPlant_GDI"))) return translated_Building_PowerPlant_GDI; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Barracks_Internals"))) return translated_Building_Barracks_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("WeaponsFactory_Internals"))) return translated_Building_WeaponsFactory_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Refinery_GDI_Internals"))) return translated_Building_Refinery_GDI_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("PowerPlant_GDI_Internals"))) return translated_Building_PowerPlant_GDI_Internals; + if (object == "Barracks"sv) return translated_Building_Barracks; + if (object == "WeaponsFactory"sv) return translated_Building_WeaponsFactory; + if (object == "Refinery_GDI"sv) return translated_Building_Refinery_GDI; + if (object == "PowerPlant_GDI"sv) return translated_Building_PowerPlant_GDI; + if (object == "Barracks_Internals"sv) return translated_Building_Barracks_Internals; + if (object == "WeaponsFactory_Internals"sv) return translated_Building_WeaponsFactory_Internals; + if (object == "Refinery_GDI_Internals"sv) return translated_Building_Refinery_GDI_Internals; + if (object == "PowerPlant_GDI_Internals"sv) return translated_Building_PowerPlant_GDI_Internals; /** Defense structures */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("AdvancedGuardTower"))) return translated_Building_AdvancedGuardTower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Obelisk"))) return translated_Building_Obelisk; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AdvancedGuardTower_Internals"))) return translated_Building_AdvancedGuardTower_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Obelisk_Internals"))) return translated_Building_Obelisk_Internals; + if (object == "AdvancedGuardTower"sv) return translated_Building_AdvancedGuardTower; + if (object == "Obelisk"sv) return translated_Building_Obelisk; + if (object == "AdvancedGuardTower_Internals"sv) return translated_Building_AdvancedGuardTower_Internals; + if (object == "Obelisk_Internals"sv) return translated_Building_Obelisk_Internals; /** Other structures */ - if (object.equals(STRING_LITERAL_AS_REFERENCE("Silo"))) return translated_Building_Silo; - if (object.equals(STRING_LITERAL_AS_REFERENCE("CommCentre"))) return translated_Building_CommCentre; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Silo_Internals"))) return translated_Building_Silo_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("CommCentre_Internals"))) return translated_Building_CommCentre_Internals; + if (object == "Silo"sv) return translated_Building_Silo; + if (object == "CommCentre"sv) return translated_Building_CommCentre; + if (object == "Silo_Internals"sv) return translated_Building_Silo_Internals; + if (object == "CommCentre_Internals"sv) return translated_Building_CommCentre_Internals; } else if (object.find(STRING_LITERAL_AS_REFERENCE("CapturableMCT_")) == 0) { object.shiftRight(14); - if (object.equals(STRING_LITERAL_AS_REFERENCE("Fort"))) return translated_CapturableMCT_Fort; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MC"))) return translated_CapturableMCT_MC; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Fort_Internals"))) return translated_CapturableMCT_Fort_Internals; - if (object.equals(STRING_LITERAL_AS_REFERENCE("MC_Internals"))) return translated_CapturableMCT_MC_Internals; + if (object == "Fort"sv) return translated_CapturableMCT_Fort; + if (object == "MC"sv) return translated_CapturableMCT_MC; + if (object == "Fort_Internals"sv) return translated_CapturableMCT_Fort_Internals; + if (object == "MC_Internals"sv) return translated_CapturableMCT_MC_Internals; } else if (object.find(STRING_LITERAL_AS_REFERENCE("Defence_")) == 0) { object.shiftRight(8); - if (object.equals(STRING_LITERAL_AS_REFERENCE("GuardTower"))) return translated_Defence_GuardTower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Turret"))) return translated_Defence_Turret; - if (object.equals(STRING_LITERAL_AS_REFERENCE("SAMSite"))) return translated_Defence_SAMSite; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AATower"))) return translated_Defence_AATower; - if (object.equals(STRING_LITERAL_AS_REFERENCE("GunEmplacement"))) return translated_Defence_GunEmplacement; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RocketEmplacement"))) return translated_Defence_RocketEmplacement; + if (object == "GuardTower"sv) return translated_Defence_GuardTower; + if (object == "Turret"sv) return translated_Defence_Turret; + if (object == "SAMSite"sv) return translated_Defence_SAMSite; + if (object == "AATower"sv) return translated_Defence_AATower; + if (object == "GunEmplacement"sv) return translated_Defence_GunEmplacement; + if (object == "RocketEmplacement"sv) return translated_Defence_RocketEmplacement; } else if (object.find(STRING_LITERAL_AS_REFERENCE("Sentinel_")) == 0) { object.shiftRight(9); - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_MG_Base"))) return translated_Sentinel_AGT_MG_Base; - if (object.equals(STRING_LITERAL_AS_REFERENCE("AGT_Rockets_Base"))) return translated_Sentinel_AGT_Rockets_Base; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Obelisk_Laser_Base"))) return translated_Sentinel_Obelisk_Laser_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 == "Obelisk_Laser_Base"sv) return translated_Sentinel_Obelisk_Laser_Base; } else if (object.find(STRING_LITERAL_AS_REFERENCE("UTDmgType_")) == 0) { object.shiftRight(10); - if (object.equals(STRING_LITERAL_AS_REFERENCE("VehicleExplosion"))) return translated_UTDmgType_VehicleExplosion; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Drowned"))) return translated_UTDmgType_Drowned; + if (object == "VehicleExplosion"sv) return translated_UTDmgType_VehicleExplosion; + if (object == "Drowned"sv) return translated_UTDmgType_Drowned; } else if (object.find(STRING_LITERAL_AS_REFERENCE("VoteMenuChoice_")) == 0) { object.shiftRight(15); - if (object.equals(STRING_LITERAL_AS_REFERENCE("AddBots"))) return translated_VoteMenuChoice_AddBots; - if (object.equals(STRING_LITERAL_AS_REFERENCE("ChangeMap"))) return translated_VoteMenuChoice_ChangeMap; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Donate"))) return translated_VoteMenuChoice_Donate; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Kick"))) return translated_VoteMenuChoice_Kick; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RemoveBots"))) return translated_VoteMenuChoice_RemoveBots; - if (object.equals(STRING_LITERAL_AS_REFERENCE("RestartMatch"))) return translated_VoteMenuChoice_RestartMatch; - if (object.equals(STRING_LITERAL_AS_REFERENCE("StartMatch"))) return translated_VoteMenuChoice_StartMatch; - if (object.equals(STRING_LITERAL_AS_REFERENCE("Survey"))) return translated_VoteMenuChoice_Survey; + if (object == "AddBots"sv) return translated_VoteMenuChoice_AddBots; + if (object == "ChangeMap"sv) return translated_VoteMenuChoice_ChangeMap; + if (object == "Donate"sv) return translated_VoteMenuChoice_Donate; + if (object == "Kick"sv) return translated_VoteMenuChoice_Kick; + if (object == "RemoveBots"sv) return translated_VoteMenuChoice_RemoveBots; + if (object == "RestartMatch"sv) return translated_VoteMenuChoice_RestartMatch; + if (object == "StartMatch"sv) return translated_VoteMenuChoice_StartMatch; + if (object == "Survey"sv) return translated_VoteMenuChoice_Survey; } - else if (object.equals(STRING_LITERAL_AS_REFERENCE("IonCannonBeacon"))) return translated_IonCannonBeacon; - else if (object.equals(STRING_LITERAL_AS_REFERENCE("NukeBeacon"))) return translated_NukeBeacon; - else if (object.equals(STRING_LITERAL_AS_REFERENCE("KillZDamageType"))) return translated_KillZDamageType; + else if (object == "IonCannonBeacon"sv) return translated_IonCannonBeacon; + else if (object == "NukeBeacon"sv) return translated_NukeBeacon; + else if (object == "KillZDamageType"sv) return translated_KillZDamageType; return translateCharacter(object); } @@ -912,9 +912,9 @@ double RenX::getHeadshotKillRatio(const RenX::PlayerInfo &player) return static_cast(player.headshots) / static_cast(player.kills); } -Jupiter::String RenX::escapifyRCON(const Jupiter::ReadableString &str) +Jupiter::String RenX::escapifyRCON(std::string_view str) { - const char *ptr = str.ptr(); + const char *ptr = str.data(); size_t length = str.size(); Jupiter::String result(str.size() + 32); uint16_t value; diff --git a/src/Plugins/RenX/RenX.Core/RenX_Functions.h b/src/Plugins/RenX/RenX.Core/RenX_Functions.h index 440cfe7..b37158e 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Functions.h +++ b/src/Plugins/RenX/RenX.Core/RenX_Functions.h @@ -101,7 +101,7 @@ namespace RenX * @param object Preset to translate. * @return Translated name of the preset. */ - RENX_API const Jupiter::ReferenceString translateName(const Jupiter::ReadableString &object); + RENX_API std::string_view translateName(std::string_view object); /** * @brief Translates a WinType into a human-readable string. @@ -187,12 +187,12 @@ namespace RenX * @param str String to escapify * @return Escapified version of str. */ - RENX_API Jupiter::String escapifyRCON(const Jupiter::ReadableString &str); + RENX_API Jupiter::String escapifyRCON(std::string_view str); /** Constant variables */ RENX_API extern const char DelimC; /** RCON message deliminator */ RENX_API extern const char DelimC3; /** RCON message deliminator for RCON version number 003 */ - RENX_API extern const Jupiter::ReferenceString DevBotName; + RENX_API extern const std::string_view DevBotName; } #ifdef NDEBUG diff --git a/src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp b/src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp index c6fe7e6..e44fa8b 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_GameCommand.cpp @@ -70,7 +70,7 @@ RenX::BasicGameCommand::BasicGameCommand() : RenX::GameCommand(nullptr) { RenX::BasicGameCommand::BasicGameCommand(BasicGameCommand &c) : RenX::GameCommand(c) { } -RenX::BasicGameCommand::BasicGameCommand(const Jupiter::ReadableString &in_trigger, const Jupiter::ReadableString &in_message, const Jupiter::ReadableString &in_help_message) +RenX::BasicGameCommand::BasicGameCommand(std::string_view in_trigger, std::string_view in_message, std::string_view in_help_message) : RenX::GameCommand(nullptr) { this->addTrigger(in_trigger); m_message = in_message; @@ -83,11 +83,13 @@ void RenX::BasicGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *pla const Jupiter::ReadableString &RenX::BasicGameCommand::getHelp(const Jupiter::ReadableString &) { static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Returns a basic text string."); - if (m_help_message.isEmpty()) { + if (m_help_message.empty()) { return defaultHelp; } - return m_help_message; + static Jupiter::ReferenceString please_delete_this_later_jessica; + please_delete_this_later_jessica = m_help_message; + return please_delete_this_later_jessica; } RenX::BasicGameCommand *RenX::BasicGameCommand::copy() { diff --git a/src/Plugins/RenX/RenX.Core/RenX_GameCommand.h b/src/Plugins/RenX/RenX.Core/RenX_GameCommand.h index 10d5757..9d0470c 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_GameCommand.h +++ b/src/Plugins/RenX/RenX.Core/RenX_GameCommand.h @@ -125,15 +125,15 @@ namespace RenX { public: void trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters); - const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters); + const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters) override; BasicGameCommand *copy(); void create(); BasicGameCommand(); BasicGameCommand(BasicGameCommand &c); - BasicGameCommand(const Jupiter::ReadableString &trigger, const Jupiter::ReadableString &in_message, const Jupiter::ReadableString &in_help_message); + BasicGameCommand(std::string_view trigger, std::string_view in_message, std::string_view in_help_message); private: - Jupiter::StringS m_message, m_help_message; + std::string m_message, m_help_message; }; } @@ -143,7 +143,7 @@ namespace RenX #define BASE_GAME_COMMAND(CLASS) \ public: \ void trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters); \ - const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters); \ + const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters) override; \ CLASS *copy(); \ void create(); \ CLASS() { this->create(); RenX::getCore()->addCommand(this); } diff --git a/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp b/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp index b9ad995..3b10abd 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.cpp @@ -16,6 +16,7 @@ * Written by Jessica James */ +#include "jessilib/unicode.hpp" #include "RenX_LadderDatabase.h" #include "RenX_Server.h" #include "RenX_PlayerInfo.h" @@ -33,7 +34,7 @@ RenX::LadderDatabase::LadderDatabase() { } } -RenX::LadderDatabase::LadderDatabase(const Jupiter::ReadableString &in_name) : LadderDatabase() { +RenX::LadderDatabase::LadderDatabase(std::string_view in_name) : LadderDatabase() { RenX::LadderDatabase::setName(in_name); } @@ -208,9 +209,9 @@ std::pair RenX::LadderDatabase::getPlayer return std::pair(nullptr, Jupiter::INVALID_INDEX); } -RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByName(const Jupiter::ReadableString &name) const { +RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByName(std::string_view name) const { for (Entry *itr = m_head; itr != nullptr; itr = itr->next) { - if (itr->most_recent_name.equalsi(name)) { + if (jessilib::equalsi(itr->most_recent_name, name)) { return itr; } } @@ -218,10 +219,10 @@ RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByName(const Ju return nullptr; } -std::pair RenX::LadderDatabase::getPlayerEntryAndIndexByName(const Jupiter::ReadableString &name) const { +std::pair RenX::LadderDatabase::getPlayerEntryAndIndexByName(std::string_view name) const { size_t index = 0; for (Entry *itr = m_head; itr != nullptr; itr = itr->next, ++index) { - if (itr->most_recent_name.equalsi(name)) { + if (jessilib::equalsi(itr->most_recent_name, name)) { return std::pair(itr, index); } } @@ -229,9 +230,9 @@ std::pair RenX::LadderDatabase::getPlayer return std::pair(nullptr, Jupiter::INVALID_INDEX); } -RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByPartName(const Jupiter::ReadableString &name) const { +RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByPartName(std::string_view name) const { for (Entry *itr = m_head; itr != nullptr; itr = itr->next) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { return itr; } } @@ -239,10 +240,10 @@ RenX::LadderDatabase::Entry *RenX::LadderDatabase::getPlayerEntryByPartName(cons return nullptr; } -std::pair RenX::LadderDatabase::getPlayerEntryAndIndexByPartName(const Jupiter::ReadableString &name) const { +std::pair RenX::LadderDatabase::getPlayerEntryAndIndexByPartName(std::string_view name) const { size_t index = 0; for (Entry *itr = m_head; itr != nullptr; itr = itr->next, ++index) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { return std::pair(itr, index); } } @@ -250,18 +251,18 @@ std::pair RenX::LadderDatabase::getPlayer return std::pair(nullptr, Jupiter::INVALID_INDEX); } -std::forward_list RenX::LadderDatabase::getPlayerEntriesByPartName(const Jupiter::ReadableString &name, size_t max) const { +std::forward_list RenX::LadderDatabase::getPlayerEntriesByPartName(std::string_view name, size_t max) const { std::forward_list list; if (max == 0) { for (Entry *itr = m_head; itr != nullptr; itr = itr->next) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { list.emplace_front(*itr); } } } else { for (Entry* itr = m_head; itr != nullptr; itr = itr->next) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { list.emplace_front(*itr); if (--max == 0) { return list; @@ -272,20 +273,20 @@ std::forward_list RenX::LadderDatabase::getPlayerEn return list; } -std::forward_list> RenX::LadderDatabase::getPlayerEntriesAndIndexByPartName(const Jupiter::ReadableString &name, size_t max) const { +std::forward_list> RenX::LadderDatabase::getPlayerEntriesAndIndexByPartName(std::string_view name, size_t max) const { std::forward_list> list; size_t index = 0; if (max == 0) { for (Entry *itr = m_head; itr != nullptr; itr = itr->next, ++index) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { list.emplace_front(*itr, index); } } } else { for (Entry* itr = m_head; itr != nullptr; itr = itr->next, ++index) { - if (itr->most_recent_name.findi(name) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(itr->most_recent_name, name) != std::string::npos) { list.emplace_front(*itr, index); if (--max) { return list; @@ -616,11 +617,11 @@ void RenX::LadderDatabase::erase() { } } -const Jupiter::ReadableString &RenX::LadderDatabase::getName() const { +std::string_view RenX::LadderDatabase::getName() const { return m_name; } -void RenX::LadderDatabase::setName(const Jupiter::ReadableString &in_name) { +void RenX::LadderDatabase::setName(std::string_view in_name) { m_name = in_name; } diff --git a/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h b/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h index 19ef373..aa3ee57 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h +++ b/src/Plugins/RenX/RenX.Core/RenX_LadderDatabase.h @@ -79,7 +79,7 @@ namespace RenX { top_score, top_kills, most_deaths, top_headshot_kills, top_vehicle_kills, top_building_kills, top_defence_kills, top_captures, top_game_time, top_beacon_placements, top_beacon_disarms, top_proxy_placements, top_proxy_disarms, // tops (13) most_recent_ip; // other (1) time_t last_game; - Jupiter::StringS most_recent_name; + std::string most_recent_name; Entry *next = nullptr; Entry *prev = nullptr; }; @@ -106,8 +106,8 @@ namespace RenX { * @param name Name to search ladder for * @return Ladder entry with a matching name if one exists, nullptr otherwise. */ - Entry *getPlayerEntryByName(const Jupiter::ReadableString &name) const; - std::pair getPlayerEntryAndIndexByName(const Jupiter::ReadableString &name) const; + Entry *getPlayerEntryByName(std::string_view name) const; + std::pair getPlayerEntryAndIndexByName(std::string_view name) const; /** * @brief Searches for a ladder entry by part name @@ -115,8 +115,8 @@ namespace RenX { * @param name Part of name to search ladder for * @return Ladder entry with a matching name if one exists, nullptr otherwise. */ - Entry *getPlayerEntryByPartName(const Jupiter::ReadableString &name) const; - std::pair getPlayerEntryAndIndexByPartName(const Jupiter::ReadableString &name) const; + Entry *getPlayerEntryByPartName(std::string_view name) const; + std::pair getPlayerEntryAndIndexByPartName(std::string_view name) const; /** * @brief Fetches all entries matching a part name. @@ -125,8 +125,8 @@ namespace RenX { * @param max Maximum number of entries to return * @return List containing entries with matching names. */ - std::forward_list getPlayerEntriesByPartName(const Jupiter::ReadableString &name, size_t max) const; - std::forward_list> getPlayerEntriesAndIndexByPartName(const Jupiter::ReadableString &name, size_t max) const; + std::forward_list getPlayerEntriesByPartName(std::string_view name, size_t max) const; + std::forward_list> getPlayerEntriesAndIndexByPartName(std::string_view name, size_t max) const; /** * @brief Fetches a ladder entry at a specified index @@ -184,12 +184,12 @@ namespace RenX { /** * @brief Gets the name of this database. */ - const Jupiter::ReadableString &getName() const; + std::string_view getName() const; /** * @brief Sets the name of this database. */ - void setName(const Jupiter::ReadableString &in_name); + void setName(std::string_view in_name); /** * @brief Checks if this database outputs sort/write times when 'updateLadder' is called. @@ -213,7 +213,7 @@ namespace RenX { /** * @brief Named constructor for the LadderDatabase class */ - LadderDatabase(const Jupiter::ReadableString &in_name); + LadderDatabase(std::string_view in_name); /** * @brief Deconstructor for the LadderDatabase class @@ -229,7 +229,7 @@ namespace RenX { uint8_t m_read_version = m_write_version; bool m_output_times = false; - Jupiter::StringS m_name; + std::string m_name; std::chrono::steady_clock::time_point m_last_sort = std::chrono::steady_clock::now(); size_t m_entries = 0; Entry* m_head = nullptr; diff --git a/src/Plugins/RenX/RenX.Core/RenX_Map.h b/src/Plugins/RenX/RenX.Core/RenX_Map.h index abc0e72..d5ffca5 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Map.h +++ b/src/Plugins/RenX/RenX.Core/RenX_Map.h @@ -38,7 +38,7 @@ namespace RenX struct RENX_API Map { uint64_t guid[2]; - Jupiter::StringS name; + std::string name; bool equals(const RenX::Map &map) const; diff --git a/src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h b/src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h index 0319dbd..aca6582 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h +++ b/src/Plugins/RenX/RenX.Core/RenX_PlayerInfo.h @@ -49,7 +49,7 @@ namespace RenX std::chrono::steady_clock::time_point joinTime = std::chrono::steady_clock::now(); // TODO: Add backpack - Jupiter::StringS name; + std::string name; Jupiter::StringS ip; Jupiter::StringS adminType; Jupiter::StringS uuid; @@ -96,7 +96,7 @@ namespace RenX mutable Jupiter::Config varData; }; - static Jupiter::ReferenceString rdns_pending = STRING_LITERAL_AS_REFERENCE("RDNS_PENDING"); + static std::string_view rdns_pending{ "RDNS_PENDING" }; } /** Re-enable warnings */ diff --git a/src/Plugins/RenX/RenX.Core/RenX_Server.cpp b/src/Plugins/RenX/RenX.Core/RenX_Server.cpp index 8f4337a..f198b29 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Server.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_Server.cpp @@ -18,6 +18,8 @@ #include #include "jessilib/split.hpp" +#include "jessilib/word_split.hpp" +#include "jessilib/unicode.hpp" #include "Jupiter/String.hpp" #include "ServerManager.h" #include "IRC_Bot.h" @@ -32,6 +34,7 @@ #include "RenX_Tags.h" using namespace Jupiter::literals; +using namespace std::literals; // This could probably be templated but I really just want this done quickly right this moment so I can purge ArrayList #define CALL_RX_PLUGIN_EVENT(event, ...) \ @@ -265,7 +268,7 @@ int RenX::Server::sendSocket(const Jupiter::ReadableString &text) { return m_sock.send(text); } -int RenX::Server::sendMessage(const Jupiter::ReadableString &message) { +int RenX::Server::sendMessage(std::string_view message) { Jupiter::String msg = RenX::escapifyRCON(message); if (m_neverSay) { int result = 0; @@ -282,7 +285,7 @@ int RenX::Server::sendMessage(const Jupiter::ReadableString &message) { return sendSocket("chostsay "_jrs + msg + '\n'); } -int RenX::Server::sendMessage(const RenX::PlayerInfo &player, const Jupiter::ReadableString &message) { +int RenX::Server::sendMessage(const RenX::PlayerInfo &player, std::string_view message) { return sendSocket("chostprivatesay pid"_jrs + Jupiter::StringS::Format("%d ", player.id) + RenX::escapifyRCON(message) + '\n'); } @@ -302,20 +305,19 @@ int RenX::Server::sendData(const Jupiter::ReadableString &data) { return sendSocket(data); } -RenX::BuildingInfo *RenX::Server::getBuildingByName(const Jupiter::ReadableString &name) const { - for (size_t index = 0; index != RenX::Server::buildings.size(); ++index) { - if (RenX::Server::buildings[index]->name.equalsi(name)) { - return RenX::Server::buildings[index].get(); +RenX::BuildingInfo *RenX::Server::getBuildingByName(std::string_view name) const { + for (const auto& building : buildings) { + if (jessilib::equalsi(building->name, name)) { + return building.get(); } } return nullptr; } -bool RenX::Server::hasMapInRotation(const Jupiter::ReadableString &name) const { - size_t index = RenX::Server::maps.size(); - while (index != 0) { - if (RenX::Server::maps[--index].name.equalsi(name)) { +bool RenX::Server::hasMapInRotation(std::string_view name) const { + for (const auto& map : maps) { + if (jessilib::equalsi(map.name, name)) { return true; } } @@ -323,15 +325,14 @@ bool RenX::Server::hasMapInRotation(const Jupiter::ReadableString &name) const { return false; } -const Jupiter::ReadableString *RenX::Server::getMapName(const Jupiter::ReadableString &name) const { - size_t index = RenX::Server::maps.size(); - const Jupiter::ReadableString *map_name; - while (index != 0) { - map_name = &RenX::Server::maps[--index].name; - if (map_name->findi(name) != Jupiter::INVALID_INDEX) - return map_name; +std::string_view RenX::Server::getMapName(std::string_view name) const { + for (const auto& map : maps) { + if (jessilib::findi(map.name, name) != std::string::npos) { + return map.name; + } } - return nullptr; + + return {}; } const Jupiter::ReadableString &RenX::Server::getCurrentRCONCommand() const { @@ -396,7 +397,7 @@ RenX::PlayerInfo *RenX::Server::getPlayerByName(const Jupiter::ReadableString &n // Try full name match for (auto node = this->players.begin(); node != this->players.end(); ++node) { - if (node->name == name) { + if (node->name == static_cast(name)) { return const_cast(&*node); } } @@ -428,13 +429,15 @@ RenX::PlayerInfo *RenX::Server::getPlayerByPartName(const Jupiter::ReadableStrin return getPlayerByPartNameFast(partName); } -RenX::PlayerInfo *RenX::Server::getPlayerByPartNameFast(const Jupiter::ReadableString &partName) const { - if (this->players.size() == 0) +RenX::PlayerInfo *RenX::Server::getPlayerByPartNameFast(std::string_view partName) const { + if (players.size() == 0) return nullptr; - for (auto node = this->players.begin(); node != this->players.end(); ++node) - if (node->name.findi(partName) != Jupiter::INVALID_INDEX) - return const_cast(&*node); + for (const auto& player : players) { + if (jessilib::findi(player.name, partName) != std::string::npos) { + return const_cast(&player); + } + } return nullptr; } @@ -551,7 +554,7 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { if ((m_localSteamBan && entry->steamid != 0 && entry->steamid == player.steamid) || (m_localIPBan && entry->ip != 0 && (entry->ip & netmask) == (player.ip32 & netmask)) - || (m_localHWIDBan && entry->hwid.isNotEmpty() && entry->hwid.equals(player.hwid)) + || (m_localHWIDBan && entry->hwid.isNotEmpty() && entry->hwid == player.hwid) || (m_localRDNSBan && entry->rdns.isNotEmpty() && entry->is_rdns_ban() && player.rdns_thread.joinable() == false && player.rdns.match(entry->rdns)) || (m_localNameBan && entry->name.isNotEmpty() && entry->name.equalsi(player.name))) { player.ban_flags |= entry->flags; @@ -579,10 +582,10 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[0]->timestamp + last_to_expire[0]->length); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); if (last_to_expire[0]->length == std::chrono::seconds::zero()) { - forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); + forceKickPlayer(player, Jupiter::StringS::Format("You were permanently banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data())); } else { - forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.ptr())); + forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[0]->reason.size(), last_to_expire[0]->reason.data())); } player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT @@ -593,9 +596,9 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); mute(player); if (last_to_expire[1]->length == std::chrono::seconds::zero()) - sendMessage(player, Jupiter::StringS::Format("You were permanently muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You were permanently muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data())); else - sendMessage(player, Jupiter::StringS::Format("You are muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You are muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[1]->reason.size(), last_to_expire[1]->reason.data())); player.ban_flags |= RenX::BanDatabase::Entry::FLAG_TYPE_BOT; // implies FLAG_TYPE_BOT } @@ -603,40 +606,40 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[2]->timestamp + last_to_expire[2]->length); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); if (last_to_expire[2]->length == std::chrono::seconds::zero()) - sendMessage(player, Jupiter::StringS::Format("You were permanently bot-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You were permanently bot-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data())); else - sendMessage(player, Jupiter::StringS::Format("You are bot-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You are bot-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[2]->reason.size(), last_to_expire[2]->reason.data())); } if (last_to_expire[3] != nullptr) { // Vote ban time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[3]->timestamp + last_to_expire[3]->length); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); if (last_to_expire[3]->length == std::chrono::seconds::zero()) - sendMessage(player, Jupiter::StringS::Format("You were permanently vote-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You were permanently vote-muted from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data())); else - sendMessage(player, Jupiter::StringS::Format("You are vote-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You are vote-muted from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[3]->reason.size(), last_to_expire[3]->reason.data())); } if (last_to_expire[4] != nullptr) { // Mine ban time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[4]->timestamp + last_to_expire[4]->length); mineBan(player); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); if (last_to_expire[4]->length == std::chrono::seconds::zero()) - sendMessage(player, Jupiter::StringS::Format("You were permanently mine-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You were permanently mine-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data())); else - sendMessage(player, Jupiter::StringS::Format("You are mine-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You are mine-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[4]->reason.size(), last_to_expire[4]->reason.data())); } if (last_to_expire[5] != nullptr) { // Ladder ban time_t current_time = std::chrono::system_clock::to_time_t(last_to_expire[5]->timestamp + last_to_expire[5]->length); strftime(timeStr, sizeof(timeStr), "%b %d %Y at %H:%M:%S", localtime(¤t_time)); if (last_to_expire[5]->length == std::chrono::seconds::zero()) - sendMessage(player, Jupiter::StringS::Format("You were permanently ladder-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You were permanently ladder-banned from %.*s on %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data())); else - sendMessage(player, Jupiter::StringS::Format("You are ladder-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.ptr())); + sendMessage(player, Jupiter::StringS::Format("You are ladder-banned from %.*s until %s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), timeStr, last_to_expire[5]->reason.size(), last_to_expire[5]->reason.data())); } if (last_to_expire[6] != nullptr) { // Alert IRC_Bot *server; Jupiter::String fmtName = RenX::getFormattedPlayerName(player); - Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\". Please keep an eye on them in ", fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.ptr(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.ptr()); - Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\"." IRCCOLOR, fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.ptr(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.ptr()); + Jupiter::StringL user_message = Jupiter::StringL::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\". Please keep an eye on them in ", fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data()); + Jupiter::StringS channel_message = Jupiter::StringS::Format(IRCCOLOR "04[Alert] " IRCCOLOR IRCBOLD "%.*s" IRCBOLD IRCCOLOR " is marked for monitoring by %.*s for: \"%.*s\"." IRCCOLOR, fmtName.size(), fmtName.ptr(), last_to_expire[6]->banner.size(), last_to_expire[6]->banner.data(), last_to_expire[6]->reason.size(), last_to_expire[6]->reason.data()); for (size_t server_index = 0; server_index < serverManager->size(); ++server_index) { server = serverManager->getServer(server_index); @@ -646,7 +649,7 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { user_message += channel.second.getName(); for (auto& user : channel.second.getUsers()) { - if (channel.second.getUserPrefix(*user.second) != 0 && user.second->getNickname().equals(server->getNickname()) == false) + if (channel.second.getUserPrefix(*user.second) != 0 && user.second->getNickname() != server->getNickname()) server->sendMessage(user.second->getUser()->getNickname(), user_message); } user_message -= channel.second.getName().size(); @@ -657,7 +660,7 @@ void RenX::Server::banCheck(RenX::PlayerInfo &player) { } }; -void RenX::Server::banPlayer(int id, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason) { +void RenX::Server::banPlayer(int id, std::string_view banner, std::string_view reason) { if (m_rconBan) { Jupiter::String out_reason = RenX::escapifyRCON(reason); sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", id, out_reason.size(), out_reason.ptr())); @@ -670,7 +673,7 @@ void RenX::Server::banPlayer(int id, const Jupiter::ReadableString &banner, cons } } -void RenX::Server::banPlayer(const RenX::PlayerInfo &player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, std::chrono::seconds length) { +void RenX::Server::banPlayer(const RenX::PlayerInfo &player, std::string_view banner, std::string_view reason, std::chrono::seconds length) { if ((player.exemption_flags & RenX::ExemptionDatabase::Entry::FLAG_TYPE_BAN) == 0) { if (m_localBan) { RenX::banDatabase->add(this, player, banner, reason, length); @@ -681,19 +684,19 @@ void RenX::Server::banPlayer(const RenX::PlayerInfo &player, const Jupiter::Read Jupiter::String out_reason = RenX::escapifyRCON(reason); sendSocket(Jupiter::StringS::Format("ckickban pid%d %.*s\n", player.id, out_reason.size(), out_reason.ptr())); } - else if (banner.isNotEmpty()) { - forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s by %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.ptr(), reason.size(), reason.ptr())); + else if (!banner.empty()) { + forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s by %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.data(), reason.size(), reason.data())); } else { - forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), reason.size(), reason.ptr())); + forceKickPlayer(player, Jupiter::StringS::Format("You are permanently banned from %.*s for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), reason.size(), reason.data())); } } - else if (banner.isNotEmpty()) { + else if (!banner.empty()) { // TODO: make the time formatting not complete nonsense - forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); + forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s by %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), banner.size(), banner.data(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.data())); } else { - forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.ptr())); + forceKickPlayer(player, Jupiter::StringS::Format("You are banned from %.*s for the next %lld days, %.2d:%.2d:%.2d for: %.*s", m_ban_from_str.size(), m_ban_from_str.ptr(), static_cast(length.count() / 86400), static_cast(length.count() % 3600), static_cast((length.count() % 3600) / 60), static_cast(length.count() % 60), reason.size(), reason.data())); } } } @@ -801,8 +804,8 @@ void RenX::Server::gameoverWhenEmpty() { m_gameover_when_empty = true; } -bool RenX::Server::setMap(const Jupiter::ReadableString &map) { - return send(Jupiter::StringS::Format("changemap %.*s", map.size(), map.ptr())) > 0; +bool RenX::Server::setMap(std::string_view map) { + return send(Jupiter::StringS::Format("changemap %.*s", map.size(), map.data())) > 0; } bool RenX::Server::loadMutator(const Jupiter::ReadableString &mutator) { @@ -910,15 +913,17 @@ const Jupiter::ReadableString &RenX::Server::getPrefix() const { return parsed; } -void RenX::Server::setPrefix(const Jupiter::ReadableString &prefix) { - RenX::sanitizeTags(m_IRCPrefix = prefix); +void RenX::Server::setPrefix(std::string_view prefix) { + Jupiter::StringS tagged_prefix = Jupiter::ReferenceString{ prefix }; + RenX::sanitizeTags(tagged_prefix); + m_IRCPrefix = tagged_prefix; } -const Jupiter::ReadableString &RenX::Server::getCommandPrefix() const { +std::string_view RenX::Server::getCommandPrefix() const { return m_CommandPrefix; } -void RenX::Server::setCommandPrefix(const Jupiter::ReadableString &prefix) { +void RenX::Server::setCommandPrefix(std::string_view prefix) { m_CommandPrefix = prefix; } @@ -1034,7 +1039,7 @@ RenX::GameCommand *RenX::Server::getCommand(unsigned int index) const { return m_commands[index].get(); } -RenX::GameCommand *RenX::Server::getCommand(const Jupiter::ReadableString &trigger) const { +RenX::GameCommand *RenX::Server::getCommand(std::string_view trigger) const { for (const auto& command : m_commands) { if (command->matches(trigger)) { return command.get(); @@ -1077,9 +1082,9 @@ void RenX::Server::addCommand(RenX::GameCommand* in_command) { int access_level; if (m_commandAccessLevels != nullptr) { - const Jupiter::ReadableString &accessLevel = m_commandAccessLevels->get(command->getTrigger()); - if (accessLevel.isNotEmpty()) { - access_level = accessLevel.asInt(); + std::string_view accessLevel = m_commandAccessLevels->get(command->getTrigger()); + if (!accessLevel.empty()) { + access_level = Jupiter::ReferenceString{accessLevel}.asInt(); if (access_level < 0) { // Disabled command return; } @@ -1089,10 +1094,10 @@ void RenX::Server::addCommand(RenX::GameCommand* in_command) { } if (m_commandAliases != nullptr) { - const Jupiter::ReadableString &aliasList = m_commandAliases->get(command->getTrigger()); - unsigned int j = aliasList.wordCount(WHITESPACE); - while (j != 0) { - command->addTrigger(Jupiter::ReferenceString::getWord(aliasList, --j, WHITESPACE)); + std::string_view aliasList = m_commandAliases->get(command->getTrigger()); + auto aliases = jessilib::word_split_view(aliasList, WHITESPACE_SV); + for (const auto& alias : aliases) { + command->addTrigger(alias); } } @@ -1110,7 +1115,7 @@ bool RenX::Server::removeCommand(RenX::GameCommand *command) { return false; } -bool RenX::Server::removeCommand(const Jupiter::ReadableString &trigger) { +bool RenX::Server::removeCommand(std::string_view trigger) { for (auto itr = m_commands.begin(); itr != m_commands.end(); ++itr) { if ((*itr)->matches(trigger)) { m_commands.erase(itr); @@ -1142,7 +1147,7 @@ void RenX::Server::setUUID(RenX::PlayerInfo &player, const Jupiter::ReadableStri } bool RenX::Server::setUUIDIfDifferent(RenX::PlayerInfo &player, const Jupiter::ReadableString &uuid) { - if (player.uuid.equals(uuid)) { + if (player.uuid == uuid) { return false; } @@ -1292,6 +1297,13 @@ struct parsed_player_token { bool isPlayer{}; // i.e: they appear on the player list; not "ai" }; +// TODO: replace me! +void process_escape_sequences(std::string& out_string) { + Jupiter::StringS temp = out_string; + temp.processEscapeSequences(); + out_string = temp; +} + void RenX::Server::processLine(const Jupiter::ReadableString &line) { if (line.isEmpty()) return; @@ -1375,23 +1387,29 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } }; - auto onChat = [this](RenX::PlayerInfo &player, const Jupiter::ReadableString &message) + auto onChat = [this](RenX::PlayerInfo &player, std::string_view message) { - const Jupiter::ReadableString &prefix = getCommandPrefix(); + std::string_view prefix = getCommandPrefix(); if ((player.ban_flags & RenX::BanDatabase::Entry::FLAG_TYPE_BOT) == 0 && message.find(prefix) == 0 && message.size() != prefix.size()) { Jupiter::ReferenceString command; Jupiter::ReferenceString parameters; - if (containsSymbol(WHITESPACE, message.get(prefix.size()))) + if (containsSymbol(WHITESPACE, message[prefix.size()])) { - command = Jupiter::ReferenceString::getWord(message, 1, WHITESPACE); - parameters = Jupiter::ReferenceString::gotoWord(message, 2, WHITESPACE); + auto split = jessilib::word_split_n_view(message, WHITESPACE_SV, 2); + if (split.size() >= 2) { + command = split[1]; + if (split.size() >= 3) { + parameters = split[2]; + } + } } else { - command = Jupiter::ReferenceString::getWord(message, 0, WHITESPACE); - command.shiftRight(prefix.size()); - parameters = Jupiter::ReferenceString::gotoWord(message, 1, WHITESPACE); + auto split = jessilib::word_split_once_view(message, WHITESPACE_SV); + command = split.first; + command.remove_prefix(prefix.size()); + parameters = split.second; } triggerCommand(command, player, parameters); } @@ -1420,7 +1438,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { result.isBot = true; result.isPlayer = true; } - else if (idToken == "ai") { + else if (idToken == "ai"sv) { result.isBot = true; result.isPlayer = false; } @@ -1529,7 +1547,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { player->steamid = steamid; recalcUUID = true; } - if (player->name.isEmpty()) + if (player->name.empty()) { player->name = name; recalcUUID = true; @@ -1610,7 +1628,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { else id = tokens[0].asInt(); - if (steamToken.equals("-----NO-STEAM-----") == false) + if (steamToken != "-----NO-STEAM-----") steamid = steamToken.asUnsignedLongLong(); team = RenX::getTeam(teamToken); @@ -1687,7 +1705,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { value = table_get("ADMIN"_jrs); if (value != nullptr) { - if (value->equals("None"_jrs)) + if (*value == "None"sv) player->adminType = ""; else player->adminType = *value; @@ -1711,10 +1729,10 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { RenX::PlayerInfo *player = getPlayer(value->asInt()); if (player != nullptr) { - if (player->name.isEmpty()) + if (player->name.empty()) { player->name = table_get_ref("NAME"_jrs, Jupiter::ReferenceString::empty); - player->name.processEscapeSequences(); + process_escape_sequences(player->name); } if (player->ip.isEmpty()) player->ip = table_get_ref("IP"_jrs, Jupiter::ReferenceString::empty); @@ -1865,10 +1883,10 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { RenX::PlayerInfo *player = getPlayer(value->asInt()); if (player != nullptr) { - if (player->name.isEmpty()) + if (player->name.empty()) { player->name = table_get_ref("NAME"_jrs, Jupiter::ReferenceString::empty); - player->name.processEscapeSequences(); + process_escape_sequences(player->name); } value = table_get("TEAMNUM"_jrs); @@ -1975,7 +1993,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } else if (m_lastCommand.equalsi("ping")) { - if (getToken(1).equals("srv_init_done"_jrs)) + if (getToken(1) == "srv_init_done"sv) finished_connecting(); else m_awaitingPong = false; @@ -2087,32 +2105,32 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { case 'l': if (m_rconVersion >= 3) { Jupiter::ReferenceString subHeader = getToken(1); - if (tokens[0].equals("GAME")) { - if (subHeader.equals("Deployed;")) { + if (tokens[0] == "GAME"sv) { + if (subHeader == "Deployed;"sv) { // Object (Beacon/Mine) | Player // Object (Beacon/Mine) | Player | "on" | Surface RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); Jupiter::ReferenceString objectType = getToken(2); if (objectType.match("*Beacon")) ++player->beaconPlacements; - else if (objectType.equals("Rx_Weapon_DeployedProxyC4"_jrs)) + else if (objectType == "Rx_Weapon_DeployedProxyC4"sv) ++player->proxy_placements; for (const auto& plugin : xPlugins) { plugin->RenX_OnDeploy(*this, *player, objectType); } onAction(); } - else if (subHeader.equals("Disarmed;")) { + else if (subHeader == "Disarmed;"sv) { // Object (Beacon/Mine) | "by" | Player // Object (Beacon/Mine) | "by" | Player | "owned by" | Owner RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); Jupiter::ReferenceString objectType = getToken(2); if (objectType.match("*Beacon")) ++player->beaconDisarms; - else if (objectType.equals("Rx_Weapon_DeployedProxyC4"_jrs)) + else if (objectType == "Rx_Weapon_DeployedProxyC4"sv) ++player->proxy_disarms; - if (getToken(5).equals("owned by")) { + if (getToken(5) == "owned by"sv) { RenX::PlayerInfo *victim = parseGetPlayerOrAdd(getToken(6)); for (const auto& plugin : xPlugins) { plugin->RenX_OnDisarm(*this, *player, objectType, *victim); @@ -2125,7 +2143,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Exploded;")) { + else if (subHeader == "Exploded;"sv) { // Pre-5.15: // Explosive | "at" | Location // Explosive | "at" | Location | "by" | Owner @@ -2133,8 +2151,8 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { // Explosive | "near" | Spot Location | "at" | Location | "by" | Owner // Explosive | "near" | Spot Location | "at" | Location Jupiter::ReferenceString explosive = getToken(2); - if (getToken(5).equals("at")) { // 5.15+ - if (getToken(7).equals("by")) { // Player information specified + if (getToken(5) == "at"sv) { // 5.15+ + if (getToken(7) == "by"sv) { // Player information specified RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(8)); for (const auto& plugin : xPlugins) { plugin->RenX_OnExplode(*this, *player, explosive); @@ -2146,7 +2164,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (getToken(5).equals("by")) { // Pre-5.15 with player information specified + else if (getToken(5) == "by"sv) { // Pre-5.15 with player information specified RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(6)); for (const auto& plugin : xPlugins) { plugin->RenX_OnExplode(*this, *player, explosive); @@ -2159,11 +2177,11 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("ProjectileExploded;")) { + else if (subHeader == "ProjectileExploded;"sv) { // Explosive | "at" | Location // Explosive | "at" | Location | "by" | Owner Jupiter::ReferenceString explosive = getToken(2); - if (getToken(5).equals("by")) { + if (getToken(5) == "by"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(6)); for (const auto& plugin : xPlugins) { plugin->RenX_OnExplode(*this, *player, explosive); @@ -2176,7 +2194,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Captured;")) { + else if (subHeader == "Captured;"sv) { // Team ',' Building | "id" | Building ID | "by" | Player auto teamBuildingToken = jessilib::split_once_view(getToken(2), ','); Jupiter::ReferenceString building = teamBuildingToken.second; @@ -2188,7 +2206,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Neutralized;")) { + else if (subHeader == "Neutralized;"sv) { // Team ',' Building | "id" | Building ID | "by" | Player auto teamBuildingToken = jessilib::split_once_view(getToken(2), ','); Jupiter::ReferenceString building = teamBuildingToken.second; @@ -2199,7 +2217,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Purchase;")) { + else if (subHeader == "Purchase;"sv) { // "character" | Character | "by" | Player // "item" | Item | "by" | Player // "weapon" | Weapon | "by" | Player @@ -2207,43 +2225,43 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { // "vehicle" | Vehicle | "by" | Player Jupiter::ReferenceString type = getToken(2); Jupiter::ReferenceString obj = getToken(3); - if (type.equals("character")) { + if (type == "character"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); for (const auto& plugin : xPlugins) { plugin->RenX_OnCharacterPurchase(*this, *player, obj); } player->character = obj; } - else if (type.equals("item")) { + else if (type == "item"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); for (const auto& plugin : xPlugins) { plugin->RenX_OnItemPurchase(*this, *player, obj); } } - else if (type.equals("weapon")) { + else if (type == "weapon"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); for (const auto& plugin : xPlugins) { plugin->RenX_OnWeaponPurchase(*this, *player, obj); } } - else if (type.equals("refill")) { + else if (type == "refill"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(obj); for (const auto& plugin : xPlugins) { plugin->RenX_OnRefillPurchase(*this, *player); } } - else if (type.equals("vehicle")) { + else if (type == "vehicle"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); for (const auto& plugin : xPlugins) { plugin->RenX_OnVehiclePurchase(*this, *player, obj); } } } - else if (subHeader.equals("Spawn;")) { + else if (subHeader == "Spawn;"sv) { // "vehicle" | Vehicle Team, Vehicle // "player" | Player | "character" | Character // "bot" | Player - if (getToken(2).equals("vehicle")) { + if (getToken(2) == "vehicle"sv) { auto vehicle = jessilib::split_once_view(getToken(3), ','); TeamType team = RenX::getTeam(vehicle.first); Jupiter::ReferenceString vehicle_name = vehicle.second; @@ -2251,7 +2269,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVehicleSpawn(*this, team, vehicle_name); } } - else if (getToken(2).equals("player")) { + else if (getToken(2) == "player"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(3)); Jupiter::ReferenceString character = getToken(5); player->character = character; @@ -2259,14 +2277,14 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnSpawn(*this, *player, character); } } - else if (getToken(2).equals("bot")) { + else if (getToken(2) == "bot"sv) { RenX::PlayerInfo *bot = parseGetPlayerOrAdd(getToken(3)); for (const auto& plugin : xPlugins) { plugin->RenX_OnBotJoin(*this, *bot); } } } - else if (subHeader.equals("Crate;")) + else if (subHeader == "Crate;"sv) { // "vehicle" | Vehicle | "by" | Player // "death" | "by" | Player @@ -2281,7 +2299,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { // "abduction" | "by" | Player // "by" | Player Jupiter::ReferenceString type = getToken(2); - if (type.equals("vehicle")) + if (type == "vehicle"sv) { Jupiter::ReferenceString vehicle = getToken(3); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2289,7 +2307,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVehicleCrate(*this, *player, vehicle); } } - else if (type.equals("tsvehicle")) + else if (type == "tsvehicle"sv) { Jupiter::ReferenceString vehicle = getToken(3); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2297,7 +2315,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVehicleCrate(*this, *player, vehicle); } } - else if (type.equals("ravehicle")) + else if (type == "ravehicle"sv) { Jupiter::ReferenceString vehicle = getToken(3); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2305,14 +2323,14 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVehicleCrate(*this, *player, vehicle); } } - else if (type.equals("death") || type.equals("suicide")) + else if (type == "death"sv || type == "suicide"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnDeathCrate(*this, *player); } } - else if (type.equals("money")) + else if (type == "money"sv) { int amount = getToken(3).asInt(); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2320,7 +2338,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnMoneyCrate(*this, *player, amount); } } - else if (type.equals("character")) + else if (type == "character"sv) { Jupiter::ReferenceString character = getToken(3); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2329,7 +2347,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } player->character = character; } - else if (type.equals("spy")) + else if (type == "spy"sv) { Jupiter::ReferenceString character = getToken(3); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(5)); @@ -2338,42 +2356,42 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } player->character = character; } - else if (type.equals("refill")) + else if (type == "refill"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnRefillCrate(*this, *player); } } - else if (type.equals("timebomb")) + else if (type == "timebomb"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnTimeBombCrate(*this, *player); } } - else if (type.equals("speed")) + else if (type == "speed"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnSpeedCrate(*this, *player); } } - else if (type.equals("nuke")) + else if (type == "nuke"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnNukeCrate(*this, *player); } } - else if (type.equals("abduction")) + else if (type == "abduction"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); for (const auto& plugin : xPlugins) { plugin->RenX_OnAbductionCrate(*this, *player); } } - else if (type.equals("by")) + else if (type == "by"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(3)); for (const auto& plugin : xPlugins) { @@ -2382,7 +2400,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } else { RenX::PlayerInfo *player = nullptr; - if (getToken(3).equals("by")) { + if (getToken(3) == "by"sv) { player = parseGetPlayerOrAdd(getToken(4)); } @@ -2393,7 +2411,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("Death;")) + else if (subHeader == "Death;"sv) { // "player" | Player | "by" | Killer Player | "with" | Damage Type // "player" | Player | "died by" | Damage Type @@ -2405,7 +2423,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(playerToken); Jupiter::ReferenceString type = getToken(4); Jupiter::ReferenceString damageType; - if (type.equals("by")) + if (type == "by"sv) { damageType = getToken(7); Jupiter::ReferenceString killerData = getToken(5); @@ -2422,7 +2440,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { player->deaths++; RenX::PlayerInfo *killer = getPlayerOrAdd(parsed_token.name, parsed_token.id, parsed_token.team, parsed_token.isBot, 0, Jupiter::ReferenceString::empty, Jupiter::ReferenceString::empty); killer->kills++; - if (damageType.equals("Rx_DmgType_Headshot")) { + if (damageType == "Rx_DmgType_Headshot"sv) { killer->headshots++; } for (const auto& plugin : xPlugins) { @@ -2430,7 +2448,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (type.equals("died by")) + else if (type == "died by"sv) { player->deaths++; damageType = getToken(5); @@ -2438,7 +2456,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnDie(*this, *player, damageType); } } - else if (type.equals("suicide by")) + else if (type == "suicide by"sv) { player->deaths++; player->suicides++; @@ -2451,13 +2469,13 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Stolen;")) + else if (subHeader == "Stolen;"sv) { // Vehicle | "by" | Player // Vehicle | "bound to" | Bound Player | "by" | Player Jupiter::ReferenceString vehicle = getToken(2); Jupiter::ReferenceString byLine = getToken(3); - if (byLine.equals("by")) + if (byLine == "by"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); player->steals++; @@ -2465,7 +2483,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnSteal(*this, *player, vehicle); } } - else if (byLine.equals("bound to")) + else if (byLine == "bound to"sv) { RenX::PlayerInfo *victim = parseGetPlayerOrAdd(getToken(4)); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(6)); @@ -2477,7 +2495,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Destroyed;")) + else if (subHeader == "Destroyed;"sv) { // "vehicle" | Vehicle | "by" | Killer | "with" | Damage Type // "defence" | Defence | "by" | Killer | "with" | Damage Type @@ -2485,17 +2503,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { // "building" | Building | "by" | Killer | "with" | Damage Type Jupiter::ReferenceString typeToken = getToken(2); RenX::ObjectType type = ObjectType::None; - if (typeToken.equals("vehicle")) + if (typeToken == "vehicle"sv) type = ObjectType::Vehicle; - else if (typeToken.equals("defence") || typeToken.equals("emplacement")) + else if (typeToken == "defence"sv || typeToken == "emplacement"sv) type = ObjectType::Defence; - else if (typeToken.equals("building")) + else if (typeToken == "building"sv) type = ObjectType::Building; if (type != ObjectType::None) { - Jupiter::ReferenceString objectName = getToken(3); - if (getToken(4).equals("by")) + std::string_view objectName = getToken(3); + if (getToken(4) == "by"sv) { Jupiter::ReferenceString killerToken = getToken(5); auto parsed_token = parsePlayerData(killerToken); @@ -2503,7 +2521,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { if (!parsed_token.isPlayer || parsed_token.id == 0) { for (const auto& plugin : xPlugins) { - plugin->RenX_OnDestroy(*this, parsed_token.name, parsed_token.team, objectName, RenX::getEnemy(parsed_token.team), damageType, type); + plugin->RenX_OnDestroy(*this, parsed_token.name, parsed_token.team, Jupiter::ReferenceString{objectName}, RenX::getEnemy(parsed_token.team), damageType, type); } } else { @@ -2516,10 +2534,11 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { case RenX::ObjectType::Building: player->buildingKills++; { - auto internalsStr = "_Internals"_jrs; + auto internalsStr = "_Internals"sv; RenX::BuildingInfo *building; - if (objectName.findi(internalsStr) != Jupiter::INVALID_INDEX) - objectName.truncate(internalsStr.size()); + if (jessilib::findi(objectName, internalsStr) != objectName.npos) { + objectName.remove_suffix(internalsStr.size()); + } building = getBuildingByName(objectName); if (building != nullptr) { @@ -2538,17 +2557,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { break; } for (const auto& plugin : xPlugins) { - plugin->RenX_OnDestroy(*this, *player, objectName, RenX::getEnemy(player->team), damageType, type); + plugin->RenX_OnDestroy(*this, *player, Jupiter::ReferenceString{objectName}, RenX::getEnemy(player->team), damageType, type); } } } } onAction(); } - else if (subHeader.equals("Donated;")) + else if (subHeader == "Donated;"sv) { // Amount | "to" | Recipient | "by" | Donor - if (getToken(5).equals("by")) + if (getToken(5) == "by"sv) { double amount = getToken(2).asDouble(); RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(4)); @@ -2558,7 +2577,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("OverMine;")) + else if (subHeader == "OverMine;"sv) { // Player | "near" | Location RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -2568,22 +2587,22 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnOverMine(*this, *player, location); } } - else if (subHeader.equals("MatchEnd;")) { + else if (subHeader == "MatchEnd;"sv) { // "winner" | Winner | Reason("TimeLimit" etc) | "GDI=" GDI Score | "Nod=" Nod Score // "tie" | Reason | "GDI=" GDI Score | "Nod=" Nod Score Jupiter::ReferenceString winTieToken = getToken(2); m_match_state = 2; - if (winTieToken.equals("winner")) { + if (winTieToken == "winner"sv) { Jupiter::ReferenceString sWinType = getToken(4); WinType winType = WinType::Unknown; - if (sWinType.equals("TimeLimit")) + if (sWinType == "TimeLimit"sv) winType = WinType::Score; - else if (sWinType.equals("Buildings")) + else if (sWinType == "Buildings"sv) winType = WinType::Base; - else if (sWinType.equals("triggered")) + else if (sWinType == "triggered"sv) winType = WinType::Shutdown; - else if (sWinType.equals("Surrender")) + else if (sWinType == "Surrender"sv) winType = WinType::Surrender; TeamType team = RenX::getTeam(getToken(3)); @@ -2595,7 +2614,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnGameOver(*this, winType, team, gScore, nScore); } } - else if (winTieToken.equals("tie")) { + else if (winTieToken == "tie"sv) { int gScore = Jupiter::ReferenceString(jessilib::split_once_view(getToken(4), '=').second).asInt(); int nScore = Jupiter::ReferenceString(jessilib::split_once_view(getToken(5), '=').second).asInt(); for (const auto& plugin : xPlugins) { @@ -2612,9 +2631,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("CHAT")) + else if (tokens[0] == "CHAT"sv) { - if (subHeader.equals("Say;")) + if (subHeader == "Say;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); @@ -2624,7 +2643,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("TeamSay;")) + else if (subHeader == "TeamSay;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); @@ -2634,7 +2653,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Radio;")) + else if (subHeader == "Radio;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); @@ -2643,7 +2662,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("AdminMsg;")) + else if (subHeader == "AdminMsg;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); @@ -2652,7 +2671,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("AdminWarn;")) + else if (subHeader == "AdminWarn;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); @@ -2661,7 +2680,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("PAdminMsg;")) + else if (subHeader == "PAdminMsg;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); RenX::PlayerInfo *target = parseGetPlayerOrAdd(getToken(4)); @@ -2671,7 +2690,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("PAdminWarn;")) + else if (subHeader == "PAdminWarn;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); RenX::PlayerInfo *target = parseGetPlayerOrAdd(getToken(4)); @@ -2681,54 +2700,54 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("HostSay;")) + else if (subHeader == "HostSay;"sv) { Jupiter::ReferenceString message = getToken(3); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostChat(*this, message); } } - else if (subHeader.equals("HostPMsg;")) { + else if (subHeader == "HostPMsg;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostPage(*this, *player, message); } } - else if (subHeader.equals("HostAdminMsg;")) + else if (subHeader == "HostAdminMsg;"sv) { Jupiter::ReferenceString message = getToken(3); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostAdminMessage(*this, message); } } - else if (subHeader.equals("HostAdminWarn;")) + else if (subHeader == "HostAdminWarn;"sv) { Jupiter::ReferenceString message = getToken(3); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostWarnMessage(*this, message); } } - else if (subHeader.equals("HostPAdminMsg;")) { + else if (subHeader == "HostPAdminMsg;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostAdminPMessage(*this, *player, message); } } - else if (subHeader.equals("HostPAdminWarn;")) { + else if (subHeader == "HostPAdminWarn;"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString message = getToken(4); for (const auto& plugin : xPlugins) { plugin->RenX_OnHostWarnPMessage(*this, *player, message); } } - /*else if (subHeader.equals("AdminSay;")) + /*else if (subHeader == "AdminSay;"sv) { // Player | "said:" | Message onAction(); } - else if (subHeader.equals("ReportSay;")) + else if (subHeader == "ReportSay;"sv) { // Player | "said:" | Message onAction(); @@ -2741,18 +2760,18 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("PLAYER")) + else if (tokens[0] == "PLAYER"sv) { - if (subHeader.equals("Enter;")) + if (subHeader == "Enter;"sv) { auto parsed_token = parsePlayerData(getToken(2)); uint64_t steamid = 0; RenX::PlayerInfo *player; - if (getToken(5).equals("hwid")) + if (getToken(5) == "hwid"sv) { // New format - if (getToken(7).equals("steamid")) + if (getToken(7) == "steamid"sv) steamid = getToken(8).asUnsignedLongLong(); player = getPlayerOrAdd(parsed_token.name, parsed_token.id, parsed_token.team, parsed_token.isBot, steamid, getToken(4), getToken(6)); @@ -2760,7 +2779,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { else { // Old format - if (getToken(5).equals("steamid")) + if (getToken(5) == "steamid"sv) steamid = getToken(6).asUnsignedLongLong(); player = getPlayerOrAdd(parsed_token.name, parsed_token.id, parsed_token.team, parsed_token.isBot, steamid, getToken(4), Jupiter::ReferenceString::empty); @@ -2790,13 +2809,13 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnJoin(*this, *player); } } - else if (subHeader.equals("TeamJoin;")) + else if (subHeader == "TeamJoin;"sv) { // Player | "joined" | Team | "score" | Score | "last round score" | Score | "time" | Timestamp // Player | "joined" | Team | "left" | Old Team | "score" | Score | "last round score" | Score | "time" | Timestamp RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); player->character = Jupiter::ReferenceString::empty; - if (getToken(5) == "left") + if (getToken(5) == "left"sv) { RenX::TeamType oldTeam = RenX::getTeam(getToken(6)); if (oldTeam != RenX::TeamType::None) @@ -2805,11 +2824,11 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("HWID;")) + else if (subHeader == "HWID;"sv) { // ["player" |] Player | "hwid" | HWID size_t offset = 0; - if (getToken(2).equals("player")) + if (getToken(2) == "player"sv) offset = 1; RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2 + offset)); @@ -2829,7 +2848,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("Exit;")) + else if (subHeader == "Exit;"sv) { // Player Jupiter::ReferenceString playerToken = getToken(2); @@ -2847,7 +2866,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { if (m_gameover_when_empty && this->players.size() == getBotCount()) gameover(); } - else if (subHeader.equals("Kick;")) + else if (subHeader == "Kick;"sv) { // Player | "for" | Reason const Jupiter::ReadableString &reason = getToken(4); @@ -2856,7 +2875,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnKick(*this, *player, reason); } } - else if (subHeader.equals("NameChange;")) + else if (subHeader == "NameChange;"sv) { // Player | "to:" | New Name RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -2867,7 +2886,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { player->name = newName; onAction(); } - else if (subHeader.equals("ChangeID;")) + else if (subHeader == "ChangeID;"sv) { // "to" | New ID | "from" | Old ID int oldID = getToken(5).asInt(); @@ -2890,7 +2909,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("Rank;")) + else if (subHeader == "Rank;"sv) { // Player | Rank if (m_devBot == false) @@ -2904,7 +2923,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("Dev;")) + else if (subHeader == "Dev;"sv) { // Player | true/false RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -2915,7 +2934,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnDev(*this, *player); } } - else if (subHeader.equals("SpeedHack;")) + else if (subHeader == "SpeedHack;"sv) { // Player RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -2923,7 +2942,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnSpeedHack(*this, *player); } } - else if (subHeader.equals("Command;")) + else if (subHeader == "Command;"sv) { // Player | Command RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -2943,53 +2962,53 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("RCON")) + else if (tokens[0] == "RCON"sv) { - if (subHeader.equals("Command;")) + if (subHeader == "Command;"sv) { // User | "executed:" | Command - Jupiter::ReferenceString user = getToken(2); - if (getToken(3).equals("executed:")) + std::string_view user = getToken(2); + if (getToken(3) == "executed:"sv) { Jupiter::ReferenceString command = gotoToken(4); Jupiter::ReferenceString cmd = command.getWord(0, " "); for (const auto& plugin : xPlugins) { - plugin->RenX_OnExecute(*this, user, command); + plugin->RenX_OnExecute(*this, Jupiter::ReferenceString{user}, command); } - if (m_rconUser.equals(user)) + if (m_rconUser == user) { m_lastCommand = cmd; m_lastCommandParams = command.gotoWord(1, " "); } } } - else if (subHeader.equals("Subscribed;")) + else if (subHeader == "Subscribed;"sv) { // User Jupiter::ReferenceString user = getToken(2); - if (user.equals(m_rconUser)) + if (user == m_rconUser) m_subscribed = true; for (const auto& plugin : xPlugins) { plugin->RenX_OnSubscribe(*this, user); } } - else if (subHeader.equals("Unsubscribed;")) + else if (subHeader == "Unsubscribed;"sv) { // User Jupiter::ReferenceString user = getToken(2); - if (user.equals(m_rconUser)) + if (user == m_rconUser) m_subscribed = false; for (const auto& plugin : xPlugins) { plugin->RenX_OnUnsubscribe(*this, user); } } - else if (subHeader.equals("Blocked;")) + else if (subHeader == "Blocked;"sv) { // User | Reason="(Denied by IP Policy)" / "(Not on Whitelist)" Jupiter::ReferenceString user = getToken(2); @@ -2998,7 +3017,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnBlock(*this, user, message); } } - else if (subHeader.equals("Connected;")) + else if (subHeader == "Connected;"sv) { // User Jupiter::ReferenceString user = getToken(2); @@ -3006,7 +3025,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnConnect(*this, user); } } - else if (subHeader.equals("Authenticated;")) + else if (subHeader == "Authenticated;"sv) { // User Jupiter::ReferenceString user = getToken(2); @@ -3014,7 +3033,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnAuthenticate(*this, user); } } - else if (subHeader.equals("Banned;")) + else if (subHeader == "Banned;"sv) { // User | "reason" | Reason="(Too many password attempts)" Jupiter::ReferenceString user = getToken(2); @@ -3023,7 +3042,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnBan(*this, user, message); } } - else if (subHeader.equals("InvalidPassword;")) + else if (subHeader == "InvalidPassword;"sv) { // User Jupiter::ReferenceString user = getToken(2); @@ -3031,7 +3050,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnInvalidPassword(*this, user); } } - else if (subHeader.equals("Dropped;")) + else if (subHeader == "Dropped;"sv) { // User | "reason" | Reason="(Auth Timeout)" Jupiter::ReferenceString user = getToken(2); @@ -3040,7 +3059,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnDrop(*this, user, message); } } - else if (subHeader.equals("Disconnected;")) + else if (subHeader == "Disconnected;"sv) { // User Jupiter::ReferenceString user = getToken(2); @@ -3048,7 +3067,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnDisconnect(*this, user); } } - else if (subHeader.equals("StoppedListen;")) + else if (subHeader == "StoppedListen;"sv) { // Reason="(Reached Connection Limit)" Jupiter::ReferenceString message = getToken(2); @@ -3056,7 +3075,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnStopListen(*this, message); } } - else if (subHeader.equals("ResumedListen;")) + else if (subHeader == "ResumedListen;"sv) { // Reason="(No longer at Connection Limit)" Jupiter::ReferenceString message = getToken(2); @@ -3064,7 +3083,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnResumeListen(*this, message); } } - else if (subHeader.equals("Warning;")) + else if (subHeader == "Warning;"sv) { // Warning="(Hit Max Attempt Records - You should investigate Rcon attempts and/or decrease prune time)" Jupiter::ReferenceString message = getToken(2); @@ -3080,12 +3099,12 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("ADMIN")) + else if (tokens[0] == "ADMIN"sv) { - if (subHeader.equals("Rcon;")) + if (subHeader == "Rcon;"sv) { // Player | "executed:" | Command - if (getToken(3).equals("executed:")) + if (getToken(3) == "executed:"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); Jupiter::ReferenceString cmd = gotoToken(4); @@ -3094,7 +3113,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("Login;")) + else if (subHeader == "Login;"sv) { // Player | "as" | Type="moderator" / "administrator" RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -3103,7 +3122,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnAdminLogin(*this, *player); } } - else if (subHeader.equals("Logout;")) + else if (subHeader == "Logout;"sv) { // Player | "as" | Type="moderator" / "administrator" RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -3114,7 +3133,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { player->adminType.erase(); } - else if (subHeader.equals("Granted;")) + else if (subHeader == "Granted;"sv) { // Player | "as" | Type="moderator" / "administrator" RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(2)); @@ -3131,9 +3150,9 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("VOTE")) + else if (tokens[0] == "VOTE"sv) { - if (subHeader.equals("Called;")) + if (subHeader == "Called;"sv) { // TeamType="Global" / "GDI" / "Nod" / "" | VoteType="Rx_VoteMenuChoice_"... | "by" | Player // Pre-5.15: @@ -3152,16 +3171,16 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { Jupiter::ReferenceString voteType = getToken(3); Jupiter::ReferenceString teamToken = getToken(2); RenX::TeamType team; - if (teamToken.equals("Global")) + if (teamToken == "Global"sv) team = TeamType::None; - else if (teamToken.equals("GDI")) + else if (teamToken == "GDI"sv) team = TeamType::GDI; - else if (teamToken.equals("Nod")) + else if (teamToken == "Nod"sv) team = TeamType::Nod; else team = TeamType::Other; - if (getToken(4).equals("parameters")) // Pre-5.15 style parameters; throw away parameters + if (getToken(4) == "parameters"sv) // Pre-5.15 style parameters; throw away parameters { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(tokens.size() - 1)); @@ -3185,15 +3204,15 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { { voteType.shiftRight(18); - if (voteType.equals("AddBots"_jrs)) + if (voteType == "AddBots"sv) { Jupiter::ReferenceString victimToken = getToken(7); RenX::TeamType victim; - if (teamToken.equals("Global")) + if (teamToken == "Global"sv) victim = TeamType::None; - else if (teamToken.equals("GDI")) + else if (teamToken == "GDI"sv) victim = TeamType::GDI; - else if (teamToken.equals("Nod")) + else if (teamToken == "Nod"sv) victim = TeamType::Nod; else victim = TeamType::Other; @@ -3205,35 +3224,35 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVoteAddBots(*this, team, *player, victim, amount, skill); } } - else if (voteType.equals("ChangeMap"_jrs)) + else if (voteType == "ChangeMap"sv) { for (const auto& plugin : xPlugins) { plugin->RenX_OnVoteChangeMap(*this, team, *player); } } - else if (voteType.equals("Kick"_jrs)) + else if (voteType == "Kick"sv) { RenX::PlayerInfo *victim = parseGetPlayerOrAdd(getToken(7)); for (const auto& plugin : xPlugins) { plugin->RenX_OnVoteKick(*this, team, *player, *victim); } } - else if (voteType.equals("MineBan"_jrs)) + else if (voteType == "MineBan"sv) { RenX::PlayerInfo *victim = parseGetPlayerOrAdd(getToken(7)); for (const auto& plugin : xPlugins) { plugin->RenX_OnVoteMineBan(*this, team, *player, *victim); } } - else if (voteType.equals("RemoveBots"_jrs)) + else if (voteType == "RemoveBots"sv) { Jupiter::ReferenceString victimToken = getToken(7); RenX::TeamType victim; - if (teamToken.equals("Global")) + if (teamToken == "Global"sv) victim = TeamType::None; - else if (teamToken.equals("GDI")) + else if (teamToken == "GDI"sv) victim = TeamType::GDI; - else if (teamToken.equals("Nod")) + else if (teamToken == "Nod"sv) victim = TeamType::Nod; else victim = TeamType::Other; @@ -3244,19 +3263,19 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVoteRemoveBots(*this, team, *player, victim, amount); } } - else if (voteType.equals("RestartMap"_jrs)) + else if (voteType == "RestartMap"sv) { for (const auto& plugin : xPlugins) { plugin->RenX_OnVoteRestartMap(*this, team, *player); } } - else if (voteType.equals("Surrender"_jrs)) + else if (voteType == "Surrender"sv) { for (const auto& plugin : xPlugins) { plugin->RenX_OnVoteSurrender(*this, team, *player); } } - else if (voteType.equals("Survey"_jrs)) + else if (voteType == "Survey"sv) { const Jupiter::ReadableString &text = getToken(7); for (const auto& plugin : xPlugins) { @@ -3279,23 +3298,23 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } onAction(); } - else if (subHeader.equals("Results;")) + else if (subHeader == "Results;"sv) { // TeamType="Global" / "GDI" / "Nod" / "" | VoteType="Rx_VoteMenuChoice_"... | Success="pass" / "fail" | "Yes=" Yes votes | "No=" No votes Jupiter::ReferenceString voteType = getToken(3); Jupiter::ReferenceString teamToken = getToken(2); RenX::TeamType team; - if (teamToken.equals("Global")) + if (teamToken == "Global"sv) team = TeamType::None; - else if (teamToken.equals("GDI")) + else if (teamToken == "GDI"sv) team = TeamType::GDI; - else if (teamToken.equals("Nod")) + else if (teamToken == "Nod"sv) team = TeamType::Nod; else team = TeamType::Other; bool success = true; - if (getToken(4).equals("fail")) + if (getToken(4) == "fail"sv) success = false; int yesVotes = 0; @@ -3318,17 +3337,17 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnVoteOver(*this, team, voteType, success, yesVotes, noVotes); } } - else if (subHeader.equals("Cancelled;")) + else if (subHeader == "Cancelled;"sv) { // TeamType="Global" / "GDI" / "Nod" | VoteType="Rx_VoteMenuChoice_"... Jupiter::ReferenceString voteType = getToken(3); Jupiter::ReferenceString teamToken = getToken(2); RenX::TeamType team; - if (teamToken.equals("Global")) + if (teamToken == "Global"sv) team = TeamType::None; - else if (teamToken.equals("GDI")) + else if (teamToken == "GDI"sv) team = TeamType::GDI; - else if (teamToken.equals("Nod")) + else if (teamToken == "Nod"sv) team = TeamType::Nod; else team = TeamType::Other; @@ -3345,15 +3364,15 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("MAP")) + else if (tokens[0] == "MAP"sv) { - if (subHeader.equals("Changing;")) + if (subHeader == "Changing;"sv) { // Map | Mode="seamless" / "nonseamless" Jupiter::ReferenceString map = getToken(2); m_match_state = 3; - if (getToken(3).equals("seamless")) + if (getToken(3) == "seamless"sv) m_seamless = true; else m_seamless = false; @@ -3365,7 +3384,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { m_map = map; onMapChange(); } - else if (subHeader.equals("Loaded;")) + else if (subHeader == "Loaded;"sv) { // Map Jupiter::ReferenceString map = getToken(2); @@ -3377,7 +3396,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { plugin->RenX_OnMapLoad(*this, map); } } - else if (subHeader.equals("Start;")) + else if (subHeader == "Start;"sv) { // Map Jupiter::ReferenceString map = getToken(2); @@ -3399,15 +3418,15 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (tokens[0].equals("DEMO")) + else if (tokens[0] == "DEMO"sv) { - if (subHeader.equals("Record;")) + if (subHeader == "Record;"sv) { // "client request by" | Player // "admin command by" | Player // "rcon command" Jupiter::ReferenceString type = getToken(2); - if (type.equals("client request by") || type.equals("admin command by")) + if (type == "client request by"sv || type == "admin command by"sv) { RenX::PlayerInfo *player = parseGetPlayerOrAdd(getToken(3)); for (const auto& plugin : xPlugins) { @@ -3422,7 +3441,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - else if (subHeader.equals("RecordStop;")) + else if (subHeader == "RecordStop;"sv) { // Empty for (const auto& plugin : xPlugins) { @@ -3437,7 +3456,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { } } } - /*else if (tokens[0].equals("ERROR;")) // Decided to disable this entirely, since it's unreachable anyways. + /*else if (tokens[0] == "ERROR;"sv) // Decided to disable this entirely, since it's unreachable anyways. { // Should be under RCON. // "Could not open TCP Port" Port "- Rcon Disabled" @@ -3529,7 +3548,7 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) { case 'a': { m_rconUser = Jupiter::ReferenceString::substring(line, 1); - if (m_rconUser.equals(RenX::DevBotName)) + if (m_rconUser == RenX::DevBotName) m_devBot = true; for (const auto& plugin : xPlugins) { @@ -3633,7 +3652,7 @@ unsigned int RenX::Server::getGameVersionNumber() const { return m_gameVersionNumber; } -const Jupiter::ReadableString &RenX::Server::getGameVersion() const { +std::string_view RenX::Server::getGameVersion() const { return m_gameVersion; } @@ -3641,14 +3660,14 @@ std::string_view RenX::Server::getRCONUsername() const { return m_rconUser; } -RenX::Server::Server(Jupiter::Socket &&socket, const Jupiter::ReadableString &configurationSection) : Server(configurationSection) { +RenX::Server::Server(Jupiter::Socket &&socket, std::string_view configurationSection) : Server(configurationSection) { m_sock = std::move(socket); m_hostname = m_sock.getRemoteHostname(); sendSocket(Jupiter::StringS::Format("a%.*s\n", m_pass.size(), m_pass.ptr())); m_connected = true; } -RenX::Server::Server(const Jupiter::ReadableString &configurationSection) { +RenX::Server::Server(std::string_view configurationSection) { m_configSection = configurationSection; m_calc_uuid = RenX::default_uuid_func; init(*RenX::getCore()->getConfig().getSection(m_configSection)); @@ -3690,30 +3709,30 @@ void RenX::Server::init(const Jupiter::Config &config) { Jupiter::Config &commandsFile = RenX::getCore()->getCommandsFile(); m_commandAccessLevels = commandsFile.getSection(m_configSection); - m_commandAliases = commandsFile.getSection(m_configSection + ".Aliases"_jrs); + m_commandAliases = commandsFile.getSection(m_configSection + ".Aliases"s); for (const auto& command : RenX::GameMasterCommandList) { addCommand(command->copy()); } - auto load_basic_commands = [this, &commandsFile](const Jupiter::ReadableString §ion_prefix) + auto load_basic_commands = [this, &commandsFile](std::string section_prefix) { - Jupiter::Config *basic_commands = commandsFile.getSection(section_prefix + ".Basic"_jrs); + Jupiter::Config *basic_commands = commandsFile.getSection(section_prefix + ".Basic"s); if (basic_commands != nullptr) { - Jupiter::Config *basic_commands_help = commandsFile.getSection(section_prefix + ".Basic.Help"_jrs); + Jupiter::Config *basic_commands_help = commandsFile.getSection(section_prefix + ".Basic.Help"s); for (auto& command : basic_commands->getTable()) { if (getCommand(command.first) == nullptr) { - const auto& help_str = basic_commands_help == nullptr ? ""_jrs : basic_commands_help->get(command.second, ""_jrs); - addCommand(new RenX::BasicGameCommand(command.first, command.second,help_str)); + const auto& help_str = basic_commands_help == nullptr ? ""sv : basic_commands_help->get(command.second, ""sv); + addCommand(new RenX::BasicGameCommand(command.first, command.second, help_str)); } } } }; load_basic_commands(m_configSection); - load_basic_commands("Default"_jrs); + load_basic_commands("Default"s); } RenX::Server::~Server() { diff --git a/src/Plugins/RenX/RenX.Core/RenX_Server.h b/src/Plugins/RenX/RenX.Core/RenX_Server.h index b8659bd..7fbfc65 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Server.h +++ b/src/Plugins/RenX/RenX.Core/RenX_Server.h @@ -240,7 +240,7 @@ namespace RenX * @param message Message to send in-game. * @return The number of bytes sent on success, less than or equal to zero otherwise. */ - int sendMessage(const Jupiter::ReadableString &message); + int sendMessage(std::string_view message); /** * @brief Sends an in-game message to a player in the server. @@ -249,7 +249,7 @@ namespace RenX * @param message Message to send in-game. * @return The number of bytes sent on success, less than or equal to zero otherwise. */ - int sendMessage(const RenX::PlayerInfo &player, const Jupiter::ReadableString &message); + int sendMessage(const RenX::PlayerInfo &player, std::string_view message); /** * @brief Sends an in-game admin message to the server. @@ -291,7 +291,7 @@ namespace RenX * @param name Name of the player. * @return A player's data on success, nullptr otherwise. */ - RenX::BuildingInfo *getBuildingByName(const Jupiter::ReadableString &name) const; + RenX::BuildingInfo *getBuildingByName(std::string_view name) const; /** * @brief Checks if a map name is in the rotation. @@ -299,15 +299,15 @@ namespace RenX * @param name Name of map to search for * @return True if the map exists, false otherwise. */ - bool hasMapInRotation(const Jupiter::ReadableString &name) const; + bool hasMapInRotation(std::string_view name) const; /** * @brief Searches for a map based on a part of its name. * * @param name Part of the map's name to search for - * @return A map's full name if it exists, nullptr otherwise. + * @return A map's full name if it exists, an empty view otherwise. */ - const Jupiter::ReadableString *getMapName(const Jupiter::ReadableString &name) const; + std::string_view getMapName(std::string_view name) const; /** * @brief Fetches the RCON command currently being processed. @@ -386,7 +386,7 @@ namespace RenX * @param name Name of the player. * @return A player's data on success, nullptr otherwise. */ - RenX::PlayerInfo *getPlayerByPartNameFast(const Jupiter::ReadableString &partName) const; + RenX::PlayerInfo *getPlayerByPartNameFast(std::string_view partName) const; /** * @brief Formats a player's Steam ID into a readable string. @@ -450,7 +450,7 @@ namespace RenX * * @param id Player ID of the player to ban. */ - void banPlayer(int id, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason); + void banPlayer(int id, std::string_view banner, std::string_view reason); /** * @brief Bans a player from the server. @@ -458,7 +458,7 @@ namespace RenX * @param player Data of the player to ban. * @param length Duration of the ban (0 for permanent). */ - void banPlayer(const RenX::PlayerInfo &player, const Jupiter::ReadableString &banner, const Jupiter::ReadableString &reason, std::chrono::seconds length = std::chrono::seconds::zero()); + void banPlayer(const RenX::PlayerInfo &player, std::string_view banner, std::string_view reason, std::chrono::seconds length = std::chrono::seconds::zero()); /** * @brief Removes a player's data based on their ID number. @@ -530,7 +530,7 @@ namespace RenX * * @return True on success, false otherwise. */ - bool setMap(const Jupiter::ReadableString &map); + bool setMap(std::string_view map); /** * @brief Forces the current game to end. @@ -725,21 +725,21 @@ namespace RenX * * @param prefix Prefix to use. */ - void setPrefix(const Jupiter::ReadableString &prefix); + void setPrefix(std::string_view prefix); /** * @brief Fetches a server's game command prefix. * * @return The server's game command prefix. */ - const Jupiter::ReadableString &getCommandPrefix() const; + std::string_view getCommandPrefix() const; /** * @brief Sets a server's game command prefix. * * @param prefix Prefix to use. */ - void setCommandPrefix(const Jupiter::ReadableString &prefix); + void setCommandPrefix(std::string_view prefix); void setRanked(bool in_value); @@ -864,7 +864,7 @@ namespace RenX * @param trigger Trigger of the command to get * @return Command with the specified trigger. */ - GameCommand *getCommand(const Jupiter::ReadableString &trigger) const; + GameCommand *getCommand(std::string_view trigger) const; /** * @brief Returns the number of commands in the command list. @@ -903,7 +903,7 @@ namespace RenX * @param trigger Trigger of the command to remove. * @return True if a command was removed, false otherwise. */ - bool removeCommand(const Jupiter::ReadableString &trigger); + bool removeCommand(std::string_view trigger); /** * @brief Prototype of UUID calculation function. @@ -1031,7 +1031,7 @@ namespace RenX * * @return String containing the Game version */ - const Jupiter::ReadableString &getGameVersion() const; + std::string_view getGameVersion() const; /** * @brief Fetches the RCON user name. @@ -1046,14 +1046,14 @@ namespace RenX * @param socket Initialized Socket to use for the connection * @param configurationSection Configuration section to load from. */ - Server(Jupiter::Socket &&socket, const Jupiter::ReadableString &configurationSection); + Server(Jupiter::Socket &&socket, std::string_view configurationSection); /** * @brief Creates the Server object, and loads settings from the specified configuration section. * * @param configurationSection Configuration section to load from. */ - Server(const Jupiter::ReadableString &configurationSection); + Server(std::string_view configurationSection); /** * @brief Destructor for Server class. @@ -1144,11 +1144,11 @@ namespace RenX std::string m_clientHostname; std::string m_hostname; Jupiter::StringS m_pass; - Jupiter::StringS m_configSection; + std::string m_configSection; Jupiter::StringS m_rules; Jupiter::StringS m_ban_from_str; - Jupiter::StringS m_IRCPrefix; - Jupiter::StringS m_CommandPrefix; + std::string m_IRCPrefix; + std::string m_CommandPrefix; Jupiter::Config* m_commandAccessLevels; Jupiter::Config* m_commandAliases; }; diff --git a/src/Plugins/RenX/RenX.Core/RenX_Tags.cpp b/src/Plugins/RenX/RenX.Core/RenX_Tags.cpp index 083c83d..5840820 100644 --- a/src/Plugins/RenX/RenX.Core/RenX_Tags.cpp +++ b/src/Plugins/RenX/RenX.Core/RenX_Tags.cpp @@ -446,8 +446,8 @@ double get_ratio(double num, double denom) void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, const RenX::PlayerInfo *player, const RenX::PlayerInfo *victim, const RenX::BuildingInfo *building) { size_t index; - PROCESS_TAG(this->INTERNAL_DATE_TAG, Jupiter::ReferenceString(getTimeFormat(this->dateFmt.c_str()))); - PROCESS_TAG(this->INTERNAL_TIME_TAG, Jupiter::ReferenceString(getTimeFormat(this->timeFmt.c_str()))); + PROCESS_TAG(this->INTERNAL_DATE_TAG, std::string_view(getTimeFormat(this->dateFmt.c_str()))); + PROCESS_TAG(this->INTERNAL_TIME_TAG, std::string_view(getTimeFormat(this->timeFmt.c_str()))); if (server != nullptr) { PROCESS_TAG(this->INTERNAL_RCON_VERSION_TAG, Jupiter::StringS::Format("%u", server->getVersion())); @@ -457,9 +457,9 @@ void TagsImp::processTags(Jupiter::StringType &msg, const RenX::Server *server, PROCESS_TAG(this->INTERNAL_SERVER_NAME_TAG, server->getName()); PROCESS_TAG(this->INTERNAL_MAP_TAG, server->getMap().name); PROCESS_TAG(this->INTERNAL_MAP_GUID_TAG, RenX::formatGUID(server->getMap())); - PROCESS_TAG(this->INTERNAL_SERVER_HOSTNAME_TAG, Jupiter::ReferenceString(server->getHostname().c_str())); + PROCESS_TAG(this->INTERNAL_SERVER_HOSTNAME_TAG, server->getHostname()); PROCESS_TAG(this->INTERNAL_SERVER_PORT_TAG, Jupiter::StringS::Format("%u", server->getPort())); - PROCESS_TAG(this->INTERNAL_SOCKET_HOSTNAME_TAG, Jupiter::ReferenceString(server->getSocketHostname().c_str())); + PROCESS_TAG(this->INTERNAL_SOCKET_HOSTNAME_TAG, server->getSocketHostname()); PROCESS_TAG(this->INTERNAL_SOCKET_PORT_TAG, Jupiter::StringS::Format("%u", server->getSocketPort())); PROCESS_TAG(this->INTERNAL_SERVER_PREFIX_TAG, server->getPrefix()); if (player != nullptr) diff --git a/src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp b/src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp index 89b8354..9752783 100644 --- a/src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp +++ b/src/Plugins/RenX/RenX.ExcessiveHeadshots/RenX_ExcessiveHeadshots.cpp @@ -24,9 +24,9 @@ #include "RenX_Functions.h" using namespace Jupiter::literals; +using namespace std::literals; -bool RenX_ExcessiveHeadshotsPlugin::initialize() -{ +bool RenX_ExcessiveHeadshotsPlugin::initialize() { RenX_ExcessiveHeadshotsPlugin::ratio = this->config.get("HeadshotKillRatio"_jrs, 0.5); RenX_ExcessiveHeadshotsPlugin::minKills = this->config.get("Kills"_jrs, 10); RenX_ExcessiveHeadshotsPlugin::minKD = this->config.get("KillDeathRatio"_jrs, 5.0); @@ -35,19 +35,16 @@ bool RenX_ExcessiveHeadshotsPlugin::initialize() return true; } -int RenX_ExcessiveHeadshotsPlugin::OnRehash() -{ +int RenX_ExcessiveHeadshotsPlugin::OnRehash() { RenX::Plugin::OnRehash(); return this->initialize() ? 0 : -1; } -void RenX_ExcessiveHeadshotsPlugin::RenX_OnKill(RenX::Server &server, const RenX::PlayerInfo &player, const RenX::PlayerInfo &victim, const Jupiter::ReadableString &damageType) -{ +void RenX_ExcessiveHeadshotsPlugin::RenX_OnKill(RenX::Server &server, const RenX::PlayerInfo &player, const RenX::PlayerInfo &victim, const Jupiter::ReadableString &damageType) { if (player.kills < 3) return; - if (damageType.equals("Rx_DmgType_Headshot"_jrs)) - { + if (damageType == "Rx_DmgType_Headshot"sv) { unsigned int flags = 0; std::chrono::milliseconds game_time = server.getGameTime(player); double kps = game_time == std::chrono::milliseconds::zero() ? static_cast(player.kills) : static_cast(player.kills) / static_cast(game_time.count()); @@ -61,9 +58,9 @@ void RenX_ExcessiveHeadshotsPlugin::RenX_OnKill(RenX::Server &server, const RenX if (flags >= RenX_ExcessiveHeadshotsPlugin::minFlags) { server.banPlayer(player, "Jupiter Bot"_jrs, "Aimbot detected"_jrs); - server.sendPubChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u", player.name.size(), player.name.ptr(), player.kills, player.deaths, player.headshots); + server.sendPubChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u", player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots); const Jupiter::ReadableString &steamid = server.formatSteamID(player); - 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.ptr(), player.kills, player.deaths, player.headshots, player.ip.size(), player.ip.ptr(), steamid.size(), steamid.ptr()); + server.sendAdmChan(IRCCOLOR "13[Aimbot]" IRCCOLOR " %.*s was banned from the server! Kills: %u - Deaths: %u - Headshots: %u - IP: " IRCBOLD "%.*s" IRCBOLD " - Steam ID: " IRCBOLD "%.*s" IRCBOLD, player.name.size(), player.name.data(), player.kills, player.deaths, player.headshots, player.ip.size(), player.ip.ptr(), steamid.size(), steamid.ptr()); } } } diff --git a/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp index 11c3656..cb24b69 100644 --- a/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp +++ b/src/Plugins/RenX/RenX.KickDupes/RenX_KickDupes.cpp @@ -16,6 +16,7 @@ * Written by Jessica James */ +#include "jessilib/unicode.hpp" #include "RenX_Core.h" #include "RenX_Server.h" #include "RenX_Functions.h" @@ -23,6 +24,7 @@ #include "RenX_KickDupes.h" using namespace Jupiter::literals; +using namespace std::literals; bool RenX_KickDupesPlugin::initialize() { return true; @@ -36,7 +38,7 @@ void RenX_KickDupesPlugin::RenX_OnPlayerIdentify(RenX::Server &in_server, const } // Exempt development servers from this check - if (in_server.getGameVersion().findi("-DEV"_jrs) != Jupiter::INVALID_INDEX) { + if (jessilib::findi(in_server.getGameVersion(), "-DEV"sv) != std::string::npos) { return; } diff --git a/src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp b/src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp index c220095..e92c15b 100644 --- a/src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp +++ b/src/Plugins/RenX/RenX.Ladder.Web/RenX_Ladder_Web.cpp @@ -156,7 +156,7 @@ RenX_Ladder_WebPlugin pluginInstance; /** Search bar */ Jupiter::String generate_search(RenX::LadderDatabase *db) { - Jupiter::String result(256); + std::string result; result = R"database-search(