Handle SMSG_CHARACTER_LOGIN_FAILED (0x041) for AzerothCore/Playerbot compatibility

Previously this opcode was unrecognised and silently dropped, leaving the
client stuck in ENTERING_WORLD with no feedback when the server rejected a
login (duplicate session, world down, disabled race/class, etc.). Now we
decode the LoginFailureReason byte, reset state to CHAR_LIST_RECEIVED so
the player can retry, and surface a red error message on the character screen
via the new CharLoginFailCallback. Also adds isError colour support to
CharacterScreen::setStatus so failures show in red and successes in green.
This commit is contained in:
Kelsi 2026-02-17 13:59:29 -08:00
parent 36fc1df706
commit 7cf060a9f6
11 changed files with 61 additions and 4 deletions

View file

@ -48,6 +48,7 @@ static const OpcodeNameEntry kOpcodeNames[] = {
{"SMSG_CHAR_CREATE", LogicalOpcode::SMSG_CHAR_CREATE},
{"SMSG_CHAR_ENUM", LogicalOpcode::SMSG_CHAR_ENUM},
{"SMSG_CHAR_DELETE", LogicalOpcode::SMSG_CHAR_DELETE},
{"SMSG_CHARACTER_LOGIN_FAILED", LogicalOpcode::SMSG_CHARACTER_LOGIN_FAILED},
{"SMSG_PONG", LogicalOpcode::SMSG_PONG},
{"SMSG_LOGIN_VERIFY_WORLD", LogicalOpcode::SMSG_LOGIN_VERIFY_WORLD},
{"SMSG_LOGIN_SETTIMESPEED", LogicalOpcode::SMSG_LOGIN_SETTIMESPEED},
@ -386,6 +387,7 @@ void OpcodeTable::loadWotlkDefaults() {
{LogicalOpcode::SMSG_CHAR_CREATE, 0x03A},
{LogicalOpcode::SMSG_CHAR_ENUM, 0x03B},
{LogicalOpcode::SMSG_CHAR_DELETE, 0x03C},
{LogicalOpcode::SMSG_CHARACTER_LOGIN_FAILED, 0x041},
{LogicalOpcode::SMSG_PONG, 0x1DD},
{LogicalOpcode::SMSG_LOGIN_VERIFY_WORLD, 0x236},
{LogicalOpcode::SMSG_LOGIN_SETTIMESPEED, 0x042},