From aac0dd2993aca07c216cf494a9b458009defa575 Mon Sep 17 00:00:00 2001 From: Kinglykrab <89047260+Kinglykrab@users.noreply.github.com> Date: Wed, 10 Nov 2021 21:20:51 -0500 Subject: [PATCH] [Commands] Cleanup #setlanguage Command. (#1705) * [Commands] Cleanup #setlanguage Command. - Cleanup message and lofic. - Add GetLanguageName() helper and GetLanguageMap() for future use. * Optimize GetLanguageName(). --- common/emu_constants.cpp | 45 +++++++++++++++++ common/emu_constants.h | 3 ++ zone/command.cpp | 104 +++++++++++++++++++-------------------- 3 files changed, 99 insertions(+), 53 deletions(-) diff --git a/common/emu_constants.cpp b/common/emu_constants.cpp index 8a6d2a8bd..619b7055a 100644 --- a/common/emu_constants.cpp +++ b/common/emu_constants.cpp @@ -18,6 +18,7 @@ */ #include "emu_constants.h" +#include "languages.h" int16 EQ::invtype::GetInvTypeSize(int16 inv_type) { @@ -152,3 +153,47 @@ int EQ::constants::ConvertStanceTypeToIndex(StanceType stance_type) { return 0; } + +const std::map& EQ::constants::GetLanguageMap() +{ + static const std::map language_map = { + { LANG_COMMON_TONGUE, "Common Tongue" }, + { LANG_BARBARIAN, "Barbarian" }, + { LANG_ERUDIAN, "Erudian" }, + { LANG_ELVISH, "Elvish" }, + { LANG_DARK_ELVISH, "Dark Elvish" }, + { LANG_DWARVISH, "Dwarvish" }, + { LANG_TROLL, "Troll" }, + { LANG_OGRE, "Ogre" }, + { LANG_GNOMISH, "Gnomish" }, + { LANG_HALFLING, "Halfling" }, + { LANG_THIEVES_CANT, "Thieves Cant" }, + { LANG_OLD_ERUDIAN, "Old Erudian" }, + { LANG_ELDER_ELVISH, "Elder Elvish" }, + { LANG_FROGLOK, "Froglok" }, + { LANG_GOBLIN, "Goblin" }, + { LANG_GNOLL, "Gnoll" }, + { LANG_COMBINE_TONGUE, "Combine Tongue" }, + { LANG_ELDER_TEIRDAL, "Elder Teirdal" }, + { LANG_LIZARDMAN, "Lizardman" }, + { LANG_ORCISH, "Orcish" }, + { LANG_FAERIE, "Faerie" }, + { LANG_DRAGON, "Dragon" }, + { LANG_ELDER_DRAGON, "Elder Dragon" }, + { LANG_DARK_SPEECH, "Dark Speech" }, + { LANG_VAH_SHIR, "Vah Shir" }, + { LANG_ALARAN, "Alaran" }, + { LANG_HADAL, "Hadal" }, + { LANG_UNKNOWN, "Unknown" } + }; + return language_map; +} + +std::string EQ::constants::GetLanguageName(int language_id) +{ + if (language_id >= LANG_COMMON_TONGUE && language_id <= LANG_UNKNOWN) { + auto languages = EQ::constants::GetLanguageMap(); + return languages[language_id]; + } + return std::string(); +} diff --git a/common/emu_constants.h b/common/emu_constants.h index a29418394..c64199082 100644 --- a/common/emu_constants.h +++ b/common/emu_constants.h @@ -223,6 +223,9 @@ namespace EQ const char *GetStanceName(StanceType stance_type); int ConvertStanceTypeToIndex(StanceType stance_type); + extern const std::map& GetLanguageMap(); + std::string GetLanguageName(int language_id); + const int STANCE_TYPE_FIRST = stancePassive; const int STANCE_TYPE_LAST = stanceBurnAE; const int STANCE_TYPE_COUNT = stanceBurnAE; diff --git a/zone/command.cpp b/zone/command.cpp index a8d6d79d6..5ed0e8f03 100755 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -79,6 +79,7 @@ #include "../common/http/httplib.h" #include "../common/shared_tasks.h" #include "gm_commands/door_manipulation.h" +#include "../common/languages.h" extern QueryServ* QServ; extern WorldServer worldserver; @@ -3664,60 +3665,57 @@ void command_castspell(Client *c, const Seperator *sep) void command_setlanguage(Client *c, const Seperator *sep) { - if (strcasecmp(sep->arg[1], "list" ) == 0 ) - { - c->Message(Chat::White, "Languages:"); - c->Message(Chat::White, "(0) Common Tongue"); - c->Message(Chat::White, "(1) Barbarian"); - c->Message(Chat::White, "(2) Erudian"); - c->Message(Chat::White, "(3) Elvish"); - c->Message(Chat::White, "(4) Dark Elvish"); - c->Message(Chat::White, "(5) Dwarvish"); - c->Message(Chat::White, "(6) Troll"); - c->Message(Chat::White, "(7) Ogre"); - c->Message(Chat::White, "(8) Gnomish"); - c->Message(Chat::White, "(9) Halfling"); - c->Message(Chat::White, "(10) Thieves Cant"); - c->Message(Chat::White, "(11) Old Erudian"); - c->Message(Chat::White, "(12) Elder Elvish"); - c->Message(Chat::White, "(13) Froglok"); - c->Message(Chat::White, "(14) Goblin"); - c->Message(Chat::White, "(15) Gnoll"); - c->Message(Chat::White, "(16) Combine Tongue"); - c->Message(Chat::White, "(17) Elder Teir`Dal"); - c->Message(Chat::White, "(18) Lizardman"); - c->Message(Chat::White, "(19) Orcish"); - c->Message(Chat::White, "(20) Faerie"); - c->Message(Chat::White, "(21) Dragon"); - c->Message(Chat::White, "(22) Elder Dragon"); - c->Message(Chat::White, "(23) Dark Speech"); - c->Message(Chat::White, "(24) Vah Shir"); - c->Message(Chat::White, "(25) Alaran"); - c->Message(Chat::White, "(26) Hadal"); - c->Message(Chat::White, "(27) Unknown1"); + Client* target = c; + if (c->GetTarget() && c->GetTarget()->IsClient()) { + target = c->GetTarget()->CastToClient(); } - else if( c->GetTarget() == 0 ) - { - c->Message(Chat::White, "Error: #setlanguage: No target."); - } - else if( !c->GetTarget()->IsClient() ) - { - c->Message(Chat::White, "Error: Target must be a player."); - } - else if ( - !sep->IsNumber(1) || atoi(sep->arg[1]) < 0 || atoi(sep->arg[1]) > 27 || - !sep->IsNumber(2) || atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > 100 - ) - { - c->Message(Chat::White, "Usage: #setlanguage [language ID] [value] (0-27, 0-100)"); - c->Message(Chat::White, "Try #setlanguage list for a list of language IDs"); - } - else - { - LogInfo("Set language request from [{}], target:[{}] lang_id:[{}] value:[{}]", c->GetName(), c->GetTarget()->GetName(), atoi(sep->arg[1]), atoi(sep->arg[2]) ); - uint8 langid = (uint8)atoi(sep->arg[1]); - uint8 value = (uint8)atoi(sep->arg[2]); - c->GetTarget()->CastToClient()->SetLanguageSkill( langid, value ); + + auto language_id = sep->IsNumber(1) ? std::stoi(sep->arg[1]) : -1; + auto language_value = sep->IsNumber(2) ? std::stoi(sep->arg[2]) : -1; + if (!strcasecmp(sep->arg[1], "list" )) { + for (int language = LANG_COMMON_TONGUE; language <= LANG_UNKNOWN; language++) { + c->Message( + Chat::White, + fmt::format( + "Language {}: {}", + language, + EQ::constants::GetLanguageName(language) + ).c_str() + ); + } + } else if ( + language_id < LANG_COMMON_TONGUE || + language_id > LANG_UNKNOWN || + language_value < 0 || + language_value > 100 + ) { + c->Message(Chat::White, "Usage: #setlanguage [Language ID] [Language Value]"); + c->Message(Chat::White, "Usage: #setlanguage [List]"); + c->Message(Chat::White, "Language ID = 0 to 27", LANG_UNKNOWN); + c->Message(Chat::White, "Language Value = 0 to 100", HIGHEST_CAN_SET_SKILL); + } else { + LogInfo( + "Set language request from [{}], Target: [{}] Language ID: [{}] Language Value: [{}]", + c->GetCleanName(), + target->GetCleanName(), + language_id, + language_value + ); + + target->SetLanguageSkill(language_id, language_value); + + if (c != target) { + c->Message( + Chat::White, + fmt::format( + "Set {} ({}) to {} for {}.", + EQ::constants::GetLanguageName(language_id), + language_id, + language_value, + target->GetCleanName() + ).c_str() + ); + } } }