From 5e208c9d3fed330ce0b81a53e73aa55add90c7c8 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 30 Oct 2008 21:00:19 +0300 Subject: [PATCH] Use characters.guid instead low guid value from characters.data in charcter enum data prepering for client. --- src/game/CharacterHandler.cpp | 21 +++++++++++---------- src/game/Player.cpp | 26 +++++++++++++------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index ef2fcbf..0507ef5 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -128,9 +128,10 @@ void WorldSession::HandleCharEnum(QueryResult * result) Player *plr = new Player(this); do { - sLog.outDetail("Loading char guid %u from account %u.",(*result)[0].GetUInt32(),GetAccountId()); + uint32 guidlow = (*result)[0].GetUInt32(); + sLog.outDetail("Loading char guid %u from account %u.",guidlow,GetAccountId()); - if(plr->MinimalLoadFromDB( result, (*result)[0].GetUInt32() )) + if(plr->MinimalLoadFromDB( result, guidlow )) { plr->BuildEnumData( result, &data ); ++num; @@ -153,18 +154,18 @@ void WorldSession::HandleCharEnumOpcode( WorldPacket & /*recv_data*/ ) CharacterDatabase.AsyncPQuery(&chrHandler, &CharacterHandler::HandleCharEnumCallback, GetAccountId(), !sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) ? // ------- Query Without Declined Names -------- - // 0 1 2 3 4 5 6 7 8 - "SELECT characters.data, characters.name, characters.position_x, characters.position_y, characters.position_z, characters.map, characters.totaltime, characters.leveltime, characters.at_login, " - // 9 10 11 - "character_pet.entry, character_pet.modelid, character_pet.level " + // 0 1 2 3 4 5 6 7 8 + "SELECT characters.guid, characters.data, characters.name, characters.position_x, characters.position_y, characters.position_z, characters.map, characters.totaltime, characters.leveltime, " + // 9 10 11 12 + "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level " "FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='0' " "WHERE characters.account = '%u' ORDER BY characters.guid" : // --------- Query With Declined Names --------- - // 0 1 2 3 4 5 6 7 8 - "SELECT characters.data, characters.name, characters.position_x, characters.position_y, characters.position_z, characters.map, characters.totaltime, characters.leveltime, characters.at_login, " - // 9 10 11 12 - "character_pet.entry, character_pet.modelid, character_pet.level, genitive " + // 0 1 2 3 4 5 6 7 8 + "SELECT characters.guid, characters.data, characters.name, characters.position_x, characters.position_y, characters.position_z, characters.map, characters.totaltime, characters.leveltime, " + // 9 10 11 12 13 + "characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, genitive " "FROM characters LEFT JOIN character_pet ON characters.guid = character_pet.owner AND character_pet.slot='0' " "LEFT JOIN character_declinedname ON characters.guid = character_declinedname.guid " "WHERE characters.account = '%u' ORDER BY characters.guid", diff --git a/src/game/Player.cpp b/src/game/Player.cpp index ed23d9c..922e458 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1296,7 +1296,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) char_flags |= CHARACTER_FLAG_RENAME; // always send the flag if declined names aren't used // to let the client select a default method of declining the name - if(!sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) || (result && result->Fetch()[12].GetCppString() != "")) + if(!sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) || (result && result->Fetch()[13].GetCppString() != "")) char_flags |= CHARACTER_FLAG_DECLINED; *p_data << (uint32)char_flags; // character flags @@ -1314,12 +1314,12 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) { Field* fields = result->Fetch(); - uint32 entry = fields[9].GetUInt32(); + uint32 entry = fields[10].GetUInt32(); CreatureInfo const* cInfo = sCreatureStorage.LookupEntry(entry); if(cInfo) { - petDisplayId = fields[10].GetUInt32(); - petLevel = fields[11].GetUInt32(); + petDisplayId = fields[11].GetUInt32(); + petLevel = fields[12].GetUInt32(); petFamily = cInfo->family; } } @@ -13184,15 +13184,15 @@ bool Player::MinimalLoadFromDB( QueryResult *result, uint32 guid ) bool delete_result = true; if(!result) { - // 0 1 2 3 4 5 6 7 8 - result = CharacterDatabase.PQuery("SELECT data, name, position_x, position_y, position_z, map, totaltime, leveltime, at_login FROM characters WHERE guid = '%u'",guid); + // 0 1 2 3 4 5 6 7 8 9 + result = CharacterDatabase.PQuery("SELECT guid, data, name, position_x, position_y, position_z, map, totaltime, leveltime, at_login FROM characters WHERE guid = '%u'",guid); if(!result) return false; } else delete_result = false; Field *fields = result->Fetch(); - if(!LoadValues( fields[0].GetString())) + if(!LoadValues( fields[1].GetString())) { sLog.outError("ERROR: Player #%d have broken data in `data` field. Can't be loaded.",GUID_LOPART(guid)); if(delete_result) delete result; @@ -13202,16 +13202,16 @@ bool Player::MinimalLoadFromDB( QueryResult *result, uint32 guid ) // overwrite possible wrong/corrupted guid SetUInt64Value(OBJECT_FIELD_GUID, MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); - m_name = fields[1].GetCppString(); + m_name = fields[2].GetCppString(); - Relocate(fields[2].GetFloat(),fields[3].GetFloat(),fields[4].GetFloat()); - SetMapId(fields[5].GetUInt32()); + Relocate(fields[3].GetFloat(),fields[4].GetFloat(),fields[5].GetFloat()); + SetMapId(fields[6].GetUInt32()); // the instance id is not needed at character enum - m_Played_time[0] = fields[6].GetUInt32(); - m_Played_time[1] = fields[7].GetUInt32(); + m_Played_time[0] = fields[7].GetUInt32(); + m_Played_time[1] = fields[8].GetUInt32(); - m_atLoginFlags = fields[8].GetUInt32(); + m_atLoginFlags = fields[9].GetUInt32(); // I don't see these used anywhere .. /*_LoadGroup(); -- 2.11.4.GIT