diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 6528583..fb16621 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -393,6 +393,11 @@ int32_t CGlueMgr::Idle(const void* a1, void* a2) { break; } + case IDLE_CREATE_CHARACTER: { + CGlueMgr::PollCreateCharacter(msg, complete, result); + break; + } + case IDLE_DELETE_CHARACTER: { CGlueMgr::PollDeleteCharacter(msg, complete, result); break; @@ -763,6 +768,37 @@ void CGlueMgr::PollCharacterList(const char* msg, int32_t complete, int32_t resu } } +void CGlueMgr::PollCreateCharacter(const char* msg, int32_t complete, int32_t result) { + FrameScript_SignalEvent(UPDATE_STATUS_DIALOG, "%s", msg); + + if (CGlueMgr::HandleBattlenetDisconnect()) { + SetIdleState(IDLE_NONE); + } + + if (!complete) { + return; + } + + // Error + + if (result == 0) { + FrameScript_SignalEvent(OPEN_STATUS_DIALOG, "%s%s", "OKAY", msg); + + CGlueMgr::SetIdleState(IDLE_NONE); + + return; + } + + // Success + + CGlueMgr::SetIdleState(IDLE_NONE); + + FrameScript_SignalEvent(CLOSE_STATUS_DIALOG, nullptr); + FrameScript_SignalEvent(SELECT_LAST_CHARACTER, nullptr); + + CGlueMgr::SetScreen("charselect"); +} + void CGlueMgr::PollDeleteCharacter(const char* msg, int32_t complete, int32_t result) { FrameScript_SignalEvent(UPDATE_STATUS_DIALOG, "%s", msg); diff --git a/src/glue/CGlueMgr.hpp b/src/glue/CGlueMgr.hpp index 38e369b..e608366 100644 --- a/src/glue/CGlueMgr.hpp +++ b/src/glue/CGlueMgr.hpp @@ -80,6 +80,7 @@ class CGlueMgr { static int32_t OnKickReasonMsg(void* param, NETMESSAGE msgId, uint32_t time, CDataStore* msg); static void PollAccountLogin(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); static void PollCharacterList(const char* msg, int32_t complete, int32_t result, int32_t errorCode); + static void PollCreateCharacter(const char* msg, int32_t complete, int32_t result); static void PollDeleteCharacter(const char* msg, int32_t complete, int32_t result); static void PollEnterWorld(); static void PollLoginServerLogin();