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

This commit is contained in:
fallenoak committed 2025-10-06 23:15:25 -05:00
1 parent 737de968f7
commit 509cec3f94
5 files changed
+32 -4

No files matched your search

+9 -4
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);
}
+10
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();
+1
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();
+11
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
}
+1
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);
};