From 6b7abe3c03a39bdf3ab9f8dc42f6c9ee55199c75 Mon Sep 17 00:00:00 2001 From: Tristan 'Natrist' Cormier Date: Mon, 23 Feb 2026 22:31:12 -0500 Subject: [PATCH] feat(connection): implement character creation message handlers (#166) Co-authored-by: fallenoak --- src/net/connection/ClientConnection.cpp | 4 ++++ src/net/connection/ClientConnection.hpp | 1 + src/net/connection/RealmConnection.cpp | 11 ++++++++++- src/net/connection/RealmConnection.hpp | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index 66434c0..8dba0a9 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -104,6 +104,10 @@ void ClientConnection::GetRealmList() { } } +void ClientConnection::HandleCharacterCreate(uint8_t result) { + this->Complete(result == 47, result); +} + void ClientConnection::HandleCharacterDelete(uint8_t result) { this->Complete(result == 71, result); } diff --git a/src/net/connection/ClientConnection.hpp b/src/net/connection/ClientConnection.hpp index c24fa3a..3e30b88 100644 --- a/src/net/connection/ClientConnection.hpp +++ b/src/net/connection/ClientConnection.hpp @@ -22,6 +22,7 @@ class ClientConnection : public RealmConnection { // Virtual member functions virtual int32_t HandleConnect(); + virtual void HandleCharacterCreate(uint8_t result); virtual void HandleCharacterDelete(uint8_t result); // Member functions diff --git a/src/net/connection/RealmConnection.cpp b/src/net/connection/RealmConnection.cpp index 9bc0a6a..0ede2da 100644 --- a/src/net/connection/RealmConnection.cpp +++ b/src/net/connection/RealmConnection.cpp @@ -20,7 +20,7 @@ int32_t RealmConnection::MessageHandler(void* param, NETMESSAGE msgId, uint32_t } case SMSG_CHAR_CREATE: { - // TODO + result = connection->CreateCharHandler(msgId, time, msg); break; } @@ -294,6 +294,15 @@ int32_t RealmConnection::HandleCharEnum(uint32_t msgId, uint32_t time, CDataStor return 1; } +int32_t RealmConnection::CreateCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg) { + uint8_t result; + msg->Get(result); + + this->HandleCharacterCreate(result); + + return 1; +} + int32_t RealmConnection::DeleteCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg) { uint8_t result; msg->Get(result); diff --git a/src/net/connection/RealmConnection.hpp b/src/net/connection/RealmConnection.hpp index 332401b..b7a9556 100644 --- a/src/net/connection/RealmConnection.hpp +++ b/src/net/connection/RealmConnection.hpp @@ -46,12 +46,14 @@ class RealmConnection : public NetClient { // Virtual member functions virtual int32_t HandleAuthChallenge(AuthenticationChallenge* challenge); + virtual void HandleCharacterCreate(uint8_t result) = 0; virtual void HandleCharacterDelete(uint8_t result) = 0; // Member functions RealmConnection(RealmResponse* realmResponse); int32_t HandleAuthResponse(uint32_t msgId, uint32_t time, CDataStore* msg); int32_t HandleCharEnum(uint32_t msgId, uint32_t time, CDataStore* msg); + int32_t CreateCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg); int32_t DeleteCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg); void RequestCharacterEnum(); void RequestCharacterLogin(uint64_t guid, int32_t a2);