diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 06f0c953d..0dfd50771 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -26,8 +26,6 @@ ArenaTeam::ArenaTeam() { m_TeamId = 0; m_Type = 0; - m_Name = ""; - m_CaptainGuid = 0; m_BackgroundColor = 0; // background m_EmblemStyle = 0; // icon m_EmblemColor = 0; // icon color @@ -57,30 +55,30 @@ ArenaTeam::~ArenaTeam() } -bool ArenaTeam::Create(uint64 captainGuid, uint32 type, std::string ArenaTeamName) +bool ArenaTeam::Create(ObjectGuid captainGuid, uint32 type, std::string arenaTeamName) { - if(!sObjectMgr.GetPlayer(captainGuid)) // player not exist + if (!sObjectMgr.GetPlayer(captainGuid)) // player not exist return false; - if(sObjectMgr.GetArenaTeamByName(ArenaTeamName)) // arena team with this name already exist + if (sObjectMgr.GetArenaTeamByName(arenaTeamName)) // arena team with this name already exist return false; - DEBUG_LOG("GUILD: creating arena team %s to leader: %u", ArenaTeamName.c_str(), GUID_LOPART(captainGuid)); + DEBUG_LOG("GUILD: creating arena team %s to leader: %s", arenaTeamName.c_str(), captainGuid.GetString().c_str()); m_CaptainGuid = captainGuid; - m_Name = ArenaTeamName; + m_Name = arenaTeamName; m_Type = type; m_TeamId = sObjectMgr.GenerateArenaTeamId(); // ArenaTeamName already assigned to ArenaTeam::name, use it to encode string for DB - CharacterDatabase.escape_string(ArenaTeamName); + CharacterDatabase.escape_string(arenaTeamName); CharacterDatabase.BeginTransaction(); // CharacterDatabase.PExecute("DELETE FROM arena_team WHERE arenateamid='%u'", m_TeamId); - MAX(arenateam)+1 not exist CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid='%u'", m_TeamId); CharacterDatabase.PExecute("INSERT INTO arena_team (arenateamid,name,captainguid,type,BackgroundColor,EmblemStyle,EmblemColor,BorderStyle,BorderColor) " "VALUES('%u','%s','%u','%u','%u','%u','%u','%u','%u')", - m_TeamId, ArenaTeamName.c_str(), GUID_LOPART(m_CaptainGuid), m_Type, m_BackgroundColor, m_EmblemStyle, m_EmblemColor, m_BorderStyle, m_BorderColor); + m_TeamId, arenaTeamName.c_str(), m_CaptainGuid.GetCounter(), m_Type, m_BackgroundColor, m_EmblemStyle, m_EmblemColor, m_BorderStyle, m_BorderColor); CharacterDatabase.PExecute("INSERT INTO arena_team_stats (arenateamid, rating, games, wins, played, wins2, rank) VALUES " "('%u', '%u', '%u', '%u', '%u', '%u', '%u')", m_TeamId, m_stats.rating, m_stats.games_week, m_stats.wins_week, m_stats.games_season, m_stats.wins_season, m_stats.rank); @@ -90,19 +88,19 @@ bool ArenaTeam::Create(uint64 captainGuid, uint32 type, std::string ArenaTeamNam return true; } -bool ArenaTeam::AddMember(const uint64& PlayerGuid) +bool ArenaTeam::AddMember(ObjectGuid playerGuid) { std::string plName; uint8 plClass; // arena team is full (can't have more than type * 2 players!) - if(GetMembersSize() >= GetType() * 2) + if (GetMembersSize() >= GetType() * 2) return false; - Player *pl = sObjectMgr.GetPlayer(PlayerGuid); - if(pl) + Player *pl = sObjectMgr.GetPlayer(playerGuid); + if (pl) { - if(pl->GetArenaTeamId(GetSlot())) + if (pl->GetArenaTeamId(GetSlot())) { sLog.outError("Arena::AddMember() : player already in this sized team"); return false; @@ -114,8 +112,8 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) else { // 0 1 - QueryResult *result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", GUID_LOPART(PlayerGuid)); - if(!result) + QueryResult *result = CharacterDatabase.PQuery("SELECT name, class FROM characters WHERE guid='%u'", playerGuid.GetCounter()); + if (!result) return false; plName = (*result)[0].GetCppString(); @@ -123,20 +121,20 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) delete result; // check if player already in arenateam of that size - if(Player::GetArenaTeamIdFromDB(PlayerGuid, GetType()) != 0) + if (Player::GetArenaTeamIdFromDB(playerGuid, GetType()) != 0) { - sLog.outError("Arena::AddMember() : player already in this sized team"); + sLog.outError("Arena::AddMember() : player %s already in this sized team", playerGuid.GetString().c_str()); 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::RemovePetitionsAndSigns(playerGuid, GetType()); ArenaTeamMember newmember; newmember.name = plName; - newmember.guid = PlayerGuid; + newmember.guid = playerGuid; newmember.Class = plClass; newmember.games_season = 0; newmember.games_week = 0; @@ -163,7 +161,7 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) m_members.push_back(newmember); - CharacterDatabase.PExecute("INSERT INTO arena_team_member (arenateamid, guid, personal_rating) VALUES ('%u', '%u', '%u')", m_TeamId, GUID_LOPART(newmember.guid), newmember.personal_rating ); + CharacterDatabase.PExecute("INSERT INTO arena_team_member (arenateamid, guid, personal_rating) VALUES ('%u', '%u', '%u')", m_TeamId, newmember.guid.GetCounter(), newmember.personal_rating ); if(pl) { @@ -172,7 +170,7 @@ bool ArenaTeam::AddMember(const uint64& PlayerGuid) pl->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_PERSONAL_RATING, newmember.personal_rating); // hide promote/remove buttons - if(m_CaptainGuid != PlayerGuid) + if (m_CaptainGuid != playerGuid) pl->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_MEMBER, 1); } return true; @@ -187,7 +185,7 @@ bool ArenaTeam::LoadArenaTeamFromDB(QueryResult *arenaTeamDataResult) m_TeamId = fields[0].GetUInt32(); m_Name = fields[1].GetCppString(); - m_CaptainGuid = MAKE_NEW_GUID(fields[2].GetUInt32(), 0, HIGHGUID_PLAYER); + m_CaptainGuid = ObjectGuid(HIGHGUID_PLAYER, fields[2].GetUInt32()); m_Type = fields[3].GetUInt32(); m_BackgroundColor = fields[4].GetUInt32(); m_EmblemStyle = fields[5].GetUInt32(); @@ -232,7 +230,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult *arenaTeamMembersResult) break; ArenaTeamMember newmember; - newmember.guid = MAKE_NEW_GUID(fields[1].GetUInt32(), 0, HIGHGUID_PLAYER); + newmember.guid = ObjectGuid(HIGHGUID_PLAYER, fields[1].GetUInt32()); newmember.games_week = fields[2].GetUInt32(); newmember.wins_week = fields[3].GetUInt32(); newmember.games_season = fields[4].GetUInt32(); @@ -244,17 +242,17 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult *arenaTeamMembersResult) //check if member exists in characters table if (newmember.name.empty()) { - sLog.outErrorDb("ArenaTeam %u has member with empty name - probably player %u doesn't exist, deleting him from memberlist!", arenaTeamId, GUID_LOPART(newmember.guid)); - this->DelMember(newmember.guid); + sLog.outErrorDb("ArenaTeam %u has member with empty name - probably player %s doesn't exist, deleting him from memberlist!", arenaTeamId, newmember.guid.GetString().c_str()); + DelMember(newmember.guid); continue; } - if (newmember.guid == GetCaptain()) + if (newmember.guid == GetCaptainGuid()) captainPresentInTeam = true; m_members.push_back(newmember); - }while (arenaTeamMembersResult->NextRow()); + } while (arenaTeamMembersResult->NextRow()); - if(Empty() || !captainPresentInTeam) + if (Empty() || !captainPresentInTeam) { // arena team is empty or captain is not in team, delete from db sLog.outErrorDb("ArenaTeam %u does not have any members or its captain is not in team, disbanding it...", m_TeamId); @@ -264,26 +262,25 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult *arenaTeamMembersResult) return true; } -void ArenaTeam::SetCaptain(const uint64& guid) +void ArenaTeam::SetCaptain(ObjectGuid guid) { // disable remove/promote buttons - Player *oldcaptain = sObjectMgr.GetPlayer(GetCaptain()); - if(oldcaptain) + Player *oldcaptain = sObjectMgr.GetPlayer(GetCaptainGuid()); + if (oldcaptain) oldcaptain->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_MEMBER, 1); // set new captain m_CaptainGuid = guid; // update database - CharacterDatabase.PExecute("UPDATE arena_team SET captainguid = '%u' WHERE arenateamid = '%u'", GUID_LOPART(guid), m_TeamId); + CharacterDatabase.PExecute("UPDATE arena_team SET captainguid = '%u' WHERE arenateamid = '%u'", guid.GetCounter(), m_TeamId); // enable remove/promote buttons - Player *newcaptain = sObjectMgr.GetPlayer(guid); - if(newcaptain) + if (Player *newcaptain = sObjectMgr.GetPlayer(guid)) newcaptain->SetArenaTeamInfoField(GetSlot(), ARENA_TEAM_MEMBER, 0); } -void ArenaTeam::DelMember(uint64 guid) +void ArenaTeam::DelMember(ObjectGuid guid) { for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) { @@ -302,7 +299,7 @@ void ArenaTeam::DelMember(uint64 guid) player->SetArenaTeamInfoField(GetSlot(), ArenaTeamInfoType(i), 0); } - CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u' AND guid = '%u'", GetId(), GUID_LOPART(guid)); + CharacterDatabase.PExecute("DELETE FROM arena_team_member WHERE arenateamid = '%u' AND guid = '%u'", GetId(), guid.GetCounter()); } void ArenaTeam::Disband(WorldSession *session) @@ -311,7 +308,7 @@ void ArenaTeam::Disband(WorldSession *session) if (session) { // probably only 1 string required... - BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName(), GetName(), ""); + BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, session->GetPlayerName(), GetName().c_str()); } while (!m_members.empty()) @@ -344,10 +341,10 @@ void ArenaTeam::Roster(WorldSession *session) { pl = sObjectMgr.GetPlayer(itr->guid); - data << uint64(itr->guid); // guid + data << itr->guid; // guid data << uint8((pl ? 1 : 0)); // online flag data << itr->name; // member name - data << uint32((itr->guid == GetCaptain() ? 0 : 1));// captain flag 0 captain 1 member + data << uint32((itr->guid == GetCaptainGuid() ? 0 : 1));// captain flag 0 captain 1 member data << uint8((pl ? pl->getLevel() : 0)); // unknown, level? data << uint8(itr->Class); // class data << uint32(itr->games_week); // played this week @@ -406,14 +403,14 @@ void ArenaTeam::NotifyStatsChanged() } } -void ArenaTeam::InspectStats(WorldSession *session, uint64 guid) +void ArenaTeam::InspectStats(WorldSession *session, ObjectGuid guid) { ArenaTeamMember* member = GetMember(guid); if(!member) return; WorldPacket data(MSG_INSPECT_ARENA_TEAMS, 8+1+4*6); - data << uint64(guid); // player guid + data << guid; // player guid data << uint8(GetSlot()); // slot (0...2) data << uint32(GetId()); // arena team id data << uint32(m_stats.rating); // rating @@ -479,31 +476,30 @@ void ArenaTeam::BroadcastPacket(WorldPacket *packet) } } -void ArenaTeam::BroadcastEvent(ArenaTeamEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3) +void ArenaTeam::BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, char const* str1 /*=NULL*/, char const* str2 /*=NULL*/, char const* str3 /*=NULL*/) { - WorldPacket data(SMSG_ARENA_TEAM_EVENT, 1+1+1); + uint8 strCount = !str1 ? 0 : (!str2 ? 1 : (!str3 ? 2 : 3)); + + WorldPacket data(SMSG_GUILD_EVENT, 1 + 1 + 1*strCount + (guid.IsEmpty() ? 0 : 8)); data << uint8(event); data << uint8(strCount); - switch(strCount) - { - case 0: - break; - case 1: - data << str1; - break; - case 2: - data << str1 << str2; - break; - case 3: - data << str1 << str2 << str3; - break; - default: - sLog.outError("Unhandled strCount %u in ArenaTeam::BroadcastEvent", strCount); - return; - } - if(guid) - data << uint64(guid); + if (str3) + { + data << str1; + data << str2; + data << str3; + } + else if (str2) + { + data << str1; + data << str2; + } + else if (str1) + data << str1; + + if (!guid.IsEmpty()) + data << guid; BroadcastPacket(&data); @@ -524,10 +520,10 @@ uint8 ArenaTeam::GetSlotByType( uint32 type ) return 0xFF; } -bool ArenaTeam::HaveMember( const uint64& guid ) const +bool ArenaTeam::HaveMember(ObjectGuid guid) const { for (MemberList::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr) - if(itr->guid == guid) + if(itr->guid == guid.GetRawValue()) return true; return false; @@ -621,7 +617,7 @@ void ArenaTeam::MemberLost(Player * plr, uint32 againstRating) // called for each participant of a match after losing for(MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) { - if(itr->guid == plr->GetGUID()) + if (itr->guid == plr->GetObjectGuid()) { // update personal rating float chance = GetChanceAgainst(itr->personal_rating, againstRating); @@ -640,12 +636,12 @@ void ArenaTeam::MemberLost(Player * plr, uint32 againstRating) } } -void ArenaTeam::OfflineMemberLost(uint64 guid, uint32 againstRating) +void ArenaTeam::OfflineMemberLost(ObjectGuid guid, uint32 againstRating) { // called for offline player after ending rated arena match! for(MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) { - if(itr->guid == guid) + if (itr->guid == guid) { // update personal rating float chance = GetChanceAgainst(itr->personal_rating, againstRating); @@ -669,7 +665,7 @@ void ArenaTeam::MemberWon(Player * plr, uint32 againstRating) // called for each participant after winning a match for(MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) { - if(itr->guid == plr->GetGUID()) + if (itr->guid == plr->GetObjectGuid()) { // update personal rating float chance = GetChanceAgainst(itr->personal_rating, againstRating); @@ -707,15 +703,15 @@ void ArenaTeam::UpdateArenaPointsHelper(std::map& PlayerPoints) points_to_add = GetPoints(itr->personal_rating); // OBSOLETE : CharacterDatabase.PExecute("UPDATE arena_team_member SET points_to_add = '%u' WHERE arenateamid = '%u' AND guid = '%u'", points_to_add, m_TeamId, itr->guid); - std::map::iterator plr_itr = PlayerPoints.find(GUID_LOPART(itr->guid)); + std::map::iterator plr_itr = PlayerPoints.find(itr->guid.GetCounter()); if (plr_itr != PlayerPoints.end()) { //check if there is already more points if (plr_itr->second < points_to_add) - PlayerPoints[GUID_LOPART(itr->guid)] = points_to_add; + PlayerPoints[itr->guid.GetCounter()] = points_to_add; } else - PlayerPoints[GUID_LOPART(itr->guid)] = points_to_add; + PlayerPoints[itr->guid.GetCounter()] = points_to_add; } } @@ -727,7 +723,7 @@ void ArenaTeam::SaveToDB() CharacterDatabase.PExecute("UPDATE arena_team_stats SET rating = '%u',games = '%u',played = '%u',rank = '%u',wins = '%u',wins2 = '%u' WHERE arenateamid = '%u'", m_stats.rating, m_stats.games_week, m_stats.games_season, m_stats.rank, m_stats.wins_week, m_stats.wins_season, GetId()); for(MemberList::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr) { - CharacterDatabase.PExecute("UPDATE arena_team_member SET played_week = '%u', wons_week = '%u', played_season = '%u', wons_season = '%u', personal_rating = '%u' WHERE arenateamid = '%u' AND guid = '%u'", itr->games_week, itr->wins_week, itr->games_season, itr->wins_season, itr->personal_rating, m_TeamId, GUID_LOPART(itr->guid)); + CharacterDatabase.PExecute("UPDATE arena_team_member SET played_week = '%u', wons_week = '%u', played_season = '%u', wons_season = '%u', personal_rating = '%u' WHERE arenateamid = '%u' AND guid = '%u'", itr->games_week, itr->wins_week, itr->games_season, itr->wins_season, itr->personal_rating, m_TeamId, itr->guid.GetCounter()); } CharacterDatabase.CommitTransaction(); } diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h index cbca14ba1..ae8386acd 100644 --- a/src/game/ArenaTeam.h +++ b/src/game/ArenaTeam.h @@ -87,7 +87,7 @@ enum ArenaTeamTypes struct ArenaTeamMember { - uint64 guid; + ObjectGuid guid; std::string name; uint8 Class; uint32 games_week; @@ -125,7 +125,7 @@ class ArenaTeam ArenaTeam(); ~ArenaTeam(); - bool Create(uint64 captainGuid, uint32 type, std::string ArenaTeamName); + bool Create(ObjectGuid captainGuid, uint32 type, std::string arenaTeamName); void Disband(WorldSession *session); typedef std::list MemberList; @@ -134,7 +134,7 @@ class ArenaTeam uint32 GetType() const { return m_Type; } uint8 GetSlot() const { return GetSlotByType(GetType()); } static uint8 GetSlotByType(uint32 type); - const uint64& GetCaptain() const { return m_CaptainGuid; } + ObjectGuid GetCaptainGuid() const { return m_CaptainGuid; } std::string GetName() const { return m_Name; } const ArenaTeamStats& GetStats() const { return m_stats; } void SetStats(uint32 stat_type, uint32 value); @@ -146,12 +146,9 @@ class ArenaTeam uint32 GetBorderColor() const { return m_BorderColor; } uint32 GetBackgroundColor() const { return m_BackgroundColor; } - void SetCaptain(const uint64& guid); - bool AddMember(const uint64& PlayerGuid); - - // Shouldn't be const uint64& ed, because than can reference guid from members on Disband - // and this method removes given record from list. So invalid reference can happen. - void DelMember(uint64 guid); + void SetCaptain(ObjectGuid guid); + bool AddMember(ObjectGuid playerGuid); + void DelMember(ObjectGuid guid); void SetEmblem(uint32 backgroundColor, uint32 emblemStyle, uint32 emblemColor, uint32 borderStyle, uint32 borderColor); @@ -159,12 +156,12 @@ class ArenaTeam bool Empty() const { return m_members.empty(); } MemberList::iterator m_membersBegin() { return m_members.begin(); } MemberList::iterator m_membersEnd() { return m_members.end(); } - bool HaveMember(const uint64& guid) const; + bool HaveMember(ObjectGuid guid) const; - ArenaTeamMember* GetMember(const uint64& guid) + ArenaTeamMember* GetMember(ObjectGuid guid) { for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) - if(itr->guid == guid) + if (itr->guid == guid) return &(*itr); return NULL; @@ -173,7 +170,7 @@ class ArenaTeam ArenaTeamMember* GetMember(const std::string& name) { for (MemberList::iterator itr = m_members.begin(); itr != m_members.end(); ++itr) - if(itr->name == name) + if (itr->name == name) return &(*itr); return NULL; @@ -188,12 +185,17 @@ class ArenaTeam void SaveToDB(); void BroadcastPacket(WorldPacket *packet); - void BroadcastEvent(ArenaTeamEvents event, uint64 guid, uint8 strCount, std::string str1, std::string str2, std::string str3); + + void BroadcastEvent(ArenaTeamEvents event, ObjectGuid guid, char const* str1 = NULL, char const* str2 = NULL, char const* str3 = NULL); + void BroadcastEvent(ArenaTeamEvents event, char const* str1 = NULL, char const* str2 = NULL, char const* str3 = NULL) + { + BroadcastEvent(event, ObjectGuid(), str1, str2, str3); + } void Roster(WorldSession *session); void Query(WorldSession *session); void Stats(WorldSession *session); - void InspectStats(WorldSession *session, uint64 guid); + void InspectStats(WorldSession *session, ObjectGuid guid); uint32 GetPoints(uint32 MemberRating); float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating); @@ -201,7 +203,7 @@ class ArenaTeam void MemberWon(Player * plr, uint32 againstRating); int32 LostAgainst(uint32 againstRating); void MemberLost(Player * plr, uint32 againstRating); - void OfflineMemberLost(uint64 guid, uint32 againstRating); + void OfflineMemberLost(ObjectGuid guid, uint32 againstRating); void UpdateArenaPointsHelper(std::map & PlayerPoints); @@ -215,7 +217,7 @@ class ArenaTeam uint32 m_TeamId; uint32 m_Type; std::string m_Name; - uint64 m_CaptainGuid; + ObjectGuid m_CaptainGuid; uint32 m_BackgroundColor; // ARGB format uint32 m_EmblemStyle; // icon id diff --git a/src/game/ArenaTeamHandler.cpp b/src/game/ArenaTeamHandler.cpp index 289bd752b..3c20babcf 100644 --- a/src/game/ArenaTeamHandler.cpp +++ b/src/game/ArenaTeamHandler.cpp @@ -30,9 +30,9 @@ void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket & recv_data) { DEBUG_LOG("MSG_INSPECT_ARENA_TEAMS"); - uint64 guid; + ObjectGuid guid; recv_data >> guid; - DEBUG_LOG("Inspect Arena stats (GUID: %u TypeId: %u)", GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid))); + DEBUG_LOG("Inspect Arena stats %s", guid.GetString().c_str()); if(Player *plr = sObjectMgr.GetPlayer(guid)) { @@ -41,7 +41,7 @@ void WorldSession::HandleInspectArenaTeamsOpcode(WorldPacket & recv_data) if(uint32 a_id = plr->GetArenaTeamId(i)) { if(ArenaTeam *at = sObjectMgr.GetArenaTeamById(a_id)) - at->InspectStats(this, plr->GetGUID()); + at->InspectStats(this, plr->GetObjectGuid()); } } } @@ -155,24 +155,25 @@ void WorldSession::HandleArenaTeamAcceptOpcode(WorldPacket & /*recv_data*/) DEBUG_LOG("CMSG_ARENA_TEAM_ACCEPT"); // empty opcode ArenaTeam *at = sObjectMgr.GetArenaTeamById(_player->GetArenaTeamIdInvited()); - if(!at) + if (!at) return; - if(_player->GetArenaTeamId(at->GetSlot())) + if (_player->GetArenaTeamId(at->GetSlot())) { // already in arena team that size SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ALREADY_IN_ARENA_TEAM); return; } - if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GUILD) && _player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(at->GetCaptain())) + if (!sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_GUILD) && + _player->GetTeam() != sObjectMgr.GetPlayerTeamByGUID(at->GetCaptainGuid())) { // not let enemies sign petition SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_NOT_ALLIED); return; } - if(!at->AddMember(_player->GetGUID())) + if (!at->AddMember(_player->GetObjectGuid())) { // arena team not found SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ARENA_TEAM_INTERNAL); @@ -180,7 +181,7 @@ void WorldSession::HandleArenaTeamAcceptOpcode(WorldPacket & /*recv_data*/) } // event - at->BroadcastEvent(ERR_ARENA_TEAM_JOIN_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), ""); + at->BroadcastEvent(ERR_ARENA_TEAM_JOIN_SS, _player->GetObjectGuid(), _player->GetName(), at->GetName().c_str()); } void WorldSession::HandleArenaTeamDeclineOpcode(WorldPacket & /*recv_data*/) @@ -198,10 +199,10 @@ void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data) recv_data >> ArenaTeamId; ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId); - if(!at) + if (!at) return; - if(_player->GetGUID() == at->GetCaptain() && at->GetMembersSize() > 1) + if (_player->GetObjectGuid() == at->GetCaptainGuid() && at->GetMembersSize() > 1) { // check for correctness SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S); @@ -209,17 +210,17 @@ void WorldSession::HandleArenaTeamLeaveOpcode(WorldPacket & recv_data) } // arena team has only one member (=captain) - if(_player->GetGUID() == at->GetCaptain()) + if (_player->GetObjectGuid() == at->GetCaptainGuid()) { at->Disband(this); delete at; return; } - at->DelMember(_player->GetGUID()); + at->DelMember(_player->GetObjectGuid()); // event - at->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetGUID(), 2, _player->GetName(), at->GetName(), ""); + at->BroadcastEvent(ERR_ARENA_TEAM_LEAVE_SS, _player->GetObjectGuid(), _player->GetName(), at->GetName().c_str()); // send you are no longer member of team SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, at->GetName(), "", 0); @@ -232,12 +233,12 @@ void WorldSession::HandleArenaTeamDisbandOpcode(WorldPacket & recv_data) uint32 ArenaTeamId; // arena team id recv_data >> ArenaTeamId; - if(ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId)) + if (ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId)) { - if(at->GetCaptain() != _player->GetGUID()) + if (at->GetCaptainGuid() != _player->GetObjectGuid()) return; - if(at->IsFighting()) + if (at->IsFighting()) return; at->Disband(this); @@ -256,26 +257,26 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data) recv_data >> name; ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId); - if(!at) // arena team not found + if (!at) // arena team not found return; - if(at->GetCaptain() != _player->GetGUID()) + if (at->GetCaptainGuid() != _player->GetObjectGuid()) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS); return; } - if(!normalizePlayerName(name)) + if (!normalizePlayerName(name)) return; ArenaTeamMember* member = at->GetMember(name); - if(!member) // member not found + if (!member) // member not found { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", name, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S); return; } - if(at->GetCaptain() == member->guid) + if (at->GetCaptainGuid() == member->guid) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_QUIT_S, "", "", ERR_ARENA_TEAM_LEADER_LEAVE_S); return; @@ -284,7 +285,7 @@ void WorldSession::HandleArenaTeamRemoveOpcode(WorldPacket & recv_data) at->DelMember(member->guid); // event - at->BroadcastEvent(ERR_ARENA_TEAM_REMOVE_SSS, 0, 3, name, at->GetName(), _player->GetName()); + at->BroadcastEvent(ERR_ARENA_TEAM_REMOVE_SSS, name.c_str(), at->GetName().c_str(), _player->GetName()); } void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data) @@ -298,32 +299,32 @@ void WorldSession::HandleArenaTeamLeaderOpcode(WorldPacket & recv_data) recv_data >> name; ArenaTeam *at = sObjectMgr.GetArenaTeamById(ArenaTeamId); - if(!at) // arena team not found + if (!at) // arena team not found return; - if(at->GetCaptain() != _player->GetGUID()) + if (at->GetCaptainGuid() != _player->GetObjectGuid()) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", "", ERR_ARENA_TEAM_PERMISSIONS); return; } - if(!normalizePlayerName(name)) + if (!normalizePlayerName(name)) return; ArenaTeamMember* member = at->GetMember(name); - if(!member) // member not found + if (!member) // member not found { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, "", name, ERR_ARENA_TEAM_PLAYER_NOT_FOUND_S); return; } - if(at->GetCaptain() == member->guid) // target player already captain + if (at->GetCaptainGuid() == member->guid) // target player already captain return; at->SetCaptain(member->guid); // event - at->BroadcastEvent(ERR_ARENA_TEAM_LEADER_CHANGED_SSS, 0, 3, _player->GetName(), name, at->GetName()); + at->BroadcastEvent(ERR_ARENA_TEAM_LEADER_CHANGED_SSS, _player->GetName(), name.c_str(), at->GetName().c_str()); } void WorldSession::SendArenaTeamCommandResult(uint32 team_action, const std::string& team, const std::string& player, uint32 error_id) diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index bec3e8ff3..8343ab577 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -779,7 +779,7 @@ void BattleGround::EndBattleGround(uint32 winner) if (team == winner) { // update achievement BEFORE personal rating update - ArenaTeamMember* member = winner_arena_team->GetMember(plr->GetGUID()); + ArenaTeamMember* member = winner_arena_team->GetMember(plr->GetObjectGuid()); if (member) plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA, member->personal_rating); diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index aec3da22f..83bdf28a9 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -260,7 +260,7 @@ ArenaTeam* ObjectMgr::GetArenaTeamByName(const std::string& arenateamname) const ArenaTeam* ObjectMgr::GetArenaTeamByCaptain(ObjectGuid guid) const { for(ArenaTeamMap::const_iterator itr = mArenaTeamMap.begin(); itr != mArenaTeamMap.end(); ++itr) - if (itr->second->GetCaptain() == guid.GetRawValue()) + if (itr->second->GetCaptainGuid() == guid) return itr->second; return NULL; diff --git a/src/game/PetitionsHandler.cpp b/src/game/PetitionsHandler.cpp index e7475a1b7..e59fbd3ed 100644 --- a/src/game/PetitionsHandler.cpp +++ b/src/game/PetitionsHandler.cpp @@ -851,7 +851,7 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data) else // or arena team { ArenaTeam* at = new ArenaTeam; - if(!at->Create(_player->GetGUID(), type, name)) + if (!at->Create(_player->GetObjectGuid(), type, name)) { sLog.outError("PetitionsHandler: arena team create failed."); delete at; @@ -872,8 +872,11 @@ void WorldSession::HandleTurnInPetitionOpcode(WorldPacket & recv_data) for(uint8 i = 0; i < signs; ++i) { Field* fields = result->Fetch(); - uint64 memberGUID = fields[0].GetUInt64(); - DEBUG_LOG("PetitionsHandler: adding arena member %u", GUID_LOPART(memberGUID)); + ObjectGuid memberGUID = ObjectGuid(HIGHGUID_PLAYER, fields[0].GetUInt32()); + if (memberGUID.IsEmpty()) + continue; + + DEBUG_LOG("PetitionsHandler: adding arena member %s", memberGUID.GetString().c_str()); at->AddMember(memberGUID); result->NextRow(); } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 0163b0bb9..398948287 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -6617,10 +6617,10 @@ uint32 Player::GetRankFromDB(uint64 guid) return 0; } -uint32 Player::GetArenaTeamIdFromDB(uint64 guid, uint8 type) +uint32 Player::GetArenaTeamIdFromDB(ObjectGuid guid, uint8 type) { - QueryResult *result = CharacterDatabase.PQuery("SELECT arena_team_member.arenateamid FROM arena_team_member JOIN arena_team ON arena_team_member.arenateamid = arena_team.arenateamid WHERE guid='%u' AND type='%u' LIMIT 1", GUID_LOPART(guid), type); - if(!result) + QueryResult *result = CharacterDatabase.PQuery("SELECT arena_team_member.arenateamid FROM arena_team_member JOIN arena_team ON arena_team_member.arenateamid = arena_team.arenateamid WHERE guid='%u' AND type='%u' LIMIT 1", guid.GetCounter(), type); + if (!result) return 0; uint32 id = (*result)[0].GetUInt32(); @@ -14899,7 +14899,7 @@ void Player::_LoadArenaTeamInfo(QueryResult *result) SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_ID, arenateamid); SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_TYPE, aTeam->GetType()); - SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_MEMBER, (aTeam->GetCaptain() == GetGUID()) ? 0 : 1); + SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_MEMBER, (aTeam->GetCaptainGuid() == GetObjectGuid()) ? 0 : 1); SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_WEEK, played_week); SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_GAMES_SEASON, played_season); SetArenaTeamInfoField(arenaSlot, ARENA_TEAM_WINS_SEASON, wons_season); @@ -15136,11 +15136,11 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) for(uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot) { uint32 arena_team_id = GetArenaTeamId(arena_slot); - if(!arena_team_id) + if (!arena_team_id) continue; - if(ArenaTeam * at = sObjectMgr.GetArenaTeamById(arena_team_id)) - if(at->HaveMember(GetGUID())) + if (ArenaTeam * at = sObjectMgr.GetArenaTeamById(arena_team_id)) + if (at->HaveMember(GetObjectGuid())) continue; // arena team not exist or not member, cleanup fields @@ -18107,13 +18107,10 @@ void Player::LeaveAllArenaTeams(ObjectGuid guid) do { Field *fields = result->Fetch(); - uint32 at_id = fields[0].GetUInt32(); - if(at_id != 0) - { - ArenaTeam * at = sObjectMgr.GetArenaTeamById(at_id); - if(at) - at->DelMember(guid.GetRawValue()); - } + if (uint32 at_id = fields[0].GetUInt32()) + if (ArenaTeam * at = sObjectMgr.GetArenaTeamById(at_id)) + at->DelMember(guid); + } while (result->NextRow()); delete result; diff --git a/src/game/Player.h b/src/game/Player.h index 942146921..17e14b3ba 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1817,7 +1817,7 @@ class MANGOS_DLL_SPEC Player : public Unit } uint32 GetArenaTeamId(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_ID); } uint32 GetArenaPersonalRating(uint8 slot) { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_PERSONAL_RATING); } - static uint32 GetArenaTeamIdFromDB(uint64 guid, uint8 slot); + static uint32 GetArenaTeamIdFromDB(ObjectGuid guid, uint8 slot); void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; } uint32 GetArenaTeamIdInvited() { return m_ArenaTeamIdInvited; } static void LeaveAllArenaTeams(ObjectGuid guid); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3a5ae0eda..d465d3574 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10378" + #define REVISION_NR "10379" #endif // __REVISION_NR_H__