mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[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:
parent
8347cba493
commit
571221148a
5 changed files with 32 additions and 50 deletions
|
|
@ -156,18 +156,20 @@ void WorldSession::HandleCharEnumOpcode( WorldPacket & /*recv_data*/ )
|
||||||
// ------- Query Without Declined Names --------
|
// ------- Query Without Declined Names --------
|
||||||
// 0 1 2 3 4 5 6 7 8
|
// 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, "
|
"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
|
// 9 10 11 12 13
|
||||||
"characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level "
|
"characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, guild_member.guildid "
|
||||||
"FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='0' "
|
"FROM characters LEFT JOIN character_pet ON characters.guid=character_pet.owner AND character_pet.slot='0' "
|
||||||
|
"LEFT JOIN guild_member ON characters.guid = guild_member.guid "
|
||||||
"WHERE characters.account = '%u' ORDER BY characters.guid"
|
"WHERE characters.account = '%u' ORDER BY characters.guid"
|
||||||
:
|
:
|
||||||
// --------- Query With Declined Names ---------
|
// --------- Query With Declined Names ---------
|
||||||
// 0 1 2 3 4 5 6 7 8
|
// 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, "
|
"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
|
// 9 10 11 12 13 14
|
||||||
"characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, genitive "
|
"characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, guild_member.guildid, genitive "
|
||||||
"FROM characters LEFT JOIN character_pet ON characters.guid = character_pet.owner AND character_pet.slot='0' "
|
"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 "
|
"LEFT JOIN character_declinedname ON characters.guid = character_declinedname.guid "
|
||||||
|
"LEFT JOIN guild_member ON characters.guid = guild_member.guid "
|
||||||
"WHERE characters.account = '%u' ORDER BY characters.guid",
|
"WHERE characters.account = '%u' ORDER BY characters.guid",
|
||||||
GetAccountId());
|
GetAccountId());
|
||||||
}
|
}
|
||||||
|
|
@ -540,6 +542,22 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||||
DEBUG_LOG( "WORLD: Sent motd (SMSG_MOTD)" );
|
DEBUG_LOG( "WORLD: Sent motd (SMSG_MOTD)" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//QueryResult *result = CharacterDatabase.PQuery("SELECT guildid,rank FROM guild_member WHERE guid = '%u'",pCurrChar->GetGUIDLow());
|
||||||
|
QueryResult *resultGuild = holder->GetResult(PLAYER_LOGIN_QUERY_LOADGUILD);
|
||||||
|
|
||||||
|
if(resultGuild)
|
||||||
|
{
|
||||||
|
Field *fields = resultGuild->Fetch();
|
||||||
|
pCurrChar->SetInGuild(fields[0].GetUInt32());
|
||||||
|
pCurrChar->SetRank(fields[1].GetUInt32());
|
||||||
|
delete resultGuild;
|
||||||
|
}
|
||||||
|
else if(pCurrChar->GetGuildId()) // clear guild related fields in case wrong data about non existed membership
|
||||||
|
{
|
||||||
|
pCurrChar->SetInGuild(0);
|
||||||
|
pCurrChar->SetRank(0);
|
||||||
|
}
|
||||||
|
|
||||||
if(pCurrChar->GetGuildId() != 0)
|
if(pCurrChar->GetGuildId() != 0)
|
||||||
{
|
{
|
||||||
Guild* guild = objmgr.GetGuildById(pCurrChar->GetGuildId());
|
Guild* guild = objmgr.GetGuildById(pCurrChar->GetGuildId());
|
||||||
|
|
@ -590,22 +608,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//QueryResult *result = CharacterDatabase.PQuery("SELECT guildid,rank FROM guild_member WHERE guid = '%u'",pCurrChar->GetGUIDLow());
|
|
||||||
QueryResult *resultGuild = holder->GetResult(PLAYER_LOGIN_QUERY_LOADGUILD);
|
|
||||||
|
|
||||||
if(resultGuild)
|
|
||||||
{
|
|
||||||
Field *fields = resultGuild->Fetch();
|
|
||||||
pCurrChar->SetInGuild(fields[0].GetUInt32());
|
|
||||||
pCurrChar->SetRank(fields[1].GetUInt32());
|
|
||||||
delete resultGuild;
|
|
||||||
}
|
|
||||||
else if(pCurrChar->GetGuildId()) // clear guild related fields in case wrong data about non existed membership
|
|
||||||
{
|
|
||||||
pCurrChar->SetInGuild(0);
|
|
||||||
pCurrChar->SetRank(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!pCurrChar->GetMap()->Add(pCurrChar))
|
if (!pCurrChar->GetMap()->Add(pCurrChar))
|
||||||
{
|
{
|
||||||
AreaTrigger const* at = objmgr.GetGoBackTrigger(pCurrChar->GetMapId());
|
AreaTrigger const* at = objmgr.GetGoBackTrigger(pCurrChar->GetMapId());
|
||||||
|
|
|
||||||
|
|
@ -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')",
|
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());
|
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)
|
if(pl)
|
||||||
{
|
{
|
||||||
pl->SetInGuild(Id);
|
pl->SetInGuild(Id);
|
||||||
pl->SetRank(newmember.RankId);
|
pl->SetRank(newmember.RankId);
|
||||||
pl->SetGuildIdInvited(0);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -439,16 +430,15 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||||
SetLeader(newLeaderGUID);
|
SetLeader(newLeaderGUID);
|
||||||
|
|
||||||
newLeader = objmgr.GetPlayer(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)
|
if(newLeader)
|
||||||
{
|
{
|
||||||
newLeader->SetRank(GR_GUILDMASTER);
|
newLeader->SetRank(GR_GUILDMASTER);
|
||||||
newLeaderName = newLeader->GetName();
|
newLeaderName = newLeader->GetName();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
Player::SetUInt32ValueInDB(PLAYER_GUILDRANK, GR_GUILDMASTER, newLeaderGUID);
|
|
||||||
objmgr.GetPlayerNameByGUID(newLeaderGUID, newLeaderName);
|
objmgr.GetPlayerNameByGUID(newLeaderGUID, newLeaderName);
|
||||||
}
|
|
||||||
|
|
||||||
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
|
// when leader non-exist (at guild load with deleted leader only) not send broadcasts
|
||||||
if(objmgr.GetPlayerNameByGUID(guid, oldLeaderName))
|
if(objmgr.GetPlayerNameByGUID(guid, oldLeaderName))
|
||||||
|
|
@ -479,21 +469,12 @@ void Guild::DelMember(uint64 guid, bool isDisbanding)
|
||||||
members.erase(GUID_LOPART(guid));
|
members.erase(GUID_LOPART(guid));
|
||||||
|
|
||||||
Player *player = objmgr.GetPlayer(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)
|
if(player)
|
||||||
{
|
{
|
||||||
player->SetInGuild(0);
|
player->SetInGuild(0);
|
||||||
player->SetRank(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));
|
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;
|
itr->second.RankId = newRank;
|
||||||
|
|
||||||
Player *player = objmgr.GetPlayer(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)
|
if(player)
|
||||||
player->SetRank(newRank);
|
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) );
|
CharacterDatabase.PExecute( "UPDATE guild_member SET rank='%u' WHERE guid='%u'", newRank, GUID_LOPART(guid) );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1347,7 +1347,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data )
|
||||||
*p_data << GetPositionY();
|
*p_data << GetPositionY();
|
||||||
*p_data << GetPositionZ();
|
*p_data << GetPositionZ();
|
||||||
|
|
||||||
*p_data << GetUInt32Value(PLAYER_GUILDID); // guild id
|
*p_data << (result ? result->Fetch()[13].GetUInt32() : 0);
|
||||||
|
|
||||||
uint32 char_flags = 0;
|
uint32 char_flags = 0;
|
||||||
if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM))
|
if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM))
|
||||||
|
|
@ -1360,7 +1360,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data )
|
||||||
char_flags |= CHARACTER_FLAG_RENAME;
|
char_flags |= CHARACTER_FLAG_RENAME;
|
||||||
// always send the flag if declined names aren't used
|
// always send the flag if declined names aren't used
|
||||||
// to let the client select a default method of declining the name
|
// to let the client select a default method of declining the name
|
||||||
if(!sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) || (result && result->Fetch()[13].GetCppString() != ""))
|
if(!sWorld.getConfig(CONFIG_DECLINED_NAMES_USED) || (result && result->Fetch()[14].GetCppString() != ""))
|
||||||
char_flags |= CHARACTER_FLAG_DECLINED;
|
char_flags |= CHARACTER_FLAG_DECLINED;
|
||||||
|
|
||||||
*p_data << (uint32)char_flags; // character flags
|
*p_data << (uint32)char_flags; // character flags
|
||||||
|
|
|
||||||
|
|
@ -1503,8 +1503,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
void RemoveFromGroup() { RemoveFromGroup(GetGroup(),GetGUID()); }
|
void RemoveFromGroup() { RemoveFromGroup(GetGroup(),GetGUID()); }
|
||||||
void SendUpdateToOutOfRangeGroupMembers();
|
void SendUpdateToOutOfRangeGroupMembers();
|
||||||
|
|
||||||
void SetInGuild(uint32 GuildId) { SetUInt32Value(PLAYER_GUILDID, GuildId); Player::SetUInt32ValueInDB(PLAYER_GUILDID, GuildId, GetGUID()); }
|
void SetInGuild(uint32 GuildId) { SetUInt32Value(PLAYER_GUILDID, GuildId); }
|
||||||
void SetRank(uint32 rankId){ SetUInt32Value(PLAYER_GUILDRANK, rankId); Player::SetUInt32ValueInDB(PLAYER_GUILDRANK, rankId, GetGUID()); }
|
void SetRank(uint32 rankId){ SetUInt32Value(PLAYER_GUILDRANK, rankId); }
|
||||||
void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; }
|
void SetGuildIdInvited(uint32 GuildId) { m_GuildIdInvited = GuildId; }
|
||||||
uint32 GetGuildId() { return GetUInt32Value(PLAYER_GUILDID); }
|
uint32 GetGuildId() { return GetUInt32Value(PLAYER_GUILDID); }
|
||||||
static uint32 GetGuildIdFromDB(uint64 guid);
|
static uint32 GetGuildIdFromDB(uint64 guid);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "6866"
|
#define REVISION_NR "6867"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue