diff options
Diffstat (limited to 'src/server/game/Handlers/AuthHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/AuthHandler.cpp | 92 |
1 files changed, 35 insertions, 57 deletions
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 6ffe0b7f024..9b14a8eef81 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -19,76 +19,54 @@ #include "Opcodes.h" #include "WorldSession.h" #include "WorldPacket.h" +#include "AuthenticationPackets.h" void WorldSession::SendAuthResponse(uint8 code, bool queued, uint32 queuePos) { - ExpansionRequirementContainer const& raceExpansions = sObjectMgr->GetRaceExpansionRequirements(); - ExpansionRequirementContainer const& classExpansions = sObjectMgr->GetClassExpansionRequirements(); - - std::list<uint32> realmsToSend; - // Send current home realm. Also there is no need to send it later in realm queries. - realmsToSend.push_back(realmHandle.Index); - - WorldPacket packet(SMSG_AUTH_RESPONSE, 1 /*bits*/ + 4 + 1 + 4 + 1 + 4 + 1 + 1 + (queued ? 4 : 0)); - packet << uint8(code); - packet.WriteBit(code == AUTH_OK); - packet.WriteBit(queued); - + WorldPackets::Auth::AuthResponse response; + response.SuccessInfo.HasValue = code == AUTH_OK; + response.Result = code; + response.WaitInfo.HasValue = queued; + response.WaitInfo.value.WaitCount = queuePos; if (code == AUTH_OK) { - packet << uint32(realmHandle.Index); - packet << uint32(realmsToSend.size()); // RealmNamesCount - packet << uint32(0); // BillingTimeRemaining - packet << uint32(0); // BillingPlanFlags - packet << uint32(0); // BillingTimeRested - packet << uint8(Expansion()); // ActiveExpansion - packet << uint8(Expansion()); // AccountExpansion - packet << uint32(0); // TimeSecondsUntilPCKick - packet << uint32(raceExpansions.size()); // Races - packet << uint32(classExpansions.size()); // Classes - packet << uint32(0); // Templates - packet << uint32(0); // AccountCurrency (probably for ingame shop) + response.SuccessInfo.value.AccountExpansionLevel = Expansion(); + response.SuccessInfo.value.ActiveExpansionLevel = Expansion(); + response.SuccessInfo.value.VirtualRealmAddress = realmHandle.Index; - for (auto realm : realmsToSend) - { - std::string realmName = sObjectMgr->GetRealmName(realm); + std::string realmName = sObjectMgr->GetRealmName(realmHandle.Index); - packet << uint32(realm); // realmID - packet.WriteBit(realm == realmHandle.Index);// IsHomeRealm - packet.WriteBit(0); // IsInternalRealm = guessed - packet.WriteBits(realmName.length(), 8); - packet.WriteBits(realmName.length(), 8); - packet.WriteString(realmName); // RealmNameActual - packet.WriteString(realmName); // RealmNameNormalized - } + // Send current home realm. Also there is no need to send it later in realm queries. + response.SuccessInfo.value.VirtualRealms.emplace_back(realmHandle.Index, true, false, realmName, realmName); + + response.SuccessInfo.value.AvailableClasses = &sObjectMgr->GetClassExpansionRequirements(); + response.SuccessInfo.value.AvailableRaces = &sObjectMgr->GetRaceExpansionRequirements(); + } - for (auto raceExpansion : raceExpansions) - { - packet << uint8(raceExpansion.first); // Race - packet << uint8(raceExpansion.second); // RequiredExpansion - } + response.Write(); + SendPacket(&response.GetWorldPacket()); +} - for (auto classExpansion : classExpansions) - { - packet << uint8(classExpansion.first); // Class - packet << uint8(classExpansion.second); // RequiredExpansion - } +void WorldSession::SendAuthWaitQue(uint32 position) +{ + WorldPackets::Auth::AuthResponse response; - packet.WriteBit(0); // Trial - packet.WriteBit(0); // ForceCharacterTemplate - packet.WriteBit(0); // NumPlayersHorde (uint16) - packet.WriteBit(0); // NumPlayersAlliance (uint16) - packet.WriteBit(0); // IsVeteranTrial + if (position == 0) + { + response.Result = AUTH_OK; + response.SuccessInfo.HasValue = false; + response.WaitInfo.HasValue = false; } - - if (queued) + else { - packet << uint32(queuePos); // Queue position - packet.WriteBit(0); // HasFCM + response.WaitInfo.HasValue = true; + response.SuccessInfo.HasValue = false; + response.WaitInfo.value.WaitCount = position; + response.Result = AUTH_WAIT_QUEUE; } - - packet.FlushBits(); - SendPacket(&packet); + + response.Write(); + SendPacket(&response.GetWorldPacket()); } void WorldSession::SendClientCacheVersion(uint32 version) |