mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
Merge commit 'origin/master' into 320
Conflicts: src/game/CharacterHandler.cpp src/game/Opcodes.cpp src/game/WorldSession.h
This commit is contained in:
commit
d26712c6ba
15 changed files with 150 additions and 39 deletions
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
DROP TABLE IF EXISTS `character_db_version`;
|
||||
CREATE TABLE `character_db_version` (
|
||||
`required_8409_01_characters_guild` bit(1) default NULL
|
||||
`required_8433_01_characters_character_account_data` bit(1) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
|
||||
|
||||
--
|
||||
|
|
@ -247,6 +247,28 @@ LOCK TABLES `characters` WRITE;
|
|||
/*!40000 ALTER TABLE `characters` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `character_account_data`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `character_account_data`;
|
||||
CREATE TABLE `character_account_data` (
|
||||
`guid` int(11) unsigned NOT NULL default '0',
|
||||
`type` int(11) unsigned NOT NULL default '0',
|
||||
`time` bigint(11) unsigned NOT NULL default '0',
|
||||
`data` longtext NOT NULL,
|
||||
PRIMARY KEY (`guid`,`type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Dumping data for table `character_account_data`
|
||||
--
|
||||
|
||||
LOCK TABLES `character_account_data` WRITE;
|
||||
/*!40000 ALTER TABLE `character_account_data` DISABLE KEYS */;
|
||||
/*!40000 ALTER TABLE `character_account_data` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--
|
||||
-- Table structure for table `character_achievement`
|
||||
--
|
||||
|
|
|
|||
16
sql/updates/8433_01_characters_character_account_data.sql
Normal file
16
sql/updates/8433_01_characters_character_account_data.sql
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
ALTER TABLE character_db_version CHANGE COLUMN required_8409_01_characters_guild required_8433_01_characters_character_account_data bit;
|
||||
|
||||
DROP TABLE IF EXISTS `character_account_data`;
|
||||
CREATE TABLE `character_account_data` (
|
||||
`guid` int(11) unsigned NOT NULL default '0',
|
||||
`type` int(11) unsigned NOT NULL default '0',
|
||||
`time` bigint(11) unsigned NOT NULL default '0',
|
||||
`data` longtext NOT NULL,
|
||||
PRIMARY KEY (`guid`,`type`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO character_account_data
|
||||
SELECT c.guid as guid, a.type as type, a.time as time, a.data as data
|
||||
FROM characters c LEFT JOIN account_data a ON c.account = a.account WHERE a.type IN (1, 3, 5, 6, 7);
|
||||
|
||||
DELETE FROM account_data WHERE type IN (1, 3, 5, 6, 7);
|
||||
|
|
@ -95,6 +95,7 @@ pkgdata_DATA = \
|
|||
8409_01_characters_guild.sql \
|
||||
8412_01_mangos_mangos_string.sql \
|
||||
8416_01_mangos_spell_learn_spell.sql \
|
||||
8433_01_characters_character_account_data.sql \
|
||||
README
|
||||
|
||||
## Additional files to include when running 'make dist'
|
||||
|
|
@ -170,4 +171,5 @@ EXTRA_DIST = \
|
|||
8409_01_characters_guild.sql \
|
||||
8412_01_mangos_mangos_string.sql \
|
||||
8416_01_mangos_spell_learn_spell.sql \
|
||||
8433_01_characters_character_account_data.sql \
|
||||
README
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ bool LoginQueryHolder::Initialize()
|
|||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS,"SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = '%u'", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, item0, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18 FROM character_equipmentsets WHERE guid = '%u' ORDER BY setindex", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADBGDATA, "SELECT instance_id, team, join_x, join_y, join_z, join_o, join_map, taxi_start, taxi_end, mount_spell FROM character_battleground_data WHERE guid = '%u'", GUID_LOPART(m_guid));
|
||||
res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADACCOUNTDATA, "SELECT type, time, data FROM character_account_data WHERE guid='%u'", GUID_LOPART(m_guid));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
@ -580,6 +581,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder *holder)
|
|||
data << pCurrChar->GetOrientation();
|
||||
SendPacket(&data);
|
||||
|
||||
// load player specific part before send times
|
||||
LoadAccountData(holder->GetResult(PLAYER_LOGIN_QUERY_LOADACCOUNTDATA),PER_CHARACTER_CACHE_MASK);
|
||||
SendAccountDataTimes(PER_CHARACTER_CACHE_MASK);
|
||||
|
||||
data.Initialize(SMSG_FEATURE_SYSTEM_STATUS, 2); // added in 2.2.0
|
||||
|
|
|
|||
|
|
@ -866,7 +866,7 @@ void WorldSession::HandleUpdateAccountData(WorldPacket &recv_data)
|
|||
|
||||
if(decompressedSize == 0) // erase
|
||||
{
|
||||
SetAccountData(type, 0, "");
|
||||
SetAccountData(AccountDataType(type), 0, "");
|
||||
|
||||
WorldPacket data(SMSG_UPDATE_ACCOUNT_DATA_COMPLETE, 4+4);
|
||||
data << uint32(type);
|
||||
|
|
@ -899,7 +899,7 @@ void WorldSession::HandleUpdateAccountData(WorldPacket &recv_data)
|
|||
std::string adata;
|
||||
dest >> adata;
|
||||
|
||||
SetAccountData(type, timestamp, adata);
|
||||
SetAccountData(AccountDataType(type), timestamp, adata);
|
||||
|
||||
WorldPacket data(SMSG_UPDATE_ACCOUNT_DATA_COMPLETE, 4+4);
|
||||
data << uint32(type);
|
||||
|
|
@ -919,7 +919,7 @@ void WorldSession::HandleRequestAccountData(WorldPacket& recv_data)
|
|||
if(type > NUM_ACCOUNT_DATA_TYPES)
|
||||
return;
|
||||
|
||||
AccountData *adata = GetAccountData(type);
|
||||
AccountData *adata = GetAccountData(AccountDataType(type));
|
||||
|
||||
uint32 size = adata->Data.size();
|
||||
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x119*/ { "CMSG_IGNORE_TRADE", STATUS_LOGGEDIN, &WorldSession::HandleIgnoreTradeOpcode },
|
||||
/*0x11A*/ { "CMSG_ACCEPT_TRADE", STATUS_LOGGEDIN, &WorldSession::HandleAcceptTradeOpcode },
|
||||
/*0x11B*/ { "CMSG_UNACCEPT_TRADE", STATUS_LOGGEDIN, &WorldSession::HandleUnacceptTradeOpcode },
|
||||
/*0x11C*/ { "CMSG_CANCEL_TRADE", STATUS_AUTHED, &WorldSession::HandleCancelTradeOpcode },
|
||||
/*0x11C*/ { "CMSG_CANCEL_TRADE", STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, &WorldSession::HandleCancelTradeOpcode},
|
||||
/*0x11D*/ { "CMSG_SET_TRADE_ITEM", STATUS_LOGGEDIN, &WorldSession::HandleSetTradeItemOpcode },
|
||||
/*0x11E*/ { "CMSG_CLEAR_TRADE_ITEM", STATUS_LOGGEDIN, &WorldSession::HandleClearTradeItemOpcode },
|
||||
/*0x11F*/ { "CMSG_SET_TRADE_GOLD", STATUS_LOGGEDIN, &WorldSession::HandleSetTradeGoldOpcode },
|
||||
|
|
@ -549,7 +549,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x208*/ { "SMSG_GMTICKET_UPDATETEXT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x209*/ { "SMSG_ACCOUNT_DATA_TIMES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x20A*/ { "CMSG_REQUEST_ACCOUNT_DATA", STATUS_AUTHED, &WorldSession::HandleRequestAccountData },
|
||||
/*0x20B*/ { "CMSG_UPDATE_ACCOUNT_DATA", STATUS_AUTHED, &WorldSession::HandleUpdateAccountData },
|
||||
/*0x20B*/ { "CMSG_UPDATE_ACCOUNT_DATA", STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, &WorldSession::HandleUpdateAccountData},
|
||||
/*0x20C*/ { "SMSG_UPDATE_ACCOUNT_DATA", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x20D*/ { "SMSG_CLEAR_FAR_SIGHT_IMMEDIATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x20E*/ { "SMSG_POWERGAINLOG_OBSOLETE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
|
|
@ -1005,7 +1005,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x3D0*/ { "CMSG_TARGET_CAST", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x3D1*/ { "CMSG_TARGET_SCRIPT_CAST", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x3D2*/ { "CMSG_CHANNEL_DISPLAY_LIST", STATUS_LOGGEDIN, &WorldSession::HandleChannelDisplayListQuery },
|
||||
/*0x3D3*/ { "CMSG_SET_ACTIVE_VOICE_CHANNEL", STATUS_AUTHED, &WorldSession::HandleSetActiveVoiceChannel },
|
||||
/*0x3D3*/ { "CMSG_SET_ACTIVE_VOICE_CHANNEL", STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, &WorldSession::HandleSetActiveVoiceChannel },
|
||||
/*0x3D4*/ { "CMSG_GET_CHANNEL_MEMBER_COUNT", STATUS_LOGGEDIN, &WorldSession::HandleGetChannelMemberCount },
|
||||
/*0x3D5*/ { "SMSG_CHANNEL_MEMBER_COUNT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x3D6*/ { "CMSG_CHANNEL_VOICE_ON", STATUS_LOGGEDIN, &WorldSession::HandleChannelVoiceOnOpcode },
|
||||
|
|
|
|||
|
|
@ -1313,9 +1313,10 @@ enum Opcodes
|
|||
/// Player state
|
||||
enum SessionStatus
|
||||
{
|
||||
STATUS_AUTHED = 0, ///< Player authenticated
|
||||
STATUS_LOGGEDIN, ///< Player in game
|
||||
STATUS_TRANSFER, ///< Player transferring to another map
|
||||
STATUS_AUTHED = 0, ///< Player authenticated (_player==NULL, m_playerRecentlyLogout = false or will be reset before handler call, m_GUID have garbage)
|
||||
STATUS_LOGGEDIN, ///< Player in game (_player!=NULL, m_GUID == _player->GetGUID(), inWorld())
|
||||
STATUS_TRANSFER, ///< Player transferring to another map (_player!=NULL, m_GUID == _player->GetGUID(), !inWorld())
|
||||
STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, ///< _player!= NULL or _player==NULL && m_playerRecentlyLogout, m_GUID store last _player guid)
|
||||
STATUS_NEVER ///< Opcode not accepted from client (deprecated or server side only)
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -3985,6 +3985,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
|||
}
|
||||
|
||||
CharacterDatabase.PExecute("DELETE FROM characters WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_account_data WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_declinedname WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_action WHERE guid = '%u'",guid);
|
||||
CharacterDatabase.PExecute("DELETE FROM character_aura WHERE guid = '%u'",guid);
|
||||
|
|
|
|||
|
|
@ -879,7 +879,8 @@ enum PlayerLoginQueryIndex
|
|||
PLAYER_LOGIN_QUERY_LOADCRITERIAPROGRESS = 19,
|
||||
PLAYER_LOGIN_QUERY_LOADEQUIPMENTSETS = 20,
|
||||
PLAYER_LOGIN_QUERY_LOADBGDATA = 21,
|
||||
MAX_PLAYER_LOGIN_QUERY = 22
|
||||
PLAYER_LOGIN_QUERY_LOADACCOUNTDATA = 22,
|
||||
MAX_PLAYER_LOGIN_QUERY = 23
|
||||
};
|
||||
|
||||
enum PlayerDelayedOperations
|
||||
|
|
|
|||
|
|
@ -451,7 +451,7 @@ void WorldSession::SendCancelTrade()
|
|||
void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
|
||||
{
|
||||
// sended also after LOGOUT COMPLETE
|
||||
if(_player) // needed because STATUS_AUTHED
|
||||
if(_player) // needed because STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT
|
||||
_player->TradeCancel(true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -201,6 +201,19 @@ bool WorldSession::Update(uint32 /*diff*/)
|
|||
}
|
||||
// lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer
|
||||
break;
|
||||
case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:
|
||||
if(!_player && !m_playerRecentlyLogout)
|
||||
{
|
||||
LogUnexpectedOpcode(packet, "the player has not logged in yet and not recently logout");
|
||||
}
|
||||
else
|
||||
{
|
||||
// not expected _player or must checked in packet hanlder
|
||||
(this->*opHandle.handler)(*packet);
|
||||
if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())
|
||||
LogUnprocessedTail(packet);
|
||||
}
|
||||
break;
|
||||
case STATUS_TRANSFER:
|
||||
if(!_player)
|
||||
LogUnexpectedOpcode(packet, "the player has not logged in yet");
|
||||
|
|
@ -422,7 +435,7 @@ void WorldSession::LogoutPlayer(bool Save)
|
|||
// calls to GetMap in this case may cause crashes
|
||||
Map* _map = _player->GetMap();
|
||||
_map->Remove(_player, true);
|
||||
_player = NULL; // deleted in Remove call
|
||||
SetPlayer(NULL); // deleted in Remove call
|
||||
|
||||
///- Send the 'logout complete' packet to the client
|
||||
WorldPacket data( SMSG_LOGOUT_COMPLETE, 0 );
|
||||
|
|
@ -558,15 +571,19 @@ void WorldSession::SendAuthWaitQue(uint32 position)
|
|||
}
|
||||
}
|
||||
|
||||
void WorldSession::LoadAccountData()
|
||||
void WorldSession::LoadGlobalAccountData()
|
||||
{
|
||||
for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
|
||||
{
|
||||
AccountData data;
|
||||
m_accountData[i] = data;
|
||||
LoadAccountData(
|
||||
CharacterDatabase.PQuery("SELECT type, time, data FROM account_data WHERE account='%u'", GetAccountId()),
|
||||
GLOBAL_CACHE_MASK
|
||||
);
|
||||
}
|
||||
|
||||
QueryResult *result = CharacterDatabase.PQuery("SELECT type, time, data FROM account_data WHERE account='%u'", GetAccountId());
|
||||
void WorldSession::LoadAccountData(QueryResult* result, uint32 mask)
|
||||
{
|
||||
for (uint32 i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
|
||||
if(mask & (1 < i))
|
||||
m_accountData[i] = AccountData();
|
||||
|
||||
if(!result)
|
||||
return;
|
||||
|
|
@ -576,21 +593,32 @@ void WorldSession::LoadAccountData()
|
|||
Field *fields = result->Fetch();
|
||||
|
||||
uint32 type = fields[0].GetUInt32();
|
||||
if(type < NUM_ACCOUNT_DATA_TYPES)
|
||||
if (type >= NUM_ACCOUNT_DATA_TYPES)
|
||||
{
|
||||
sLog.outError("Table `%s` have invalid account data type (%u), ignore.",
|
||||
mask == GLOBAL_CACHE_MASK ? "account_data" : "character_account_data");
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((mask & (1 << type))==0)
|
||||
{
|
||||
sLog.outError("Table `%s` have non appropriate for table account data type (%u), ignore.",
|
||||
mask == GLOBAL_CACHE_MASK ? "account_data" : "character_account_data");
|
||||
continue;
|
||||
}
|
||||
|
||||
m_accountData[type].Time = fields[1].GetUInt32();
|
||||
m_accountData[type].Data = fields[2].GetCppString();
|
||||
}
|
||||
|
||||
} while (result->NextRow());
|
||||
|
||||
delete result;
|
||||
}
|
||||
|
||||
void WorldSession::SetAccountData(uint32 type, time_t time_, std::string data)
|
||||
void WorldSession::SetAccountData(AccountDataType type, time_t time_, std::string data)
|
||||
{
|
||||
if ((1 << type) & GLOBAL_CACHE_MASK)
|
||||
{
|
||||
m_accountData[type].Time = time_;
|
||||
m_accountData[type].Data = data;
|
||||
|
||||
uint32 acc = GetAccountId();
|
||||
|
||||
CharacterDatabase.BeginTransaction ();
|
||||
|
|
@ -599,6 +627,32 @@ void WorldSession::SetAccountData(uint32 type, time_t time_, std::string data)
|
|||
CharacterDatabase.PExecute("INSERT INTO account_data VALUES ('%u','%u','%u','%s')", acc, type, (uint32)time_, data.c_str());
|
||||
CharacterDatabase.CommitTransaction ();
|
||||
}
|
||||
else
|
||||
{
|
||||
// _player can be NULL and packet received after logout but m_GUID still store correct guid
|
||||
if(!m_GUIDLow)
|
||||
return;
|
||||
|
||||
CharacterDatabase.BeginTransaction ();
|
||||
CharacterDatabase.PExecute("DELETE FROM character_account_data WHERE guid='%u' AND type='%u'", m_GUIDLow, type);
|
||||
CharacterDatabase.escape_string(data);
|
||||
CharacterDatabase.PExecute("INSERT INTO character_account_data VALUES ('%u','%u','%u','%s')", m_GUIDLow, type, (uint32)time_, data.c_str());
|
||||
CharacterDatabase.CommitTransaction ();
|
||||
}
|
||||
|
||||
m_accountData[type].Time = time_;
|
||||
m_accountData[type].Data = data;
|
||||
}
|
||||
|
||||
void WorldSession::SendAccountDataTimes()
|
||||
{
|
||||
WorldPacket data( SMSG_ACCOUNT_DATA_TIMES, 4+1+8*4 ); // changed in WotLK
|
||||
data << uint32(time(NULL)); // unix time of something
|
||||
data << uint8(1);
|
||||
for(int i = 0; i < NUM_ACCOUNT_DATA_TYPES; ++i)
|
||||
data << uint32(m_accountData[i].Time); // also unix time
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::SendAccountDataTimes(uint32 mask)
|
||||
{
|
||||
|
|
@ -881,3 +935,12 @@ void WorldSession::SendAddonsInfo()
|
|||
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::SetPlayer( Player *plr )
|
||||
{
|
||||
_player = plr;
|
||||
|
||||
// set m_GUID that can be used while player loggined and later until m_playerRecentlyLogout not reset
|
||||
if(_player)
|
||||
m_GUIDLow = _player->GetGUIDLow();
|
||||
}
|
||||
|
|
@ -44,7 +44,7 @@ class QueryResult;
|
|||
class LoginQueryHolder;
|
||||
class CharacterHandler;
|
||||
|
||||
enum AccountDataTypes
|
||||
enum AccountDataType
|
||||
{
|
||||
GLOBAL_CONFIG_CACHE = 0, // 0x01 g
|
||||
PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p
|
||||
|
|
@ -140,7 +140,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
char const* GetPlayerName() const;
|
||||
void SetSecurity(AccountTypes security) { _security = security; }
|
||||
std::string const& GetRemoteAddress() { return m_Address; }
|
||||
void SetPlayer(Player *plr) { _player = plr; }
|
||||
void SetPlayer(Player *plr);
|
||||
uint8 Expansion() const { return m_expansion; }
|
||||
|
||||
/// Session in auth.queue currently
|
||||
|
|
@ -199,10 +199,11 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
void SendPetNameQuery(uint64 guid, uint32 petnumber);
|
||||
|
||||
// Account Data
|
||||
AccountData *GetAccountData(uint32 type) { return &m_accountData[type]; }
|
||||
void SetAccountData(uint32 type, time_t time_, std::string data);
|
||||
AccountData *GetAccountData(AccountDataType type) { return &m_accountData[type]; }
|
||||
void SetAccountData(AccountDataType type, time_t time_, std::string data);
|
||||
void SendAccountDataTimes(uint32 mask);
|
||||
void LoadAccountData();
|
||||
void LoadGlobalAccountData();
|
||||
void LoadAccountData(QueryResult* result, uint32 mask);
|
||||
void LoadTutorialsData();
|
||||
void SendTutorialsData();
|
||||
void SaveTutorialsData();
|
||||
|
|
@ -739,6 +740,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
void LogUnexpectedOpcode(WorldPacket *packet, const char * reason);
|
||||
void LogUnprocessedTail(WorldPacket *packet);
|
||||
|
||||
uint32 m_GUIDLow; // set loggined or recently logout player (while m_playerRecentlyLogout set)
|
||||
Player *_player;
|
||||
WorldSocket *m_Socket;
|
||||
std::string m_Address;
|
||||
|
|
|
|||
|
|
@ -988,7 +988,7 @@ int WorldSocket::HandleAuthSession (WorldPacket& recvPacket)
|
|||
|
||||
m_Crypt.Init(&K);
|
||||
|
||||
m_Session->LoadAccountData();
|
||||
m_Session->LoadGlobalAccountData();
|
||||
m_Session->LoadTutorialsData();
|
||||
m_Session->ReadAddonsInfo(recvPacket);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "8432"
|
||||
#define REVISION_NR "8433"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue