diff options
author | Shauren <shauren.trinity@gmail.com> | 2014-10-20 01:33:10 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-10-20 01:33:10 +0200 |
commit | 484eae18ea1310f0b85612adb8fa9a83d782ac89 (patch) | |
tree | 0295a3122fbe1f2a982249100df602d035bdaf73 /src/server/game/Handlers/AuthHandler.cpp | |
parent | 5e5643015692aa5196a0550c318a6c35763bd832 (diff) | |
parent | 51095ad39b253b83632e8de954bf7a5e30aa9944 (diff) |
Merge pull request #13361 from Sovak/602
Core/NetworkIO: *Fixed basic auth packets
Diffstat (limited to 'src/server/game/Handlers/AuthHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/AuthHandler.cpp | 72 |
1 files changed, 59 insertions, 13 deletions
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 5fafeea9991..6ffe0b7f024 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -15,33 +15,79 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "ObjectMgr.h" #include "Opcodes.h" #include "WorldSession.h" #include "WorldPacket.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); - if (queued) - packet.WriteBit(0); - packet.WriteBit(1); // has account info + 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) - packet.FlushBits(); + for (auto realm : realmsToSend) + { + std::string realmName = sObjectMgr->GetRealmName(realm); - // account info - packet << uint32(0); // BillingTimeRemaining - packet << uint8(Expansion()); // 0 - normal, 1 - TBC, 2 - WOTLK, 3 - CATA; must be set in database manually for each account - packet << uint32(0); - packet << uint8(Expansion()); // Unknown, these two show the same - packet << uint32(0); // BillingTimeRested - packet << uint8(0); // BillingPlanFlags + 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 + } + + for (auto raceExpansion : raceExpansions) + { + packet << uint8(raceExpansion.first); // Race + packet << uint8(raceExpansion.second); // RequiredExpansion + } + + for (auto classExpansion : classExpansions) + { + packet << uint8(classExpansion.first); // Class + packet << uint8(classExpansion.second); // RequiredExpansion + } + + packet.WriteBit(0); // Trial + packet.WriteBit(0); // ForceCharacterTemplate + packet.WriteBit(0); // NumPlayersHorde (uint16) + packet.WriteBit(0); // NumPlayersAlliance (uint16) + packet.WriteBit(0); // IsVeteranTrial + } - packet << uint8(code); if (queued) - packet << uint32(queuePos); // Queue position + { + packet << uint32(queuePos); // Queue position + packet.WriteBit(0); // HasFCM + } + packet.FlushBits(); SendPacket(&packet); } |