diff options
Diffstat (limited to 'src/game/ArenaTeam.cpp')
-rw-r--r-- | src/game/ArenaTeam.cpp | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index e364f7a0e7e..8d89a841a2f 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -90,40 +90,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) - { - 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) { + if(pl->GetArenaTeamId(GetType())) + { + sLog.outError("Arena::AddMember() : player already in this sized team"); + return false; + } + plClass = (uint8)pl->getClass(); + plName = pl->GetName(); } else { - QueryResult *result = CharacterDatabase.PQuery("SELECT class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid)); + // 0 1 + QueryResult *result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid)); if(!result) return false; - plClass = (*result)[0].GetUInt8(); + + 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()); + ArenaTeamMember newmember; newmember.name = plName; newmember.guid = PlayerGuid; |