Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
AuthHandler.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "Config.h"
7#include "Opcodes.h"
8#include "WorldPacket.h"
9#include "WorldSession.h"
10
11#define PLAYABLE_RACES_COUNT 15
12#define PLAYABLE_CLASSES_COUNT 11
13
32
47
48void WorldSession::SendAuthResponse(ResponseCodes code, bool queued, uint32 queuePos)
49{
50 SF_LOG_DEBUG("network", "SMSG_AUTH_RESPONSE");
52
53 packet.WriteBit(code == ResponseCodes::AUTH_OK);
54
55 if (code == ResponseCodes::AUTH_OK)
56 {
57 packet.WriteBits(realmNameStore.size(), 21); // Send current realmId
58
59 for (std::map<uint32, std::string>::const_iterator itr = realmNameStore.begin(); itr != realmNameStore.end(); ++itr)
60 {
61 packet.WriteBits(itr->second.size(), 8);
62 std::string normalized = itr->second;
63 normalized.erase(std::remove_if(normalized.begin(), normalized.end(), ::isspace), normalized.end());
64 packet.WriteBits(normalized.size(), 8);
65 packet.WriteBit(itr->first == GetVirtualRealmID()); // Home realm
66 }
67
69 packet.WriteBits(0, 21);
70 packet.WriteBit(0);
71 packet.WriteBit(0);
72 packet.WriteBit(0);
73 packet.WriteBit(0);
75 packet.WriteBit(0);
76 }
77
78 packet.WriteBit(queued);
79
80 if (queued)
81 packet.WriteBit(1);
82
83 packet.FlushBits();
84
85 if (queued)
86 packet << uint32(queuePos);
87
88 if (code == ResponseCodes::AUTH_OK)
89 {
90 for (std::map<uint32, std::string>::const_iterator itr = realmNameStore.begin(); itr != realmNameStore.end(); ++itr)
91 {
92 packet << uint32(itr->first);
93 packet.WriteString(itr->second);
94 std::string normalized = itr->second;
95 normalized.erase(std::remove_if(normalized.begin(), normalized.end(), ::isspace), normalized.end());
96 packet.WriteString(normalized);
97 }
98
99 for (int i = 0; i < PLAYABLE_RACES_COUNT; i++)
100 {
101 packet << uint8(raceExpansion[i][1]);
102 packet << uint8(raceExpansion[i][0]);
103 }
104
105 for (int i = 0; i < PLAYABLE_CLASSES_COUNT; i++)
106 {
107 packet << uint8(classExpansion[i][1]);
108 packet << uint8(classExpansion[i][0]);
109 }
110
111 packet << uint32(0);
112 packet << uint8(Expansion()); // Active Expansion
113 packet << uint32(0);
114 packet << uint32(0); // "Your playtime expires in %u minutes." Gossip Code Box Warning, 1 = 1min
115 packet << uint8(Expansion()); // Server Expansion
116 packet << uint32(0);
117 packet << uint32(0);
118 packet << uint32(0);
119 }
120
121 packet << uint8(code);
122
123 SendPacket(&packet);
124}
125
127{
129 data << uint32(version);
130 SendPacket(&data);
131}
132
134{
136 data.WriteBit(true); // show ingame shop icon
137 data.WriteBit(false); // ingame shop parental control
138 data.WriteBit(true); // ingame shop status
139 data.FlushBits();
140
141 SendPacket(&data);
142}
#define PLAYABLE_CLASSES_COUNT
uint8 classExpansion[PLAYABLE_CLASSES_COUNT][2]
#define PLAYABLE_RACES_COUNT
uint8 raceExpansion[PLAYABLE_RACES_COUNT][2]
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
ResponseCodes
@ CLASS_HUNTER
@ CLASS_DRUID
@ CLASS_SHAMAN
@ CLASS_MONK
@ CLASS_PRIEST
@ CLASS_WARRIOR
@ CLASS_WARLOCK
@ CLASS_MAGE
@ CLASS_DEATH_KNIGHT
@ CLASS_PALADIN
@ CLASS_ROGUE
@ RACE_TROLL
@ RACE_UNDEAD_PLAYER
@ RACE_PANDAREN_NEUTRAL
@ RACE_ORC
@ RACE_DRAENEI
@ RACE_NIGHTELF
@ RACE_BLOODELF
@ RACE_DWARF
@ RACE_GNOME
@ RACE_GOBLIN
@ RACE_HUMAN
@ RACE_WORGEN
@ RACE_PANDAREN_ALLIANCE
@ RACE_PANDAREN_HORDE
@ RACE_TAUREN
@ EXPANSION_CLASSIC
@ EXPANSION_THE_BURNING_CRUSADE
@ EXPANSION_MISTS_OF_PANDARIA
@ EXPANSION_CATACLYSM
@ EXPANSION_WRATH_OF_THE_LICH_KING
bool WriteBit(uint32 bit)
Definition ByteBuffer.h:164
void WriteString(std::string const &str)
Definition ByteBuffer.h:578
void WriteBits(T value, size_t bits)
Definition ByteBuffer.h:192
void FlushBits()
Definition ByteBuffer.h:154
uint8 Expansion() const
void SendClientCacheVersion(uint32 version)
uint32 GetVirtualRealmID() const
void SendPacket(WorldPacket const *packet, bool forced=false)
Send a packet to the client.
void SendAuthResponse(ResponseCodes code, bool queued, uint32 queuePos=0)
void SendFeatureSystemStatusGlueScreen()
@ SMSG_CLIENTCACHE_VERSION
Definition Opcodes.h:617
@ SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN
Definition Opcodes.h:655
@ SMSG_AUTH_RESPONSE
Definition Opcodes.h:534
RealmNameMap realmNameStore
Definition Main.cpp:72