diff options
author | KingPin <none@none> | 2008-11-10 09:04:23 -0600 |
---|---|---|
committer | KingPin <none@none> | 2008-11-10 09:04:23 -0600 |
commit | 09a0d1122afb5b97f36dbedf0f58fc10d1ad135a (patch) | |
tree | ea121fe9591077c9b5de6d58e51762a4dd84f6b3 /src/game/ArenaTeam.cpp | |
parent | 09280b0091474b58d43daf42c0f3d99f86e6ec25 (diff) |
[svn] * Improve some arena team related DB access
* Cache GM tickets on server startup.
* Remove unused src/game/HateMatrix.h and references.
* Better check client inventory pos data received in some client packets to
skip invalid cases
--HG--
branch : trunk
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; |