Skip to content

Instantly share code, notes, and snippets.

@Jildor
Created February 18, 2012 11:30
Show Gist options
  • Save Jildor/1858908 to your computer and use it in GitHub Desktop.
Save Jildor/1858908 to your computer and use it in GitHub Desktop.
Arena rating system old
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -575,29 +599,25 @@
uint32 ArenaTeam::GetAverageMMR(Group* group) const
{
if (!group)
return 0;
uint32 matchMakerRating = 0;
uint32 playerDivider = 0;
for (MemberList::const_iterator itr = Members.begin(); itr != Members.end(); ++itr)
{
// Skip if player is not online
if (!ObjectAccessor::FindPlayer(itr->Guid))
continue;
// Skip if player is not member of group
if (!group->IsMember(itr->Guid))
continue;
- matchMakerRating += itr->MatchMakerRating;
- ++playerDivider;
}
// x/0 = crash
if (playerDivider == 0)
playerDivider = 1;
- matchMakerRating /= playerDivider;
-
- return matchMakerRating;
+ return Stats.Rating;
}
@@ -613,19 +621,16 @@
// Calculate the rating modification
// Simulation on how it works. Not much info on how it really works
- float mod;
-
- if (won && !calculateMatchMakerRating)
- {
- if (ownRating < 1000)
- mod = 48.0f * (won_mod - chance);
- else if (ownRating < 1300)
- mod = (24.0f + (24.0f * (1300.0f - int32(ownRating)) / 300.0f)) * (won_mod - chance);
- else
- mod = 24.0f * (won_mod - chance);
+ float mod = 32.0f * (won_mod - chance); // correct value of K is 32 says wowwiki
+
+ // if it's loss and it's not calculation of MMR
+ if(!won && !calculateMatchMakerRating){
+ if(ownRating < 1000){ // team rating shouldn't decrease if it's already bellow 1000
+ mod = 0;
+ }else if(ownRating <= 1300){
+ mod /= 2;
+ }
}
- else
- mod = 24.0f * (won_mod - chance);
return (int32)ceil(mod);
}
@@ -675,7 +680,7 @@
{
// Called when the team has won
// Own team rating versus opponents matchmaker rating
- int32 mod = GetRatingMod(Stats.Rating, againstRating, true);
+ int32 mod = GetRatingMod(Stats.Rating, againstRating, true, false);
// Modify the team stats accordingly
FinishGame(mod);
@@ -692,7 +697,7 @@
{
// Called when the team has lost
// Own team rating versus opponents matchmaker rating
- int32 mod = GetRatingMod(Stats.Rating, againstRating, false);
+ int32 mod = GetRatingMod(Stats.Rating, againstRating, false, false);
// Modify the team stats accordingly
FinishGame(mod);
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -700,8 +700,8 @@
loser_matchmaker_rating = GetArenaMatchmakerRating(GetOtherTeam(winner));
winner_team_rating = winner_arena_team->GetRating();
winner_matchmaker_rating = GetArenaMatchmakerRating(winner);
- winner_change = winner_arena_team->WonAgainst(loser_matchmaker_rating);
- loser_change = loser_arena_team->LostAgainst(winner_matchmaker_rating);
+ winner_change = winner_arena_team->WonAgainst(loser_team_rating);
+ loser_change = loser_arena_team->LostAgainst(winner_team_rating);
sLog->outArena("--- Winner rating: %u, Loser rating: %u, Winner MMR: %u, Loser MMR: %u, Winner change: %d, Loser change: %d ---", winner_team_rating, loser_team_rating,
winner_matchmaker_rating, loser_matchmaker_rating, winner_change, loser_change);
SetArenaTeamRatingChangeForTeam(winner, winner_change);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment