From 12eece3e0ed253e68e864a64adc166b88b99d030 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 3 Dec 2015 17:25:50 -0500 Subject: [PATCH] Added RenX::BasicGameCommand, and appropriate config sections in RenXGameCommands.ini. --- Release/Plugins/RenX.Core.lib | Bin 133826 -> 138134 bytes RenX.Core/RenX_GameCommand.cpp | 46 +++++++++++++++++++++++++++++++++ RenX.Core/RenX_GameCommand.h | 35 +++++++++++++++++++++++++ RenX.Core/RenX_Server.cpp | 36 ++++++++++++++++++++++++-- RenXGameCommands.ini | 24 +++++++++++++++++ 5 files changed, 139 insertions(+), 2 deletions(-) diff --git a/Release/Plugins/RenX.Core.lib b/Release/Plugins/RenX.Core.lib index 1085cc2babf88a07c46cbbbe5369ea4bf2d7fc50..e7ab2e8c865ce53eb89199d94e4f93039cc1cbb2 100644 GIT binary patch delta 18187 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 Ay#N3J diff --git a/RenX.Core/RenX_GameCommand.cpp b/RenX.Core/RenX_GameCommand.cpp index 0c550e1..e682868 100644 --- a/RenX.Core/RenX_GameCommand.cpp +++ b/RenX.Core/RenX_GameCommand.cpp @@ -22,6 +22,10 @@ Jupiter::ArrayList _GameMasterCommandList; Jupiter::ArrayList *RenX::GameMasterCommandList = &_GameMasterCommandList; +RenX::GameCommand::GameCommand(nullptr_t) +{ +} + RenX::GameCommand::GameCommand(const RenX::GameCommand &command) { //RenX::GameMasterCommandList->add(this); @@ -59,4 +63,46 @@ int RenX::GameCommand::getAccessLevel() void RenX::GameCommand::setAccessLevel(int accessLevel) { RenX::GameCommand::access = accessLevel; +} + +// Basic Game Command + +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::GameCommand(nullptr) +{ + this->addTrigger(in_trigger); + RenX::BasicGameCommand::message = in_message; + RenX::BasicGameCommand::help_message = in_help_message; +} + +void RenX::BasicGameCommand::trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters) +{ + source->sendMessage(RenX::BasicGameCommand::message); +} + +const Jupiter::ReadableString &RenX::BasicGameCommand::getHelp(const Jupiter::ReadableString &) +{ + static STRING_LITERAL_AS_NAMED_REFERENCE(defaultHelp, "Returns a basic text string."); + if (RenX::BasicGameCommand::help_message.isEmpty()) + return defaultHelp; + return RenX::BasicGameCommand::help_message; +} + +RenX::BasicGameCommand *RenX::BasicGameCommand::copy() +{ + RenX::BasicGameCommand *r = new RenX::BasicGameCommand(*this); + r->message = RenX::BasicGameCommand::message; + r->help_message = RenX::BasicGameCommand::help_message; + return r; +} + +void RenX::BasicGameCommand::create() +{ } \ No newline at end of file diff --git a/RenX.Core/RenX_GameCommand.h b/RenX.Core/RenX_GameCommand.h index 43b7323..75de127 100644 --- a/RenX.Core/RenX_GameCommand.h +++ b/RenX.Core/RenX_GameCommand.h @@ -25,9 +25,16 @@ */ #include "Jupiter/Command.h" +#include "Jupiter/String.h" #include "RenX.h" #include "RenX_Core.h" // getCore(). + /** DLL Linkage Nagging */ +#if defined _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4251) +#endif + namespace RenX { /** Forward delcarations */ @@ -79,6 +86,11 @@ namespace RenX */ virtual GameCommand *copy() = 0; + /** + * @brief Same as the Default constructor, except that the command is not added to the master command list. + */ + GameCommand(nullptr_t); + /** * @brief Copy constructor for a Game Command. * Note: This is automatically generated by the GENERIC_GAME_COMMAND macro. @@ -100,6 +112,24 @@ namespace RenX private: int access = 0; /** Minimum access level */ }; + + /** + * @brief Provides a simple interface for implementing basic text-to-player commands. + */ + class RENX_API BasicGameCommand : public RenX::GameCommand + { + public: + void trigger(RenX::Server *source, RenX::PlayerInfo *player, const Jupiter::ReadableString ¶meters); + const Jupiter::ReadableString &getHelp(const Jupiter::ReadableString ¶meters); + BasicGameCommand *copy(); + void create(); + BasicGameCommand(); + BasicGameCommand(BasicGameCommand &c); + BasicGameCommand(const Jupiter::ReadableString &trigger, const Jupiter::ReadableString &in_message, const Jupiter::ReadableString &in_help_message); + + private: + Jupiter::StringS message, help_message; + }; } /** Game Command Macros */ @@ -124,4 +154,9 @@ class CLASS : public RenX::GameCommand { \ CLASS CLASS ## _instance; \ CLASS *CLASS::copy() { return new CLASS(*this); } +/** Re-enable warnings */ +#if defined _MSC_VER +#pragma warning(pop) +#endif + #endif // _RENX_GAMECOMMAND_H_HEADER \ No newline at end of file diff --git a/RenX.Core/RenX_Server.cpp b/RenX.Core/RenX_Server.cpp index 5c179e1..134173d 100644 --- a/RenX.Core/RenX_Server.cpp +++ b/RenX.Core/RenX_Server.cpp @@ -2653,10 +2653,42 @@ void RenX::Server::init() Jupiter::INIFile &commandsFile = RenX::getCore()->getCommandsFile(); RenX::Server::commandAccessLevels = commandsFile.getSection(RenX::Server::configSection); - RenX::Server::commandAliases = commandsFile.getSection(Jupiter::StringS::Format("%.*s.Aliases", RenX::Server::configSection.size(), RenX::Server::configSection.ptr())); + RenX::Server::commandAliases = commandsFile.getSection(RenX::Server::configSection + ".Aliases"_jrs); - for (size_t i = 0; i < RenX::GameMasterCommandList->size(); i++) + for (size_t i = 0; i != RenX::GameMasterCommandList->size(); ++i) RenX::Server::addCommand(RenX::GameMasterCommandList->get(i)->copy()); + + auto load_basic_commands = [this, &commandsFile](const Jupiter::ReadableString §ion_prefix) + { + Jupiter::INIFile::Section *basic_commands = commandsFile.getSection(section_prefix + ".Basic"_jrs); + if (basic_commands != nullptr) + { + Jupiter::INIFile::Section *basic_commands_help = commandsFile.getSection(section_prefix + ".Basic.Help"_jrs); + Jupiter::INIFile::Section::KeyValuePair *pair; + size_t i = 0; + if (basic_commands_help == nullptr) + while (i != basic_commands->size()) + { + pair = basic_commands->getPair(i); + ++i; + if (this->getCommand(pair->getKey()) == nullptr) + this->addCommand(new RenX::BasicGameCommand(pair->getKey(), pair->getValue(), ""_jrs)); + } + else + while (i != basic_commands->size()) + { + pair = basic_commands->getPair(i); + ++i; + if (this->getCommand(pair->getKey()) == nullptr) + this->addCommand(new RenX::BasicGameCommand(pair->getKey(), pair->getValue(), basic_commands_help->get(pair->getKey(), ""_jrs))); + } + } + }; + + load_basic_commands(RenX::Server::configSection); + load_basic_commands("Default"_jrs); + + // ADD CHECKS FOR DEFAULT BASIC COMMANDS HERE } RenX::Server::~Server() diff --git a/RenXGameCommands.ini b/RenXGameCommands.ini index 96becc8..9b49a12 100644 --- a/RenXGameCommands.ini +++ b/RenXGameCommands.ini @@ -9,6 +9,30 @@ [Server] +; [(Server).Basic] +; +; Command=String (Default undefined; adds a basic command to the command list which returns this string) +; + +[Default.Basic] +irc=Please set or remove the "irc" command in Jupiter's RenXGameCommands.ini file. +ts=Please set or remove the "irc" command in Jupiter's RenXGameCommands.ini file. +web=Please set or remove the "irc" command in Jupiter's RenXGameCommands.ini file. + +[Server.Basic] + +; [(Server).Basic.Help] +; +; Command=String (Default undefined; defines the result for !help for a basic command) +; + +[Default.Basic.Help] +irc=Displays this server's IRC server information. +ts=Displays this server's TeamSpeak server information. +web=Displays this server's website information. + +[Server.Basic.Help] + ; [(Server).Aliases] ; ; Command=String (No default; adds a list of triggers to a command)