From c73cf6b0199d7c2932d87ba76a56278f4da1beca Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Mon, 9 Feb 2026 22:28:59 -0500 Subject: [PATCH] feat(Core/Handlers): Make use of a few billing plan flags for authentication response. (#24569) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/server/game/Handlers/AuthHandler.cpp | 8 +++--- src/server/game/Server/WorldSession.cpp | 31 ++++++++++++++++++++++++ src/server/game/Server/WorldSession.h | 5 ++++ src/server/game/World/World.h | 12 ++++----- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 52dcffdec..99506a786 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -23,10 +23,10 @@ void WorldSession::SendAuthResponse(uint8 code, bool shortForm, uint32 queuePos) { WorldPacket packet(SMSG_AUTH_RESPONSE, 1 + 4 + 1 + 4 + 1 + (shortForm ? 0 : (4 + 1))); packet << uint8(code); - packet << uint32(0); // BillingTimeRemaining - packet << uint8(0); // BillingPlanFlags - packet << uint32(0); // BillingTimeRested - uint8 exp = Expansion(); // 0 - normal, 1 - TBC, 2 - WOTLK, must be set in database manually for each account + packet << uint32(0); // BillingTimeRemaining + packet << GetBillingPlanFlags(); + packet << uint32(0); // BillingTimeRested + uint8 exp = Expansion(); // 0 - normal, 1 - TBC, 2 - WotLK, must be set in database manually for each account if (exp >= MAX_EXPANSIONS) exp = MAX_EXPANSIONS - 1; diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 254328b80..208835067 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -208,6 +208,37 @@ bool WorldSession::IsGMAccount() const return GetSecurity() >= SEC_GAMEMASTER; } +bool WorldSession::IsTrialAccount() const +{ + return HasAccountFlag(ACCOUNT_FLAG_TRIAL); +} + +bool WorldSession::IsInternetGameRoomAccount() const +{ + return HasAccountFlag(ACCOUNT_FLAG_IGR); +} + +bool WorldSession::IsRecurringBillingAccount() const +{ + return HasAccountFlag(ACCOUNT_FLAG_RECURRING_BILLING); +} + +uint8 WorldSession::GetBillingPlanFlags() const +{ + uint8 flags = SESSION_NONE; + + if (IsRecurringBillingAccount()) + flags |= SESSION_RECURRING_BILL; + + if (IsTrialAccount()) + flags |= SESSION_FREE_TRIAL; + + if (IsInternetGameRoomAccount()) + flags |= SESSION_IGR; + + return flags; +} + std::string const& WorldSession::GetPlayerName() const { return _player ? _player->GetName() : DefaultPlayerName; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 6a1c554ca..4a113d881 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -383,6 +383,11 @@ public: void ValidateAccountFlags(); bool IsGMAccount() const; + bool IsTrialAccount() const; + bool IsInternetGameRoomAccount() const; + bool IsRecurringBillingAccount() const; + + uint8 GetBillingPlanFlags() const; bool PlayerLoading() const { return m_playerLoading; } bool PlayerLogout() const { return m_playerLogout; } diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 942665b4d..d792b4d8c 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -73,14 +73,14 @@ enum WorldTimers enum BillingPlanFlags { SESSION_NONE = 0x00, - SESSION_UNUSED = 0x01, + SESSION_UNUSED = 0x01, // Unk, NYI SESSION_RECURRING_BILL = 0x02, SESSION_FREE_TRIAL = 0x04, - SESSION_IGR = 0x08, - SESSION_USAGE = 0x10, - SESSION_TIME_MIXTURE = 0x20, - SESSION_RESTRICTED = 0x40, - SESSION_ENABLE_CAIS = 0x80, + SESSION_IGR = 0x08, // Internet Game Room + SESSION_USAGE = 0x10, // Unk, NYI + SESSION_TIME_MIXTURE = 0x20, // Unk, NYI + SESSION_RESTRICTED = 0x40, // Unk, NYI + SESSION_ENABLE_CAIS = 0x80, // Unk, NYI, possibly account play time limit related for China? }; enum RealmZone