mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 04:37:00 +00:00
Login with 3.2.2.10257 should work now.
This commit is contained in:
parent
48a470dfc1
commit
2c30020c7e
8 changed files with 53 additions and 21 deletions
|
|
@ -589,12 +589,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder *holder)
|
||||||
data << pCurrChar->GetOrientation();
|
data << pCurrChar->GetOrientation();
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
|
|
||||||
data.Initialize( SMSG_ACCOUNT_DATA_TIMES, 4+1+8*4 ); // changed in WotLK
|
SendAccountDataTimes(PER_CHARACTER_CACHE_MASK);
|
||||||
data << uint32(time(NULL)); // unix time of something
|
|
||||||
data << uint8(1);
|
|
||||||
for(int i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
|
|
||||||
data << uint32(GetAccountData(i)->Time); // also unix time
|
|
||||||
SendPacket(&data);
|
|
||||||
|
|
||||||
data.Initialize(SMSG_FEATURE_SYSTEM_STATUS, 2); // added in 2.2.0
|
data.Initialize(SMSG_FEATURE_SYSTEM_STATUS, 2); // added in 2.2.0
|
||||||
data << uint8(2); // unknown value
|
data << uint8(2); // unknown value
|
||||||
|
|
|
||||||
|
|
@ -645,14 +645,15 @@ struct ChrRacesEntry
|
||||||
uint32 TeamID; // 7 (7-Alliance 1-Horde)
|
uint32 TeamID; // 7 (7-Alliance 1-Horde)
|
||||||
// 8-11 unused
|
// 8-11 unused
|
||||||
uint32 CinematicSequence; // 12 id from CinematicSequences.dbc
|
uint32 CinematicSequence; // 12 id from CinematicSequences.dbc
|
||||||
char* name[16]; // 13-28 used for DBC language detection/selection
|
//uint32 unk_322; // 13
|
||||||
// 29 string flags, unused
|
char* name[16]; // 14-29 used for DBC language detection/selection
|
||||||
//char* nameFemale[16]; // 30-45, if different from base (male) case
|
// 30 string flags, unused
|
||||||
// 46 string flags, unused
|
//char* nameFemale[16]; // 31-46, if different from base (male) case
|
||||||
//char* nameNeutralGender[16]; // 47-62, if different from base (male) case
|
// 47 string flags, unused
|
||||||
// 63 string flags, unused
|
//char* nameNeutralGender[16]; // 48-63, if different from base (male) case
|
||||||
// 64-66 unused
|
// 64 string flags, unused
|
||||||
uint32 expansion; // 67 (0 - original race, 1 - tbc addon, ...)
|
// 65-67 unused
|
||||||
|
uint32 expansion; // 68 (0 - original race, 1 - tbc addon, ...)
|
||||||
};
|
};
|
||||||
|
|
||||||
/* not used
|
/* not used
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ const char CharTitlesEntryfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
|
||||||
const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx";
|
const char ChatChannelsEntryfmt[]="iixssssssssssssssssxxxxxxxxxxxxxxxxxx";
|
||||||
// ChatChannelsEntryfmt, index not used (more compact store)
|
// ChatChannelsEntryfmt, index not used (more compact store)
|
||||||
const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
|
const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
|
||||||
const char ChrRacesEntryfmt[]="nxixiixixxxxissssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
|
const char ChrRacesEntryfmt[]="nxixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
|
||||||
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
|
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
|
||||||
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
|
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
|
||||||
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
|
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
|
||||||
|
|
|
||||||
|
|
@ -548,7 +548,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||||
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateTextOpcode },
|
/*0x207*/ { "CMSG_GMTICKET_UPDATETEXT", STATUS_LOGGEDIN, &WorldSession::HandleGMTicketUpdateTextOpcode },
|
||||||
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_LOGGEDIN, &WorldSession::HandleRequestAccountData },
|
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_AUTHED, &WorldSession::HandleRequestAccountData },
|
||||||
/*0x20B*/ { "CMSG_UPDATE_ACCOUNT_DATA", STATUS_AUTHED, &WorldSession::HandleUpdateAccountData },
|
/*0x20B*/ { "CMSG_UPDATE_ACCOUNT_DATA", STATUS_AUTHED, &WorldSession::HandleUpdateAccountData },
|
||||||
/*0x20C*/ { "SMSG_UPDATE_ACCOUNT_DATA", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x20C*/ { "SMSG_UPDATE_ACCOUNT_DATA", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x20D*/ { "SMSG_CLEAR_FAR_SIGHT_IMMEDIATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x20D*/ { "SMSG_CLEAR_FAR_SIGHT_IMMEDIATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
|
|
|
||||||
|
|
@ -242,6 +242,8 @@ World::AddSession_ (WorldSession* s)
|
||||||
pkt << uint32(sWorld.getConfig(CONFIG_CLIENTCACHE_VERSION));
|
pkt << uint32(sWorld.getConfig(CONFIG_CLIENTCACHE_VERSION));
|
||||||
s->SendPacket(&pkt);
|
s->SendPacket(&pkt);
|
||||||
|
|
||||||
|
s->SendAccountDataTimes(GLOBAL_CACHE_MASK);
|
||||||
|
|
||||||
s->SendTutorialsData();
|
s->SendTutorialsData();
|
||||||
|
|
||||||
UpdateMaxSessionCounters ();
|
UpdateMaxSessionCounters ();
|
||||||
|
|
|
||||||
|
|
@ -568,6 +568,18 @@ void WorldSession::SetAccountData(uint32 type, time_t time_, std::string data)
|
||||||
CharacterDatabase.CommitTransaction ();
|
CharacterDatabase.CommitTransaction ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldSession::SendAccountDataTimes(uint32 mask)
|
||||||
|
{
|
||||||
|
WorldPacket data( SMSG_ACCOUNT_DATA_TIMES, 4+1+4+8*4 ); // changed in WotLK
|
||||||
|
data << uint32(time(NULL)); // unix time of something
|
||||||
|
data << uint8(1);
|
||||||
|
data << uint32(mask);
|
||||||
|
for(int i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
|
||||||
|
if(mask & (1 << i))
|
||||||
|
data << uint32(GetAccountData(i)->Time); // also unix time
|
||||||
|
SendPacket(&data);
|
||||||
|
}
|
||||||
|
|
||||||
void WorldSession::LoadTutorialsData()
|
void WorldSession::LoadTutorialsData()
|
||||||
{
|
{
|
||||||
for ( int aX = 0 ; aX < 8 ; ++aX )
|
for ( int aX = 0 ; aX < 8 ; ++aX )
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,21 @@ class CharacterHandler;
|
||||||
|
|
||||||
#define CHECK_PACKET_SIZE(P,S) if((P).size() < (S)) return SizeError((P),(S));
|
#define CHECK_PACKET_SIZE(P,S) if((P).size() < (S)) return SizeError((P),(S));
|
||||||
|
|
||||||
#define NUM_ACCOUNT_DATA_TYPES 8
|
enum AccountDataTypes
|
||||||
|
{
|
||||||
|
GLOBAL_CONFIG_CACHE = 0, // 0x01 g
|
||||||
|
PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p
|
||||||
|
GLOBAL_BINDINGS_CACHE = 2, // 0x04 g
|
||||||
|
PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p
|
||||||
|
GLOBAL_MACROS_CACHE = 4, // 0x10 g
|
||||||
|
PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p
|
||||||
|
PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p
|
||||||
|
PER_CHARACTER_CHAT_CACHE = 7, // 0x80 p
|
||||||
|
NUM_ACCOUNT_DATA_TYPES = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
#define GLOBAL_CACHE_MASK 0x15
|
||||||
|
#define PER_CHARACTER_CACHE_MASK 0xEA
|
||||||
|
|
||||||
struct AccountData
|
struct AccountData
|
||||||
{
|
{
|
||||||
|
|
@ -189,6 +203,7 @@ class MANGOS_DLL_SPEC WorldSession
|
||||||
// Account Data
|
// Account Data
|
||||||
AccountData *GetAccountData(uint32 type) { return &m_accountData[type]; }
|
AccountData *GetAccountData(uint32 type) { return &m_accountData[type]; }
|
||||||
void SetAccountData(uint32 type, time_t time_, std::string data);
|
void SetAccountData(uint32 type, time_t time_, std::string data);
|
||||||
|
void SendAccountDataTimes(uint32 mask);
|
||||||
void LoadAccountData();
|
void LoadAccountData();
|
||||||
void LoadTutorialsData();
|
void LoadTutorialsData();
|
||||||
void SendTutorialsData();
|
void SendTutorialsData();
|
||||||
|
|
|
||||||
|
|
@ -262,8 +262,13 @@ int WorldSocket::open (void *a)
|
||||||
m_Address = remote_addr.get_host_addr ();
|
m_Address = remote_addr.get_host_addr ();
|
||||||
|
|
||||||
// Send startup packet.
|
// Send startup packet.
|
||||||
WorldPacket packet (SMSG_AUTH_CHALLENGE, 4);
|
WorldPacket packet (SMSG_AUTH_CHALLENGE, 24);
|
||||||
|
packet << uint32(1);
|
||||||
packet << m_Seed;
|
packet << m_Seed;
|
||||||
|
packet << uint32(0xF3539DA3);
|
||||||
|
packet << uint32(0x6E8547B9);
|
||||||
|
packet << uint32(0x9A6AA2F8);
|
||||||
|
packet << uint32(0xA4F170F4);
|
||||||
|
|
||||||
if (SendPacket (packet) == -1)
|
if (SendPacket (packet) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -744,6 +749,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
||||||
uint8 digest[20];
|
uint8 digest[20];
|
||||||
uint32 clientSeed;
|
uint32 clientSeed;
|
||||||
uint32 unk2, unk3;
|
uint32 unk2, unk3;
|
||||||
|
uint64 unk4;
|
||||||
uint32 BuiltNumberClient;
|
uint32 BuiltNumberClient;
|
||||||
uint32 id, security;
|
uint32 id, security;
|
||||||
uint8 expansion = 0;
|
uint8 expansion = 0;
|
||||||
|
|
@ -755,7 +761,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
||||||
|
|
||||||
BigNumber K;
|
BigNumber K;
|
||||||
|
|
||||||
if (recvPacket.size () < (4 + 4 + 1 + 4 + 4 + 20))
|
if (recvPacket.size () < (4 + 4 + 1 + 4 + 4 + 8 + 20))
|
||||||
{
|
{
|
||||||
sLog.outError ("WorldSocket::HandleAuthSession: wrong packet size");
|
sLog.outError ("WorldSocket::HandleAuthSession: wrong packet size");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -767,13 +773,14 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
||||||
recvPacket >> account;
|
recvPacket >> account;
|
||||||
recvPacket >> unk3;
|
recvPacket >> unk3;
|
||||||
|
|
||||||
if (recvPacket.size () < (4 + 4 + (account.size () + 1) + 4 + 4 + 20))
|
if (recvPacket.size () < (4 + 4 + (account.size () + 1) + 4 + 4 + 8 + 20))
|
||||||
{
|
{
|
||||||
sLog.outError ("WorldSocket::HandleAuthSession: wrong packet size second check");
|
sLog.outError ("WorldSocket::HandleAuthSession: wrong packet size second check");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
recvPacket >> clientSeed;
|
recvPacket >> clientSeed;
|
||||||
|
recvPacket >> unk4;
|
||||||
recvPacket.read (digest, 20);
|
recvPacket.read (digest, 20);
|
||||||
|
|
||||||
DEBUG_LOG ("WorldSocket::HandleAuthSession: client %u, unk2 %u, account %s, unk3 %u, clientseed %u",
|
DEBUG_LOG ("WorldSocket::HandleAuthSession: client %u, unk2 %u, account %s, unk3 %u, clientseed %u",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue