From 4b69f56a6581e1ab78b936637d46c78de9a06bae Mon Sep 17 00:00:00 2001 From: Akkadius Date: Mon, 23 Dec 2019 01:31:39 -0600 Subject: [PATCH] Update command handler to use actual real arguments --- common/cli/eqemu_command_handler.cpp | 16 +++---- common/database.cpp | 31 ++++++++++++++ common/database.h | 1 + world/world_server_command_handler.cpp | 58 ++++++++++++++------------ world/world_server_command_handler.h | 2 +- 5 files changed, 73 insertions(+), 35 deletions(-) diff --git a/common/cli/eqemu_command_handler.cpp b/common/cli/eqemu_command_handler.cpp index b19c92e9c..a0a019ca8 100644 --- a/common/cli/eqemu_command_handler.cpp +++ b/common/cli/eqemu_command_handler.cpp @@ -38,10 +38,6 @@ namespace EQEmuCommand { void DisplayDebug(argh::parser &cmd) { if (cmd[{"-d", "--debug"}]) { - std::cout << "Positional args:\n"; - for (auto &pos_arg : cmd) - std::cout << '\t' << pos_arg << std::endl; - std::cout << "Positional args:\n"; for (auto &pos_arg : cmd.pos_args()) std::cout << '\t' << pos_arg << std::endl; @@ -73,16 +69,18 @@ namespace EQEmuCommand { { bool arguments_filled = true; + int index = 2; for (auto &arg : arguments) { - if (cmd(arg).str().empty()) { + if (cmd(arg).str().empty() && cmd(index).str().empty()) { arguments_filled = false; } + index++; } if (!arguments_filled || argc == 2) { std::string arguments_string; for (auto &arg : arguments) { - arguments_string += " " + arg + "=*\n"; + arguments_string += " " + arg; } std::string options_string; @@ -90,8 +88,12 @@ namespace EQEmuCommand { options_string += " " + opt + "\n"; } + std::stringstream str; + str << termcolor::yellow << "\nCommand" << termcolor::reset << "\n\n"; + std::cout << fmt::format( - "Command\n\n{0} \n\nArgs\n{1}\nOptions\n{2}", + "{0}{1}{2}\n\nOptions\n{3}", + str.str(), argv[1], arguments_string, options_string diff --git a/common/database.cpp b/common/database.cpp index 70741cf86..e0f601782 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -293,6 +293,37 @@ bool Database::SetAccountStatus(const char* name, int16 status) { return true; } +/** + * @param account_name + * @param status + * @return + */ +bool Database::SetAccountStatus(const std::string& account_name, int16 status) +{ + LogInfo("Account [{}] is attempting to be set to status [{}]", account_name, status); + + std::string query = fmt::format( + SQL( + UPDATE account SET status = {} WHERE name = '{}' + ), + status, + account_name + ); + + auto results = QueryDatabase(query); + + if (!results.Success()) { + return false; + } + + if (results.RowsAffected() == 0) { + LogWarning("Account [{}] does not exist!", account_name); + return false; + } + + return true; +} + /* This initially creates the character during character create */ bool Database::ReserveName(uint32 account_id, char* name) { std::string query = StringFormat("SELECT `account_id`, `name` FROM `character_data` WHERE `name` = '%s'", name); diff --git a/common/database.h b/common/database.h index 0dce5318d..1fca7e1a8 100644 --- a/common/database.h +++ b/common/database.h @@ -179,6 +179,7 @@ public: bool DeleteAccount(const char *name, const char* loginserver); bool GetLiveChar(uint32 account_id, char* cname); bool SetAccountStatus(const char* name, int16 status); + bool SetAccountStatus(const std::string& account_name, int16 status); bool SetLocalPassword(uint32 accid, const char* password); bool UpdateLiveChar(char* charname, uint32 account_id); diff --git a/world/world_server_command_handler.cpp b/world/world_server_command_handler.cpp index ed6a3e844..95e1d7989 100644 --- a/world/world_server_command_handler.cpp +++ b/world/world_server_command_handler.cpp @@ -22,6 +22,7 @@ #include "../common/eqemu_logsys.h" #include "../common/json/json.h" #include "../common/version.h" +#include "worlddb.h" namespace WorldserverCommandHandler { @@ -45,38 +46,12 @@ namespace WorldserverCommandHandler { /** * Register commands */ - function_map["test:hello-world"] = &WorldserverCommandHandler::HelloWorld; function_map["database:version"] = &WorldserverCommandHandler::DatabaseVersion; + function_map["database:set-account-status"] = &WorldserverCommandHandler::DatabaseSetAccountStatus; EQEmuCommand::HandleMenu(function_map, cmd, argc, argv); } - /** - * @param argc - * @param argv - * @param cmd - * @param description - */ - void HelloWorld(int argc, char **argv, argh::parser &cmd, std::string &description) - { - description = "Test command"; - - if (cmd[{"-h", "--help"}]) { - return; - } - - std::vector arguments = {}; - std::vector options = { - "--hello", - "--write" - }; - - EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); - - LogInfo("hello world!"); - - } - /** * @param argc * @param argv @@ -102,4 +77,33 @@ namespace WorldserverCommandHandler { std::cout << payload.str() << std::endl; } + /** + * @param argc + * @param argv + * @param cmd + * @param description + */ + void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description) + { + description = "Sets account status by account name"; + + std::vector arguments = { + "{name}", + "{status}" + }; + + std::vector options = {}; + + if (cmd[{"-h", "--help"}]) { + return; + } + + EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); + + database.SetAccountStatus( + cmd(2).str(), + std::stoi(cmd(3).str()) + ); + } + } \ No newline at end of file diff --git a/world/world_server_command_handler.h b/world/world_server_command_handler.h index a9b14cc58..dae5e6c8d 100644 --- a/world/world_server_command_handler.h +++ b/world/world_server_command_handler.h @@ -26,8 +26,8 @@ namespace WorldserverCommandHandler { void CommandHandler(int argc, char **argv); - void HelloWorld(int argc, char **argv, argh::parser &cmd, std::string &description); void DatabaseVersion(int argc, char **argv, argh::parser &cmd, std::string &description); + void DatabaseSetAccountStatus(int argc, char **argv, argh::parser &cmd, std::string &description); };