From c7dde7832d2d58123799903cc7272dc23ea6380f Mon Sep 17 00:00:00 2001 From: Alex King <89047260+Kinglykrab@users.noreply.github.com> Date: Tue, 3 Jan 2023 12:06:20 -0500 Subject: [PATCH] [Commands] Add #setanon Command (#2690) * [Commands] Add #setanon Command. # Commands - Adds `#setanon [Anonymous Flag]`. # Notes - Allows operators to turn on/off a player's anonymous flag so they can view their Magelo. * Update eq_constants.h * Add character ID support. * Update setanon.cpp --- common/eq_constants.h | 7 +++ zone/command.cpp | 2 + zone/command.h | 1 + zone/gm_commands/setanon.cpp | 102 +++++++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+) create mode 100755 zone/gm_commands/setanon.cpp diff --git a/common/eq_constants.h b/common/eq_constants.h index 3b06001dd..061edd906 100644 --- a/common/eq_constants.h +++ b/common/eq_constants.h @@ -1016,4 +1016,11 @@ enum FVNoDropFlagRule AdminOnly = 2 }; +enum Anonymity : uint8 +{ + NotAnonymous, + Anonymous, + Roleplaying +}; + #endif /*COMMON_EQ_CONSTANTS_H*/ diff --git a/zone/command.cpp b/zone/command.cpp index 446387b48..d5faf314e 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -287,6 +287,7 @@ int command_init(void) command_add("setadventurepoints", "[Theme] [Points] - Set your or your player target's available Adventure Points by Theme", AccountStatus::GMLeadAdmin, command_set_adventure_points) || command_add("setaltcurrency", "[Currency ID] [Amount] - Set your or your target's available Alternate Currency by Currency ID", AccountStatus::GMAdmin, command_setaltcurrency) || command_add("setanim", "[Animation ID (IDs are 0 to 4)] - Set target's appearance to Animation ID", AccountStatus::GMMgmt, command_setanim) || + command_add("setanon", "[Anonymous Flag] - Set you or your target's Anonymous Flag (0 = Not Anonymous, 1 = Anonymous, 2 = Roleplaying)", AccountStatus::QuestTroupe, command_setanon) || command_add("setcrystals", "[value] - Set your or your player target's available radiant or ebon crystals", AccountStatus::GMAdmin, command_setcrystals) || command_add("setendurance", "[Endurance] - Set your or your target's Endurance", AccountStatus::GMAdmin, command_setendurance) || command_add("setfaction", "[Faction ID] - Sets targeted NPC's faction in the database", AccountStatus::GMAreas, command_setfaction) || @@ -1119,6 +1120,7 @@ void command_bot(Client *c, const Seperator *sep) #include "gm_commands/setaaxp.cpp" #include "gm_commands/setaltcurrency.cpp" #include "gm_commands/setanim.cpp" +#include "gm_commands/setanon.cpp" #include "gm_commands/setcrystals.cpp" #include "gm_commands/setendurance.cpp" #include "gm_commands/setfaction.cpp" diff --git a/zone/command.h b/zone/command.h index 535f7ce74..3ab4153bd 100644 --- a/zone/command.h +++ b/zone/command.h @@ -232,6 +232,7 @@ void command_setaapts(Client *c, const Seperator *sep); void command_setaaxp(Client *c, const Seperator *sep); void command_setaltcurrency(Client *c, const Seperator *sep); void command_setanim(Client *c, const Seperator *sep); +void command_setanon(Client *c, const Seperator *sep); void command_setcrystals(Client *c, const Seperator *sep); void command_setendurance(Client *c, const Seperator *sep); void command_setfaction(Client *c, const Seperator *sep); diff --git a/zone/gm_commands/setanon.cpp b/zone/gm_commands/setanon.cpp new file mode 100755 index 000000000..955bbd884 --- /dev/null +++ b/zone/gm_commands/setanon.cpp @@ -0,0 +1,102 @@ +#include "../client.h" +#include "../../common/repositories/character_data_repository.h" + +void command_setanon(Client *c, const Seperator *sep) +{ + auto arguments = sep->argnum; + if (!arguments || !sep->IsNumber(1) || arguments > 2) { + c->Message(Chat::White, "Usage: #setanon [Anonymous Flag]"); + c->Message(Chat::White, "Usage: #setanon [Character ID] [Anonymous Flag]"); + c->Message(Chat::White, "Note: 0 = Not Anonymous, 1 = Anonymous, 2 = Roleplaying"); + return; + } + + if (arguments == 1) { + const uint8 anon_flag = static_cast(std::stoul(sep->arg[1])); + auto t = c; + if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) { + t = c->GetTarget()->CastToClient(); + } + + std::string anon_setting; + if (anon_flag == Anonymity::NotAnonymous) { + anon_setting = "no longer Anonymous or Roleplaying"; + } else if (anon_flag == Anonymity::Anonymous) { + anon_setting = "now Anonymous"; + } else if (anon_flag == Anonymity::Roleplaying) { + anon_setting = "now Roleplaying"; + } else { + c->Message(Chat::White, "Usage: #setanon [Anonymous Flag]"); + c->Message(Chat::White, "Usage: #setanon [Character ID] [Anonymous Flag]"); + c->Message(Chat::White, "Note: 0 = Not Anonymous, 1 = Anonymous, 2 = Roleplaying"); + return; + } + + c->SetAnon(anon_flag); + + c->Message( + Chat::White, + fmt::format( + "{} {} {}.", + c->GetTargetDescription(t, TargetDescriptionType::UCYou), + c == t ? "are" : "is", + anon_setting + ).c_str() + ); + } else if (arguments == 2) { + const auto character_id = std::stoi(sep->arg[1]); + const uint8 anon_flag = static_cast(std::stoul(sep->arg[2])); + + auto e = CharacterDataRepository::FindOne(content_db, character_id); + if (!e.id) { + c->Message( + Chat::White, + fmt::format( + "Character ID {} does not exist or is invalid.", + character_id + ).c_str() + ); + return; + } + + e.anon = anon_flag; + + auto updated = CharacterDataRepository::UpdateOne(content_db, e); + + if (!updated) { + c->Message( + Chat::White, + fmt::format( + "Failed to change Anonymous Flag for {} ({}).", + e.name, + character_id + ).c_str() + ); + return; + } + + std::string anon_setting; + if (anon_flag == Anonymity::NotAnonymous) { + anon_setting = "no longer Anonymous or Roleplaying"; + } else if (anon_flag == Anonymity::Anonymous) { + anon_setting = "now Anonymous"; + } else if (anon_flag == Anonymity::Roleplaying) { + anon_setting = "now Roleplaying"; + } else { + c->Message(Chat::White, "Usage: #setanon [Anonymous Flag]"); + c->Message(Chat::White, "Usage: #setanon [Character ID] [Anonymous Flag]"); + c->Message(Chat::White, "Note: 0 = Not Anonymous, 1 = Anonymous, 2 = Roleplaying"); + return; + } + + c->Message( + Chat::White, + fmt::format( + "{} ({}) is {}.", + e.name, + character_id, + anon_setting + ).c_str() + ); + } +}