diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index c160892..f747e62 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -668,6 +668,12 @@ void CGlueMgr::PollUserSurvey() { } } +void CGlueMgr::CancelLogin() { + if (CGlueMgr::m_idleState == IDLE_LOGIN_SERVER_LOGIN) { + CGlueMgr::StatusDialogClick(); + } +} + void CGlueMgr::InitCursor() { uint32_t width; uint32_t height; diff --git a/src/glue/CGlueMgr.hpp b/src/glue/CGlueMgr.hpp index e7d72b8..cd783b8 100644 --- a/src/glue/CGlueMgr.hpp +++ b/src/glue/CGlueMgr.hpp @@ -89,6 +89,7 @@ class CGlueMgr { static void PollCharacterList(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); static void PollDeleteCharacter(int32_t errorCode, const char* msg, int32_t complete, int32_t result, WOWCS_OPS op); static void PollUserSurvey(); + static void CancelLogin(); static void Resume(); static void SetCurrentAccount(const char* accountName); static void SetLoginStateAndResult(LOGIN_STATE state, LOGIN_RESULT result, char const* addrStr, char const* stateStr, char const* resultStr, uint8_t flags); diff --git a/src/net/login/GruntLogin.cpp b/src/net/login/GruntLogin.cpp index b0b843e..211a6f8 100644 --- a/src/net/login/GruntLogin.cpp +++ b/src/net/login/GruntLogin.cpp @@ -113,7 +113,9 @@ void GruntLogin::Init(LoginResponse* loginResponse) { } void GruntLogin::Logoff() { - // TODO + if (this->m_loggedOn) { + this->m_clientLink->Disconnect(); + } } void GruntLogin::Logon(const char* a2, const char* a3) { diff --git a/src/ui/ScriptFunctionsGlueScriptEvents.cpp b/src/ui/ScriptFunctionsGlueScriptEvents.cpp index 85ebadb..46b9f52 100644 --- a/src/ui/ScriptFunctionsGlueScriptEvents.cpp +++ b/src/ui/ScriptFunctionsGlueScriptEvents.cpp @@ -511,7 +511,8 @@ int32_t Script_RequestRealmSplitInfo(lua_State* L) { } int32_t Script_CancelLogin(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + CGlueMgr::CancelLogin(); + return 0; } int32_t Script_GetCVar(lua_State* L) {