mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
Improve some arena team related DB access.
Reduce number of queries for adding a new arena team member. Merge two queries in Player::GetArenaTeamIdFromDB() into one.
This commit is contained in:
parent
166007525e
commit
2cdd7dcfce
2 changed files with 34 additions and 50 deletions
|
|
@ -88,40 +88,45 @@ bool ArenaTeam::AddMember(uint64 PlayerGuid)
|
|||
std::string plName;
|
||||
uint8 plClass;
|
||||
|
||||
// arena team is full (can't have more than type * 2 players!)
|
||||
if(GetMembersSize() >= GetType() * 2)
|
||||
{
|
||||
// arena team is full (can't have more than type * 2 players!)
|
||||
// return false
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!objmgr.GetPlayerNameByGUID(PlayerGuid, plName)) // player doesnt exist
|
||||
return false;
|
||||
// player already in arenateam of that size
|
||||
if(Player::GetArenaTeamIdFromDB(PlayerGuid, GetType()) != 0)
|
||||
Player *pl = objmgr.GetPlayer(PlayerGuid);
|
||||
if(pl)
|
||||
{
|
||||
sLog.outError("Arena::AddMember() : player already in this sized team");
|
||||
return false;
|
||||
if(pl->GetArenaTeamId(GetType()))
|
||||
{
|
||||
sLog.outError("Arena::AddMember() : player already in this sized team");
|
||||
return false;
|
||||
}
|
||||
|
||||
plClass = (uint8)pl->getClass();
|
||||
plName = pl->GetName();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 0 1
|
||||
QueryResult *result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid));
|
||||
if(!result)
|
||||
return false;
|
||||
|
||||
plName = (*result)[0].GetCppString();
|
||||
plClass = (*result)[1].GetUInt8();
|
||||
delete result;
|
||||
|
||||
// check if player already in arenateam of that size
|
||||
if(Player::GetArenaTeamIdFromDB(PlayerGuid, GetType()) != 0)
|
||||
{
|
||||
sLog.outError("Arena::AddMember() : player already in this sized team");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// remove all player signs from another petitions
|
||||
// this will be prevent attempt joining player to many arenateams and corrupt arena team data integrity
|
||||
Player::RemovePetitionsAndSigns(PlayerGuid, GetType());
|
||||
|
||||
Player *pl = objmgr.GetPlayer(PlayerGuid);
|
||||
if(pl)
|
||||
{
|
||||
plClass = (uint8)pl->getClass();
|
||||
}
|
||||
else
|
||||
{
|
||||
QueryResult *result = CharacterDatabase.PQuery("SELECT class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid));
|
||||
if(!result)
|
||||
return false;
|
||||
plClass = (*result)[0].GetUInt8();
|
||||
delete result;
|
||||
}
|
||||
|
||||
ArenaTeamMember newmember;
|
||||
newmember.name = plName;
|
||||
newmember.guid = PlayerGuid;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue