Fix auth protocol to match real WoW 3.3.5a client format

Three critical bugs fixed:
- LOGON_CHALLENGE request: set protocol byte to 0x03 (was 0x00) and
  reverse FourCC strings (game/platform/os/locale) to match real client
- Response parsers: remove double-read of opcode byte that shifted all
  field reads by one, preventing successful auth with real servers
- LOGON_PROOF response sizes: success=32 bytes, failure=4 bytes to match
  TrinityCore/AzerothCore format

Also adds missing auth result codes (0x13-0x20, 0xFF) including
IGR_WITHOUT_BNET (0x17) which Warmane was returning.
This commit is contained in:
Kelsi 2026-02-05 12:39:34 -08:00
parent 1b414d24d8
commit 5ef11fdc7d
4 changed files with 53 additions and 52 deletions

View file

@ -31,6 +31,17 @@ const char* getAuthResultString(AuthResult result) {
case AuthResult::LOCK_ENFORCED: return "Account locked - check your email";
case AuthResult::TRIAL_EXPIRED: return "Trial period has expired";
case AuthResult::BATTLE_NET: return "Battle.net error";
case AuthResult::ANTI_INDULGENCE: return "Anti-indulgence time limit reached";
case AuthResult::EXPIRED: return "Account subscription has expired";
case AuthResult::NO_GAME_ACCOUNT: return "No game account found - create one on the server website";
case AuthResult::CHARGEBACK: return "Account locked due to chargeback";
case AuthResult::IGR_WITHOUT_BNET:
return "Internet Game Room access denied - account may require "
"registration on the server website";
case AuthResult::GAME_ACCOUNT_LOCKED: return "Game account is locked";
case AuthResult::UNLOCKABLE_LOCK: return "Account is locked and cannot be unlocked";
case AuthResult::CONVERSION_REQUIRED: return "Account conversion required";
case AuthResult::DISCONNECTED: return "Disconnected from server";
default:
snprintf(authResultBuf, sizeof(authResultBuf),
"Server rejected login (error code 0x%02X)",