From 9c34efec413b7fb43ca817d2479ece9ba3d5c5a3 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 14 Apr 2011 05:05:07 +0400 Subject: [PATCH] [11349] Instead group online players use arena team full list for claculate avg. personal rating. --- src/game/ArenaTeam.cpp | 9 +++++++++ src/game/ArenaTeam.h | 1 + src/game/BattleGroundHandler.cpp | 12 +----------- src/shared/revision_nr.h | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index d02409c8c..0e3e3a5b0 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -540,6 +540,15 @@ bool ArenaTeam::HaveMember(ObjectGuid guid) const return false; } +uint32 ArenaTeam::GetAvgPersonalRating() const +{ + uint32 rating = 0; + for(MemberList::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr) + rating += itr->personal_rating; + + return rating / m_Type; +} + uint32 ArenaTeam::GetPoints(uint32 MemberRating) { // returns how many points would be awarded with this team type with this rating diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h index 7a26ac504..7fcbfc8ca 100644 --- a/src/game/ArenaTeam.h +++ b/src/game/ArenaTeam.h @@ -197,6 +197,7 @@ class ArenaTeam void Stats(WorldSession *session); void InspectStats(WorldSession *session, ObjectGuid guid); + uint32 GetAvgPersonalRating() const; uint32 GetPoints(uint32 MemberRating); float GetChanceAgainst(uint32 own_rating, uint32 enemy_rating); int32 WonAgainst(uint32 againstRating); diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 1e45a77ad..93dd3d8c1 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -699,17 +699,7 @@ void WorldSession::HandleBattlemasterJoinArena( WorldPacket & recv_data ) arenaRating = at->GetRating(); // the arena team id must match for everyone in the group // get the personal ratings for queue - uint32 avg_pers_rating = 0; - for(GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) - { - Player *member = itr->getSource(); - - // calc avg personal rating - avg_pers_rating += member->GetArenaPersonalRating(arenaslot); - } - - if (arenatype) - avg_pers_rating /= arenatype; + uint32 avg_pers_rating = at->GetAvgPersonalRating(); // if avg personal rating is more than 150 points below the teams rating, the team will be queued against an opponent matching or similar to the average personal rating if (avg_pers_rating + 150 < arenaRating) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 6b502bc0e..796c9455a 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 "11348" + #define REVISION_NR "11349" #endif // __REVISION_NR_H__