feat(glue): implement character login in CGlueMgr::PollEnterWorld

This commit is contained in:
fallenoak 2025-10-06 23:15:25 -05:00
parent 737de968f7
commit 509cec3f94
No known key found for this signature in database
GPG Key ID: 7628F8E61AEA070D
5 changed files with 32 additions and 4 deletions

View File

@ -617,16 +617,21 @@ void CGlueMgr::PollEnterWorld() {
CGlueMgr::m_showedDisconnect = 0;
// TODO SI Logic
// TODO ClientConnection::CharacterLogin()
// TODO TLS shenanigans with guid
ClientServices::Connection()->CharacterLogin(CGlueMgr::m_characterInfo->info.guid, 0);
return;
}
// TODO Get map ID and position from character info
uint32_t mapId = 0;
C3Vector position = { 0.0f, 0.0f, 0.0f };
uint32_t mapId = CGlueMgr::m_characterInfo->info.mapID;
C3Vector position = CGlueMgr::m_characterInfo->info.position;
// TODO TLS shenanigans with guid
// TODO first login logic (play intro M2?)
CGlueMgr::Suspend();
ClientInitializeGame(mapId, position);
}

View File

@ -23,6 +23,16 @@ void ClientConnection::Cancel(int32_t errorCode) {
this->Complete(0, errorCode);
}
void ClientConnection::CharacterLogin(uint64_t guid, int32_t a2) {
this->Initiate(COP_LOGIN_CHARACTER, 76, nullptr);
if (this->m_connected) {
this->RequestCharacterLogin(guid, a2);
} else {
this->Cancel(4);
}
}
void ClientConnection::Cleanup() {
if (this->m_cleanup) {
this->m_cleanup();

View File

@ -30,6 +30,7 @@ class ClientConnection : public RealmConnection {
void AccountLogin_Finish(int32_t authResult);
void AccountLogin_Queued();
void Cancel(int32_t errorCode);
void CharacterLogin(uint64_t guid, int32_t a2);
void Cleanup();
void Complete(int32_t result, int32_t errorCode);
void Connect();

View File

@ -294,6 +294,17 @@ void RealmConnection::RequestCharacterEnum() {
this->Send(&msg);
}
void RealmConnection::RequestCharacterLogin(uint64_t guid, int32_t a2) {
CDataStore msg;
msg.Put(static_cast<uint32_t>(CMSG_PLAYER_LOGIN));
msg.Put(guid);
msg.Finalize();
this->Send(&msg);
}
void RealmConnection::SetSelectedRealm(uint32_t a2, uint32_t a3, uint32_t a4) {
// TODO
}

View File

@ -52,6 +52,7 @@ class RealmConnection : public NetClient {
int32_t HandleAuthResponse(uint32_t msgId, uint32_t time, CDataStore* msg);
int32_t HandleCharEnum(uint32_t msgId, uint32_t time, CDataStore* msg);
void RequestCharacterEnum();
void RequestCharacterLogin(uint64_t guid, int32_t a2);
void SetSelectedRealm(uint32_t a2, uint32_t a3, uint32_t a4);
};