From 422dcca5f839e0e9561a8743f97701aa1a6b20bf Mon Sep 17 00:00:00 2001 From: balrok Date: Sat, 20 Dec 2008 20:22:37 +0300 Subject: [PATCH] [6924] Faster guild-loading. Signed-off-by: VladimirMangos --- src/game/Guild.cpp | 33 +++++++++++++++++++++++---------- src/shared/revision_nr.h | 2 +- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index bf6a3ab1..5dd34b30 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -359,28 +359,41 @@ bool Guild::FillPlayerData(uint64 guid, MemberSlot* memslot) } else { - if(!objmgr.GetPlayerNameByGUID(guid, plName)) // player doesn't exist - return false; + QueryResult *result = CharacterDatabase.PQuery("SELECT name,data,zone,class FROM characters WHERE guid = '%u'", GUID_LOPART(guid)); + if(!result) + return false; // player doesn't exist + + Field *fields = result->Fetch(); + + plName = fields[0].GetCppString(); + + Tokens data = StrSplit(fields[1].GetCppString(), " "); + plLevel = Player::GetUInt32ValueFromArray(data,UNIT_FIELD_LEVEL); + + plZone = fields[2].GetUInt32(); + plClass = fields[3].GetUInt32(); + delete result; - plLevel = Player::GetUInt32ValueFromDB(UNIT_FIELD_LEVEL, guid); if(plLevel<1||plLevel>STRONG_MAX_LEVEL) // can be at broken `data` field { sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`data`.",GUID_LOPART(guid)); return false; } - plZone = Player::GetZoneIdFromDB(guid); - QueryResult *result = CharacterDatabase.PQuery("SELECT class FROM characters WHERE guid='%u'", GUID_LOPART(guid)); - if(!result) - return false; - plClass = (*result)[0].GetUInt32(); + if(!plZone) + { + sLog.outError("Player (GUID: %u) has broken zone-data",GUID_LOPART(guid)); + //here it will also try the same, to get the zone from characters-table, but additional it tries to find + plZone = Player::GetZoneIdFromDB(guid); + //the zone through xy coords.. this is a bit redundant, but + //shouldn't be called often + } + if(plClass=MAX_CLASSES) // can be at broken `class` field { sLog.outError("Player (GUID: %u) has a broken data in field `characters`.`class`.",GUID_LOPART(guid)); return false; } - - delete result; } memslot->name = plName; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index eafc0b2c..7de18d1a 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "6923" + #define REVISION_NR "6924" #endif // __REVISION_NR_H__ -- 2.11.4.GIT