[Commands] Cleanup #setlanguage Command. (#1705)

* [Commands] Cleanup #setlanguage Command.
- Cleanup message and lofic.
- Add GetLanguageName() helper and GetLanguageMap() for future use.

* Optimize GetLanguageName().
This commit is contained in:
Kinglykrab 2021-11-10 21:20:51 -05:00 committed by GitHub
parent b17c24d2df
commit aac0dd2993
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 99 additions and 53 deletions

View File

@ -18,6 +18,7 @@
*/ */
#include "emu_constants.h" #include "emu_constants.h"
#include "languages.h"
int16 EQ::invtype::GetInvTypeSize(int16 inv_type) { int16 EQ::invtype::GetInvTypeSize(int16 inv_type) {
@ -152,3 +153,47 @@ int EQ::constants::ConvertStanceTypeToIndex(StanceType stance_type) {
return 0; return 0;
} }
const std::map<int, std::string>& EQ::constants::GetLanguageMap()
{
static const std::map<int, std::string> 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();
}

View File

@ -223,6 +223,9 @@ namespace EQ
const char *GetStanceName(StanceType stance_type); const char *GetStanceName(StanceType stance_type);
int ConvertStanceTypeToIndex(StanceType stance_type); int ConvertStanceTypeToIndex(StanceType stance_type);
extern const std::map<int, std::string>& GetLanguageMap();
std::string GetLanguageName(int language_id);
const int STANCE_TYPE_FIRST = stancePassive; const int STANCE_TYPE_FIRST = stancePassive;
const int STANCE_TYPE_LAST = stanceBurnAE; const int STANCE_TYPE_LAST = stanceBurnAE;
const int STANCE_TYPE_COUNT = stanceBurnAE; const int STANCE_TYPE_COUNT = stanceBurnAE;

View File

@ -79,6 +79,7 @@
#include "../common/http/httplib.h" #include "../common/http/httplib.h"
#include "../common/shared_tasks.h" #include "../common/shared_tasks.h"
#include "gm_commands/door_manipulation.h" #include "gm_commands/door_manipulation.h"
#include "../common/languages.h"
extern QueryServ* QServ; extern QueryServ* QServ;
extern WorldServer worldserver; extern WorldServer worldserver;
@ -3664,60 +3665,57 @@ void command_castspell(Client *c, const Seperator *sep)
void command_setlanguage(Client *c, const Seperator *sep) void command_setlanguage(Client *c, const Seperator *sep)
{ {
if (strcasecmp(sep->arg[1], "list" ) == 0 ) Client* target = c;
{ if (c->GetTarget() && c->GetTarget()->IsClient()) {
c->Message(Chat::White, "Languages:"); target = c->GetTarget()->CastToClient();
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");
} }
else if( c->GetTarget() == 0 )
{ auto language_id = sep->IsNumber(1) ? std::stoi(sep->arg[1]) : -1;
c->Message(Chat::White, "Error: #setlanguage: No target."); 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( !c->GetTarget()->IsClient() ) } else if (
{ language_id < LANG_COMMON_TONGUE ||
c->Message(Chat::White, "Error: Target must be a player."); 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()
);
} }
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 );
} }
} }