diff --git a/src/client/ClientServices.cpp b/src/client/ClientServices.cpp index 93744f0..15590d9 100644 --- a/src/client/ClientServices.cpp +++ b/src/client/ClientServices.cpp @@ -27,6 +27,113 @@ REALM_INFO ClientServices::s_selectRealmInfo; bool ClientServices::s_selectRealmInfoValid; CVar* ClientServices::s_serverAlertVar; +const char* s_errorCodeTokens[] = { + "RESPONSE_SUCCESS", + "RESPONSE_FAILURE", + "RESPONSE_CANCELLED", + "RESPONSE_DISCONNECTED", + "RESPONSE_FAILED_TO_CONNECT", + "RESPONSE_CONNECTED", + "RESPONSE_VERSION_MISMATCH", + "CSTATUS_CONNECTING", + "CSTATUS_NEGOTIATING_SECURITY", + "CSTATUS_NEGOTIATION_COMPLETE", + "CSTATUS_NEGOTIATION_FAILED", + "CSTATUS_AUTHENTICATING", + "AUTH_OK", + "AUTH_FAILED", + "AUTH_REJECT", + "AUTH_BAD_SERVER_PROOF", + "AUTH_UNAVAILABLE", + "AUTH_SYSTEM_ERROR", + "AUTH_BILLING_ERROR", + "AUTH_BILLING_EXPIRED", + "AUTH_VERSION_MISMATCH", + "AUTH_UNKNOWN_ACCOUNT", + "AUTH_INCORRECT_PASSWORD", + "AUTH_SESSION_EXPIRED", + "AUTH_SERVER_SHUTTING_DOWN", + "AUTH_ALREADY_LOGGING_IN", + "AUTH_LOGIN_SERVER_NOT_FOUND", + "AUTH_WAIT_QUEUE", + "AUTH_BANNED", + "AUTH_ALREADY_ONLINE", + "AUTH_NO_TIME", + "AUTH_DB_BUSY", + "AUTH_SUSPENDED", + "AUTH_PARENTAL_CONTROL", + "AUTH_LOCKED_ENFORCED", + "REALM_LIST_IN_PROGRESS", + "REALM_LIST_SUCCESS", + "REALM_LIST_FAILED", + "REALM_LIST_INVALID", + "REALM_LIST_REALM_NOT_FOUND", + "ACCOUNT_CREATE_IN_PROGRESS", + "ACCOUNT_CREATE_SUCCESS", + "ACCOUNT_CREATE_FAILED", + "CHAR_LIST_RETRIEVING", + "CHAR_LIST_RETRIEVED", + "CHAR_LIST_FAILED", + "CHAR_CREATE_IN_PROGRESS", + "CHAR_CREATE_SUCCESS", + "CHAR_CREATE_ERROR", + "CHAR_CREATE_FAILED", + "CHAR_CREATE_NAME_IN_USE", + "CHAR_CREATE_DISABLED", + "CHAR_CREATE_PVP_TEAMS_VIOLATION", + "CHAR_CREATE_SERVER_LIMIT", + "CHAR_CREATE_ACCOUNT_LIMIT", + "CHAR_CREATE_SERVER_QUEUE", + "CHAR_CREATE_ONLY_EXISTING", + "CHAR_CREATE_EXPANSION", + "CHAR_CREATE_EXPANSION_CLASS", + "CHAR_CREATE_LEVEL_REQUIREMENT", + "CHAR_CREATE_UNIQUE_CLASS_LIMIT", + "CHAR_CREATE_CHARACTER_IN_GUILD", + "CHAR_CREATE_RESTRICTED_RACECLASS", + "CHAR_CREATE_CHARACTER_CHOOSE_RACE", + "CHAR_CREATE_CHARACTER_ARENA_LEADER", + "CHAR_CREATE_CHARACTER_DELETE_MAIL", + "CHAR_CREATE_CHARACTER_SWAP_FACTION", + "CHAR_CREATE_CHARACTER_RACE_ONLY", + "CHAR_CREATE_CHARACTER_GOLD_LIMIT", + "CHAR_CREATE_FORCE_LOGIN", + "CHAR_DELETE_IN_PROGRESS", + "CHAR_DELETE_SUCCESS", + "CHAR_DELETE_FAILED", + "CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER", + "CHAR_DELETE_FAILED_GUILD_LEADER", + "CHAR_DELETE_FAILED_ARENA_CAPTAIN", + "CHAR_LOGIN_IN_PROGRESS", + "CHAR_LOGIN_SUCCESS", + "CHAR_LOGIN_NO_WORLD", + "CHAR_LOGIN_DUPLICATE_CHARACTER", + "CHAR_LOGIN_NO_INSTANCES", + "CHAR_LOGIN_FAILED", + "CHAR_LOGIN_DISABLED", + "CHAR_LOGIN_NO_CHARACTER", + "CHAR_LOGIN_LOCKED_FOR_TRANSFER", + "CHAR_LOGIN_LOCKED_BY_BILLING", + "CHAR_LOGIN_LOCKED_BY_MOBILE_AH", + "CHAR_NAME_SUCCESS", + "CHAR_NAME_FAILURE", + "CHAR_NAME_NO_NAME", + "CHAR_NAME_TOO_SHORT", + "CHAR_NAME_TOO_LONG", + "CHAR_NAME_INVALID_CHARACTER", + "CHAR_NAME_MIXED_LANGUAGES", + "CHAR_NAME_PROFANE", + "CHAR_NAME_RESERVED", + "CHAR_NAME_INVALID_APOSTROPHE", + "CHAR_NAME_MULTIPLE_APOSTROPHES", + "CHAR_NAME_THREE_CONSECUTIVE", + "CHAR_NAME_INVALID_SPACE", + "CHAR_NAME_CONSECUTIVE_SPACES", + "CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS", + "CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END", + "CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME", +}; + void ClientServices::ConnectToSelectedServer() { if (!ClientServices::s_selectRealmInfoValid && !ClientServices::SetSelectedRealmInfo(0)) { ClientServices::Connection()->Complete(0, 39); @@ -65,6 +172,14 @@ const char* ClientServices::GetCurrentLoginServer() { : ClientServices::s_realmListVar->GetString(); } +const char* ClientServices::GetErrorToken(int32_t errorCode) { + if (errorCode >= 104) { + return ""; + } + + return s_errorCodeTokens[errorCode]; +} + ClientServices* ClientServices::GetInstance() { if (ClientServices::s_instance) { return ClientServices::s_instance; diff --git a/src/client/ClientServices.hpp b/src/client/ClientServices.hpp index f925154..798e298 100644 --- a/src/client/ClientServices.hpp +++ b/src/client/ClientServices.hpp @@ -33,6 +33,7 @@ class ClientServices : public LoginResponse { static ClientConnection* Connection(); static const char* GetCurrentLoginPortal(); static const char* GetCurrentLoginServer(); + static const char* GetErrorToken(int32_t errorCode); static ClientServices* GetInstance(); static REALM_INFO* GetRealmInfoByIndex(int32_t index); static const char* GetSelectedRealmName(); diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index c1d2f48..6656bcf 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -3,113 +3,6 @@ #include "client/ClientServices.hpp" #include "ui/FrameScript.hpp" -const char* s_errorCodeTokens[] = { - "RESPONSE_SUCCESS", - "RESPONSE_FAILURE", - "RESPONSE_CANCELLED", - "RESPONSE_DISCONNECTED", - "RESPONSE_FAILED_TO_CONNECT", - "RESPONSE_CONNECTED", - "RESPONSE_VERSION_MISMATCH", - "CSTATUS_CONNECTING", - "CSTATUS_NEGOTIATING_SECURITY", - "CSTATUS_NEGOTIATION_COMPLETE", - "CSTATUS_NEGOTIATION_FAILED", - "CSTATUS_AUTHENTICATING", - "AUTH_OK", - "AUTH_FAILED", - "AUTH_REJECT", - "AUTH_BAD_SERVER_PROOF", - "AUTH_UNAVAILABLE", - "AUTH_SYSTEM_ERROR", - "AUTH_BILLING_ERROR", - "AUTH_BILLING_EXPIRED", - "AUTH_VERSION_MISMATCH", - "AUTH_UNKNOWN_ACCOUNT", - "AUTH_INCORRECT_PASSWORD", - "AUTH_SESSION_EXPIRED", - "AUTH_SERVER_SHUTTING_DOWN", - "AUTH_ALREADY_LOGGING_IN", - "AUTH_LOGIN_SERVER_NOT_FOUND", - "AUTH_WAIT_QUEUE", - "AUTH_BANNED", - "AUTH_ALREADY_ONLINE", - "AUTH_NO_TIME", - "AUTH_DB_BUSY", - "AUTH_SUSPENDED", - "AUTH_PARENTAL_CONTROL", - "AUTH_LOCKED_ENFORCED", - "REALM_LIST_IN_PROGRESS", - "REALM_LIST_SUCCESS", - "REALM_LIST_FAILED", - "REALM_LIST_INVALID", - "REALM_LIST_REALM_NOT_FOUND", - "ACCOUNT_CREATE_IN_PROGRESS", - "ACCOUNT_CREATE_SUCCESS", - "ACCOUNT_CREATE_FAILED", - "CHAR_LIST_RETRIEVING", - "CHAR_LIST_RETRIEVED", - "CHAR_LIST_FAILED", - "CHAR_CREATE_IN_PROGRESS", - "CHAR_CREATE_SUCCESS", - "CHAR_CREATE_ERROR", - "CHAR_CREATE_FAILED", - "CHAR_CREATE_NAME_IN_USE", - "CHAR_CREATE_DISABLED", - "CHAR_CREATE_PVP_TEAMS_VIOLATION", - "CHAR_CREATE_SERVER_LIMIT", - "CHAR_CREATE_ACCOUNT_LIMIT", - "CHAR_CREATE_SERVER_QUEUE", - "CHAR_CREATE_ONLY_EXISTING", - "CHAR_CREATE_EXPANSION", - "CHAR_CREATE_EXPANSION_CLASS", - "CHAR_CREATE_LEVEL_REQUIREMENT", - "CHAR_CREATE_UNIQUE_CLASS_LIMIT", - "CHAR_CREATE_CHARACTER_IN_GUILD", - "CHAR_CREATE_RESTRICTED_RACECLASS", - "CHAR_CREATE_CHARACTER_CHOOSE_RACE", - "CHAR_CREATE_CHARACTER_ARENA_LEADER", - "CHAR_CREATE_CHARACTER_DELETE_MAIL", - "CHAR_CREATE_CHARACTER_SWAP_FACTION", - "CHAR_CREATE_CHARACTER_RACE_ONLY", - "CHAR_CREATE_CHARACTER_GOLD_LIMIT", - "CHAR_CREATE_FORCE_LOGIN", - "CHAR_DELETE_IN_PROGRESS", - "CHAR_DELETE_SUCCESS", - "CHAR_DELETE_FAILED", - "CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER", - "CHAR_DELETE_FAILED_GUILD_LEADER", - "CHAR_DELETE_FAILED_ARENA_CAPTAIN", - "CHAR_LOGIN_IN_PROGRESS", - "CHAR_LOGIN_SUCCESS", - "CHAR_LOGIN_NO_WORLD", - "CHAR_LOGIN_DUPLICATE_CHARACTER", - "CHAR_LOGIN_NO_INSTANCES", - "CHAR_LOGIN_FAILED", - "CHAR_LOGIN_DISABLED", - "CHAR_LOGIN_NO_CHARACTER", - "CHAR_LOGIN_LOCKED_FOR_TRANSFER", - "CHAR_LOGIN_LOCKED_BY_BILLING", - "CHAR_LOGIN_LOCKED_BY_MOBILE_AH", - "CHAR_NAME_SUCCESS", - "CHAR_NAME_FAILURE", - "CHAR_NAME_NO_NAME", - "CHAR_NAME_TOO_SHORT", - "CHAR_NAME_TOO_LONG", - "CHAR_NAME_INVALID_CHARACTER", - "CHAR_NAME_MIXED_LANGUAGES", - "CHAR_NAME_PROFANE", - "CHAR_NAME_RESERVED", - "CHAR_NAME_INVALID_APOSTROPHE", - "CHAR_NAME_MULTIPLE_APOSTROPHES", - "CHAR_NAME_THREE_CONSECUTIVE", - "CHAR_NAME_INVALID_SPACE", - "CHAR_NAME_CONSECUTIVE_SPACES", - "CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS", - "CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END", - "CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME", -}; - void ClientConnection::AccountLogin(const char* name, const char* password, int32_t region, WOW_LOCALE locale) { // Assertion-like thing @@ -220,7 +113,7 @@ int32_t ClientConnection::PollStatus(WOWCS_OPS& op, const char** msg, int32_t& r if (this->m_statusComplete) { auto text = errorCode >= 0 && errorCode < 104 - ? FrameScript_GetText(s_errorCodeTokens[errorCode], -1, GENDER_NOT_APPLICABLE) + ? FrameScript_GetText(ClientServices::GetErrorToken(errorCode), -1, GENDER_NOT_APPLICABLE) : nullptr; if (!text) {