From c236a29ea9cb067ba2200be4c1b4190db9f96c4e Mon Sep 17 00:00:00 2001 From: JAJames Date: Tue, 19 Jul 2016 00:53:58 -0400 Subject: [PATCH] RenX.Core: Added plugin event RenX_OnPlayerCommand for PLAYER "Command;" RenX.Logging: Added logs for RenX_OnPlayerCommand --- Configs/RenX.Logging.ini | 3 +++ Release/Plugins/RenX.Core.lib | Bin 207686 -> 208484 bytes RenX.Core/RenX_Plugin.cpp | 5 +++++ RenX.Core/RenX_Plugin.h | 2 ++ RenX.Core/RenX_Server.cpp | 15 ++++++++++----- RenX.Core/RenX_Server.h | 9 +++++---- RenX.Logging/RenX_Logging.cpp | 28 ++++++++++++++++++++++++++++ RenX.Logging/RenX_Logging.h | 3 +++ 8 files changed, 56 insertions(+), 9 deletions(-) diff --git a/Configs/RenX.Logging.ini b/Configs/RenX.Logging.ini index 2d1fc92..ff5174f 100644 --- a/Configs/RenX.Logging.ini +++ b/Configs/RenX.Logging.ini @@ -69,6 +69,7 @@ MuteOwnExecute=true ;GamePublic=true ;GameOverPublic=true ;ExecutePublic=false +;PlayerCommandPuiblic=false ;SubscribePublic=false ;RCONPublic=false ;AdminLoginPublic=true @@ -105,6 +106,8 @@ MuteOwnExecute=true ;PartFormat=12[Part] {NAME} left the {TEAML}. ;KickFormat=04[Kick] {NAME} was 04kicked (04{MESSAGE}) ;PlayerExecuteFormat={NAME}07 executed: {MESSAGE} +;PlayerCommandSuccessFormat={NAME}: 10{MESSAGE} +;PlayerCommandFailFormat= ;PlayerFormat=12[Player] {MESSAGE} ;NameChangeFormat={NAME} changed their name to {NNAME}. ;TeamChangeFormat={NAME} switched teams! diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 8946302a8d33419ecfc3ff9eca6e414eba4463f0..a8e0d29a4fe19f8d49c4e17ce0bf5abd4a564365 100644 GIT binary patch delta 23362 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 sva*=_wU>i{eq<2*9npWBW0YWWV!vFvP delta 22841 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 diff --git a/RenX.Core/RenX_Plugin.cpp b/RenX.Core/RenX_Plugin.cpp index beeb3dc..49ade7f 100644 --- a/RenX.Core/RenX_Plugin.cpp +++ b/RenX.Core/RenX_Plugin.cpp @@ -131,6 +131,11 @@ void RenX::Plugin::RenX_OnExecute(Server *, const PlayerInfo *, const Jupiter::R return; } +void RenX::Plugin::RenX_OnPlayerCommand(Server *, const PlayerInfo *, const Jupiter::ReadableString &, GameCommand *) +{ + return; +} + void RenX::Plugin::RenX_OnSpeedHack(Server *, const PlayerInfo *) { return; diff --git a/RenX.Core/RenX_Plugin.h b/RenX.Core/RenX_Plugin.h index f0f3c20..915394f 100644 --- a/RenX.Core/RenX_Plugin.h +++ b/RenX.Core/RenX_Plugin.h @@ -36,6 +36,7 @@ namespace RenX struct BuildingInfo; class Plugin; class Server; + class GameCommand; class RENX_API Plugin : public Jupiter::Plugin { @@ -64,6 +65,7 @@ namespace RenX virtual void RenX_OnRank(Server *server, const PlayerInfo *player); virtual void RenX_OnDev(Server *server, const PlayerInfo *player); virtual void RenX_OnExecute(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &command); + virtual void RenX_OnPlayerCommand(Server *server, const PlayerInfo *player, const Jupiter::ReadableString &message, GameCommand *command); virtual void RenX_OnSpeedHack(Server *server, const PlayerInfo *player); virtual void RenX_OnPlayer(Server *server, const Jupiter::ReadableString &raw); diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index ae6450d..019a14c 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -1088,10 +1088,10 @@ unsigned int RenX::Server::getCommandCount() const return RenX::Server::commands.size(); } -unsigned int RenX::Server::triggerCommand(const Jupiter::ReadableString &trigger, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters) +RenX::GameCommand *RenX::Server::triggerCommand(const Jupiter::ReadableString &trigger, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters) { - unsigned int r = 0; RenX::GameCommand *cmd; + for (size_t i = 0; i < RenX::Server::commands.size(); i++) { cmd = RenX::Server::commands.get(i); @@ -1101,10 +1101,12 @@ unsigned int RenX::Server::triggerCommand(const Jupiter::ReadableString &trigger cmd->trigger(this, player, parameters); else RenX::Server::sendMessage(player, "Access Denied."_jrs); - ++r; + + return cmd; } } - return r; + + return nullptr; } void RenX::Server::addCommand(RenX::GameCommand *command) @@ -2734,7 +2736,10 @@ void RenX::Server::processLine(const Jupiter::ReadableString &line) RenX::PlayerInfo *player = parseGetPlayerOrAdd(tokens.getToken(2)); Jupiter::ReferenceString message = gotoToken(3); - this->triggerCommand(Jupiter::ReferenceString::getWord(message, 0, WHITESPACE), player, Jupiter::ReferenceString::gotoWord(message, 1, WHITESPACE)); + RenX::GameCommand *command = this->triggerCommand(Jupiter::ReferenceString::getWord(message, 0, WHITESPACE), player, Jupiter::ReferenceString::gotoWord(message, 1, WHITESPACE)); + + for (size_t i = 0; i < xPlugins.size(); i++) + xPlugins.get(i)->RenX_OnPlayerCommand(this, player, message, command); } else { diff --git a/RenX.Core/RenX_Server.h b/RenX.Core/RenX_Server.h index bb58ce4..e8b50d1 100644 --- a/RenX.Core/RenX_Server.h +++ b/RenX.Core/RenX_Server.h @@ -819,12 +819,13 @@ namespace RenX unsigned int getCommandCount() const; /** - * @brief Triggers commands matching a specified trigger. + * @brief Finds and triggers a matching GameCommand with the given parameters * - * @param trigger Trigger of the command to fire. - * @return Number of commands triggered. + * @param trigger Trigger of the command to fire + * @param parameters Parameters to pass to the command + * @return Command executed if a match is found, nullptr otherwise. */ - unsigned int triggerCommand(const Jupiter::ReadableString &trigger, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters); + RenX::GameCommand *triggerCommand(const Jupiter::ReadableString &trigger, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters); /** * @brief Adds a command to the server's game command list. diff --git a/RenX.Logging/RenX_Logging.cpp b/RenX.Logging/RenX_Logging.cpp index e3bda27..5b57b15 100644 --- a/RenX.Logging/RenX_Logging.cpp +++ b/RenX.Logging/RenX_Logging.cpp @@ -83,6 +83,7 @@ bool RenX_LoggingPlugin::initialize() RenX_LoggingPlugin::gamePublic = this->config.getBool(Jupiter::ReferenceString::empty, "GamePublic"_jrs, true); RenX_LoggingPlugin::gameOverPublic = this->config.getBool(Jupiter::ReferenceString::empty, "GameOverPublic"_jrs, true); RenX_LoggingPlugin::executePublic = this->config.getBool(Jupiter::ReferenceString::empty, "ExecutePublic"_jrs, false); + RenX_LoggingPlugin::playerCommandPublic = this->config.getBool(Jupiter::ReferenceString::empty, "PlayerCommandPublic"_jrs, false); RenX_LoggingPlugin::subscribePublic = this->config.getBool(Jupiter::ReferenceString::empty, "SubscribePublic"_jrs, false); RenX_LoggingPlugin::RCONPublic = this->config.getBool(Jupiter::ReferenceString::empty, "RCONPublic"_jrs, false); RenX_LoggingPlugin::adminLoginPublic = this->config.getBool(Jupiter::ReferenceString::empty, "AdminLoginPublic"_jrs, true); @@ -129,6 +130,11 @@ bool RenX_LoggingPlugin::initialize() RenX_LoggingPlugin::playerExecuteFmt = this->config.get(Jupiter::ReferenceString::empty, "PlayerExecuteFormat"_jrs, Jupiter::StringS::Format("%.*s" IRCCOLOR "07 executed: %.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); + RenX_LoggingPlugin::playerCommandSuccessFmt = this->config.get(Jupiter::ReferenceString::empty, "PlayerCommandSuccessFormat"_jrs, + Jupiter::StringS::Format("%.*s" IRCCOLOR ": " IRCCOLOR "10%.*s", RenX::tags->nameTag.size(), RenX::tags->nameTag.ptr(), RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); + + RenX_LoggingPlugin::playerCommandFailFmt = this->config.get(Jupiter::ReferenceString::empty, "PlayerCommandFailFormat"_jrs); + RenX_LoggingPlugin::playerFmt = this->config.get(Jupiter::ReferenceString::empty, "PlayerFormat"_jrs, Jupiter::StringS::Format(IRCCOLOR "12[Player]" IRCCOLOR " %.*s", RenX::tags->messageTag.size(), RenX::tags->messageTag.ptr())); @@ -488,6 +494,8 @@ bool RenX_LoggingPlugin::initialize() RenX::sanitizeTags(gameFmt); RenX::sanitizeTags(executeFmt); RenX::sanitizeTags(playerExecuteFmt); + RenX::sanitizeTags(playerCommandSuccessFmt); + RenX::sanitizeTags(playerCommandFailFmt); RenX::sanitizeTags(devBotExecuteFmt); RenX::sanitizeTags(hostChatFmt); RenX::sanitizeTags(hostPageFmt); @@ -669,6 +677,26 @@ void RenX_LoggingPlugin::RenX_OnExecute(RenX::Server *server, const RenX::Player } } +void RenX_LoggingPlugin::RenX_OnPlayerCommand(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &message, RenX::GameCommand *command) +{ + logFuncType func; + if (RenX_LoggingPlugin::playerCommandPublic) + func = &RenX::Server::sendLogChan; + else + func = &RenX::Server::sendAdmChan; + + Jupiter::String msg = command != nullptr + ? this->playerCommandSuccessFmt + : this->playerCommandFailFmt; + + if (msg.isNotEmpty()) + { + processTags(msg, server, player); + msg.replace(RenX::tags->INTERNAL_MESSAGE_TAG, message); + (server->*func)(msg); + } +} + void RenX_LoggingPlugin::RenX_OnPlayer(RenX::Server *server, const Jupiter::ReadableString &raw) { logFuncType func; diff --git a/RenX.Logging/RenX_Logging.h b/RenX.Logging/RenX_Logging.h index 62bc01c..04e6a0b 100644 --- a/RenX.Logging/RenX_Logging.h +++ b/RenX.Logging/RenX_Logging.h @@ -33,6 +33,7 @@ public: // RenX::Plugin void RenX_OnNameChange(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &newPlayerName) override; void RenX_OnTeamChange(RenX::Server *server, const RenX::PlayerInfo *player, const RenX::TeamType &oldTeam) override; void RenX_OnExecute(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &command) override; + void RenX_OnPlayerCommand(RenX::Server *server, const RenX::PlayerInfo *player, const Jupiter::ReadableString &message, RenX::GameCommand *command) override; void RenX_OnSpeedHack(RenX::Server *server, const RenX::PlayerInfo *player) override; void RenX_OnPlayer(RenX::Server *server, const Jupiter::ReadableString &raw) override; @@ -185,6 +186,7 @@ private: unsigned int gameOverPublic : 1; unsigned int gamePublic : 1; unsigned int executePublic : 1; + unsigned int playerCommandPublic : 1; unsigned int subscribePublic : 1; unsigned int RCONPublic : 1; unsigned int adminLoginPublic : 1; @@ -277,6 +279,7 @@ private: Jupiter::StringS gameOverScoreFmt; Jupiter::StringS gameFmt; Jupiter::StringS executeFmt, playerExecuteFmt, devBotExecuteFmt; + Jupiter::StringS playerCommandSuccessFmt, playerCommandFailFmt; Jupiter::StringS subscribeFmt; Jupiter::StringS rconFmt; Jupiter::StringS adminLoginFmt;