diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 32a277b..f515eb8 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -3,7 +3,9 @@ #include "client/ClientServices.hpp" #include "client/Util.hpp" #include "console/CVar.hpp" +#include "db/Db.hpp" #include "glue/CCharacterSelection.hpp" +#include "glue/Character.hpp" #include "glue/CRealmList.hpp" #include "gx/Coordinate.hpp" #include "gx/Device.hpp" @@ -375,46 +377,69 @@ void CGlueMgr::PollAccountLogin(int32_t errorCode, const char* msg, int32_t comp FrameScript_SignalEvent(4, "%s", msg); } - if (complete) { - if (result == 0) { - if (errorCode != 2) { + if (!complete) { + return; + } + + // Error + + if (result == 0) { + if (errorCode != 2) { + // TODO + } + + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + + if (errorCode == 2) { + CGlueMgr::m_disconnectPending = 1; + ClientServices::Connection()->Disconnect(); + } + + if (errorCode != 13) { + CCharacterSelection::ClearCharacterList(); + + if (ClientServices::GetInstance()->m_realmList.Count()) { + FrameScript_SignalEvent(5, nullptr); + CRealmList::UpdateList(); + } else { // TODO } - CGlueMgr::m_idleState = IDLE_NONE; - CGlueMgr::m_showedDisconnect = 0; - - if (errorCode == 2) { - // TODO CGlueMgr::m_disconnectPending = 1; - // TODO ClientServices::Connection()->Disconnect(); - } - - if (errorCode != 13) { - // TODO CCharacterSelection::ClearCharacterList(); - - if (ClientServices::GetInstance()->m_realmList.Count()) { - FrameScript_SignalEvent(5, nullptr); - CRealmList::UpdateList(); - } else { - // TODO - } - - return; - } - - if (!SStrCmpI(CGlueMgr::m_currentScreen, "charselect", STORM_MAX_STR)) { - CGlueMgr::SetScreen("login"); - return; - } - return; } - if (op == COP_CONNECT) { - ClientServices::Connection()->AccountLogin(CGlueMgr::m_accountName, "", CURRENT_REGION, CURRENT_LANGUAGE); + if (!SStrCmpI(CGlueMgr::m_currentScreen, "charselect", STORM_MAX_STR)) { + CGlueMgr::SetScreen("login"); return; } + + return; } + + // Success + + if (op == COP_CONNECT) { + ClientServices::Connection()->AccountLogin(CGlueMgr::m_accountName, "", CURRENT_REGION, CURRENT_LANGUAGE); + return; + } + + CGlueMgr::m_idleState = IDLE_NONE; + CGlueMgr::m_showedDisconnect = 0; + CCharacterSelection::ClearCharacterList(); + + // TODO streaming, trial, and expansion checks + + auto realm = ClientServices::GetSelectedRealm(); + auto categoryRec = g_cfg_CategoriesDB.GetRecord(realm->category); + + if (categoryRec) { + ValidateNameInitialize(categoryRec->m_localeMask, categoryRec->m_createCharsetMask); + } else { + ValidateNameInitialize(1 << CURRENT_LANGUAGE, 0); + } + + CGlueMgr::SetScreen("charselect"); } void CGlueMgr::PollEnterWorld() { diff --git a/src/glue/Character.cpp b/src/glue/Character.cpp new file mode 100644 index 0000000..871a292 --- /dev/null +++ b/src/glue/Character.cpp @@ -0,0 +1,5 @@ +#include "glue/Character.hpp" + +void ValidateNameInitialize(int32_t localeMask, int32_t charsetMask) { + // TODO +} diff --git a/src/glue/Character.hpp b/src/glue/Character.hpp new file mode 100644 index 0000000..d6e40ae --- /dev/null +++ b/src/glue/Character.hpp @@ -0,0 +1,8 @@ +#ifndef GLUE_CHARACTER_HPP +#define GLUE_CHARACTER_HPP + +#include + +void ValidateNameInitialize(int32_t localeMask, int32_t charsetMask); + +#endif