From ba5bb09af7176fc16213715dd2ccd5902566f233 Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Sat, 27 Nov 2021 21:39:54 -0500 Subject: [PATCH] [Commands] Cleanup #flymode Command. (#1845) - Cleanup message and logic. - Add GetFlyModeName() and GetFlyModeMap() helper methods. - Cleanup #npcedit flymode to use helper methods. --- common/emu_constants.cpp | 25 +++++++++++++ common/emu_constants.h | 12 +++++++ zone/gm_commands/flymode.cpp | 68 ++++++++++++++++++++---------------- zone/gm_commands/npcedit.cpp | 32 ++++++----------- 4 files changed, 84 insertions(+), 53 deletions(-) diff --git a/common/emu_constants.cpp b/common/emu_constants.cpp index 619b7055a..8658cc419 100644 --- a/common/emu_constants.cpp +++ b/common/emu_constants.cpp @@ -197,3 +197,28 @@ std::string EQ::constants::GetLanguageName(int language_id) } return std::string(); } + +const std::map& EQ::constants::GetFlyModeMap() +{ + static const std::map flymode_map = { + { EQ::constants::GravityBehavior::Ground, "Ground" }, + { EQ::constants::GravityBehavior::Flying, "Flying" }, + { EQ::constants::GravityBehavior::Levitating, "Levitating" }, + { EQ::constants::GravityBehavior::Water, "Water" }, + { EQ::constants::GravityBehavior::Floating, "Floating" }, + { EQ::constants::GravityBehavior::LevitateWhileRunning, "Levitating While Running" }, + }; + return flymode_map; +} + +std::string EQ::constants::GetFlyModeName(uint8 flymode_id) +{ + if ( + flymode_id >= GravityBehavior::Ground && + flymode_id <= GravityBehavior::LevitateWhileRunning + ) { + auto flymodes = EQ::constants::GetFlyModeMap(); + return flymodes[flymode_id]; + } + return std::string(); +} diff --git a/common/emu_constants.h b/common/emu_constants.h index e071ca449..322b91ba0 100644 --- a/common/emu_constants.h +++ b/common/emu_constants.h @@ -220,12 +220,24 @@ namespace EQ stanceBurnAE }; + enum GravityBehavior : uint8 { + Ground, + Flying, + Levitating, + Water, + Floating, + LevitateWhileRunning + }; + const char *GetStanceName(StanceType stance_type); int ConvertStanceTypeToIndex(StanceType stance_type); extern const std::map& GetLanguageMap(); std::string GetLanguageName(int language_id); + extern const std::map& GetFlyModeMap(); + std::string GetFlyModeName(uint8 flymode_id); + const int STANCE_TYPE_FIRST = stancePassive; const int STANCE_TYPE_LAST = stanceBurnAE; const int STANCE_TYPE_COUNT = stanceBurnAE; diff --git a/zone/gm_commands/flymode.cpp b/zone/gm_commands/flymode.cpp index 905241b50..c9c76fd98 100755 --- a/zone/gm_commands/flymode.cpp +++ b/zone/gm_commands/flymode.cpp @@ -2,39 +2,45 @@ void command_flymode(Client *c, const Seperator *sep) { - Mob *t = c; - - if (strlen(sep->arg[1]) == 1 && sep->IsNumber(1) && atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 5) { - if (c->GetTarget()) { - t = c->GetTarget(); - } - - int fm = atoi(sep->arg[1]); - - t->SetFlyMode(static_cast(fm)); - t->SendAppearancePacket(AT_Levitate, fm); - if (sep->arg[1][0] == '0') { - c->Message(Chat::White, "Setting %s to Grounded", t->GetName()); - } - else if (sep->arg[1][0] == '1') { - c->Message(Chat::White, "Setting %s to Flying", t->GetName()); - } - else if (sep->arg[1][0] == '2') { - c->Message(Chat::White, "Setting %s to Levitating", t->GetName()); - } - else if (sep->arg[1][0] == '3') { - c->Message(Chat::White, "Setting %s to In Water", t->GetName()); - } - else if (sep->arg[1][0] == '4') { - c->Message(Chat::White, "Setting %s to Floating(Boat)", t->GetName()); - } - else if (sep->arg[1][0] == '5') { - c->Message(Chat::White, "Setting %s to Levitating While Running", t->GetName()); - } + int arguments = sep->argnum; + if (!arguments || !sep->IsNumber(1)) { + return; } - else { - c->Message(Chat::White, "#flymode [0/1/2/3/4/5]"); + + Mob *target = c; + if (c->GetTarget()) { + target = c->GetTarget(); } + + auto flymode_id = std::stoul(sep->arg[1]); + if ( + flymode_id < EQ::constants::GravityBehavior::Ground && + flymode_id > EQ::constants::GravityBehavior::LevitateWhileRunning + ) { + c->Message(Chat::White, "Usage:: #flymode [Flymode ID]"); + c->Message(Chat::White, "0 = Ground, 1 = Flying, 2 = Levitating, 3 = Water, 4 = Floating, 5 = Levitating While Running"); + return; + } + + target->SetFlyMode(static_cast(flymode_id)); + target->SendAppearancePacket(AT_Levitate, flymode_id); + c->Message( + Chat::White, + fmt::format( + "Fly Mode for {} is now {} ({}).", + ( + c == target ? + "yourself" : + fmt::format( + "{} ({})", + target->GetCleanName(), + target->GetID() + ) + ), + EQ::constants::GetFlyModeName(flymode_id), + flymode_id + ).c_str() + ); } diff --git a/zone/gm_commands/npcedit.cpp b/zone/gm_commands/npcedit.cpp index 332b9efa0..922b93bf2 100755 --- a/zone/gm_commands/npcedit.cpp +++ b/zone/gm_commands/npcedit.cpp @@ -153,7 +153,7 @@ void command_npcedit(Client *c, const Seperator *sep) ); c->Message( Chat::White, - "#npcedit flymode - Sets an NPC's flymode [0 = Ground, 1 = Flying, 2 = Levitating, 3 = Water, 4 = Floating, 5 = Levitating While Running]" + "#npcedit flymode - Sets an NPC's Fly Mode [0 = Ground, 1 = Flying, 2 = Levitating, 3 = Water, 4 = Floating, 5 = Levitating While Running]" ); c->Message( Chat::White, @@ -1271,29 +1271,17 @@ void command_npcedit(Client *c, const Seperator *sep) } if (strcasecmp(sep->arg[1], "flymode") == 0) { - auto flymode_id = atoi(sep->arg[2]); - std::string flymode_name = "Unknown"; - if (flymode_id == GravityBehavior::Ground) { - flymode_name = "Ground"; - } - else if (flymode_id == GravityBehavior::Flying) { - flymode_name = "Flying"; - } - else if (flymode_id == GravityBehavior::Levitating) { - flymode_name = "Levitating"; - } - else if (flymode_id == GravityBehavior::Water) { - flymode_name = "Water"; - } - else if (flymode_id == GravityBehavior::Floating) { - flymode_name = "Floating"; - } - else if (flymode_id == GravityBehavior::LevitateWhileRunning) { - flymode_name = "Levitating While Running"; - } + auto flymode_id = static_cast(std::stoul(sep->arg[2])); + std::string flymode_name = EQ::constants::GetFlyModeName(flymode_id); c->Message( Chat::Yellow, - fmt::format("NPC ID {} is now using Fly Mode {} ({}).", npc_id, flymode_name, flymode_id).c_str()); + fmt::format( + "NPC ID {} is now using Fly Mode {} ({}).", + npc_id, + flymode_name, + flymode_id + ).c_str() + ); std::string query = fmt::format("UPDATE npc_types SET flymode = {} WHERE id = {}", flymode_id, npc_id); content_db.QueryDatabase(query); return;