[6867] Optimized working with DB in Guild code. No need of parsing/saving players data fields anymore.

Signed-off-by: ApoC <apoc@nymfe.net>
This commit is contained in:
ApoC 2008-11-30 16:32:51 +01:00
parent 8347cba493
commit 571221148a
5 changed files with 32 additions and 50 deletions

View file

@ -143,22 +143,13 @@ bool Guild::AddMember(uint64 plGuid, uint32 plRank)
CharacterDatabase.PExecute("INSERT INTO guild_member (guildid,guid,rank,pnote,offnote) VALUES ('%u', '%u', '%u','%s','%s')",
Id, GUID_LOPART(plGuid), newmember.RankId, dbPnote.c_str(), dbOFFnote.c_str());
// If player not in game data in data field will be loaded from guild tables, no need to update it!!
if(pl)
{
pl->SetInGuild(Id);
pl->SetRank(newmember.RankId);
pl->SetGuildIdInvited(0);
}
else
{
Tokens tokens;
if(Player::LoadValuesArrayFromDB(tokens,plGuid))
{
Player::SetUInt32ValueInArray(tokens, PLAYER_GUILDID, Id);
Player::SetUInt32ValueInArray(tokens, PLAYER_GUILDRANK, newmember.RankId);
Player::SaveValuesArrayInDB(tokens, plGuid);
}
}
return true;
}
@ -439,16 +430,15 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
SetLeader(newLeaderGUID);
newLeader = objmgr.GetPlayer(newLeaderGUID);
// If player not online data in data field will be loaded from guild tabs no need to update it !!
if(newLeader)
{
newLeader->SetRank(GR_GUILDMASTER);
newLeaderName = newLeader->GetName();
}
else
{
Player::SetUInt32ValueInDB(PLAYER_GUILDRANK, GR_GUILDMASTER, newLeaderGUID);
objmgr.GetPlayerNameByGUID(newLeaderGUID, newLeaderName);
}
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
if(objmgr.GetPlayerNameByGUID(guid, oldLeaderName))
@ -479,21 +469,12 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
members.erase(GUID_LOPART(guid));
Player *player = objmgr.GetPlayer(guid);
// If player not online data in data field will be loaded from guild tabs no need to update it !!
if(player)
{
player->SetInGuild(0);
player->SetRank(0);
}
else
{
Tokens tokens;
if(Player::LoadValuesArrayFromDB(tokens,guid))
{
Player::SetUInt32ValueInArray(tokens, PLAYER_GUILDID, 0);
Player::SetUInt32ValueInArray(tokens, PLAYER_GUILDRANK, GR_GUILDMASTER);
Player::SaveValuesArrayInDB(tokens, guid);
}
}
CharacterDatabase.PExecute("DELETE FROM guild_member WHERE guid = '%u'", GUID_LOPART(guid));
}
@ -505,10 +486,9 @@ void Guild::ChangeRank(uint64 guid, uint32 newRank)
itr->second.RankId = newRank;
Player *player = objmgr.GetPlayer(guid);
// If player not online data in data field will be loaded from guild tabs no need to update it !!
if(player)
player->SetRank(newRank);
else
Player::SetUInt32ValueInDB(PLAYER_GUILDRANK, newRank, guid);
CharacterDatabase.PExecute( "UPDATE guild_member SET rank='%u' WHERE guid='%u'", newRank, GUID_LOPART(guid) );
}