Honor system (pre-2.0 formulas)

This article will attempt to cover the mathematical formulas that are known about the honor system (pre-2.0). Some of this information was derived by other authors. Sources are listed at the end in the section.

Variables

 * HK : Number of Honorable Kills you have made.
 * DK : Number of Dishonorable Kills you have made.
 * CP : Number of Contribution Points you have earned in a given week.
 * WS : Weekly Standing, your CP standing relative to the other players on your faction side for the week.
 * NR : Number of Ranked players for your faction in a given week. (Also the highest WS value awarded to a player for the week.)
 * RP : Number of Rank Points you have earned over all weeks.
 * HS : Honor Standing, your RP standing relative to the other players on your faction side overall.
 * Rank : 0 - 14. Your PVP Rank determines your PvP Title.
 * BHU : Bonus Honor Unit, the base amount of bonus CP earned for achieving objectives in battlegrounds. Each objective is worth 1 or more BHU's.

Note that in the old system, rank was used to determine what equipment you can purchase at the PVP faction vendors.

Contribution Points

 * Your CP score is reset to 0 at weekly server maintenance, so every Tuesday in US and mainland China, every Wednesday in EU.

CP for Honorable Kills

 * You get more honor for killing higher ranked players.
 * Patch 1.8 raised these numbers. Unfortunately I do not possess numbers for all ranks, so I only add numbers I know and keep pre-1.8 numbers for historical purposes. --Drundia
 * The CP per HK are divided among all the groups that caused damage to the killed player.
 * Your CP per HK is subject to the diminishing returns rule. Within a 24 hour period you will only get credit for 10 HKs against a given player, as follows: ( Updated to the new 1.12 Patch)
 * 1st kill = 100% CP
 * 2nd kill = 90% CP
 * 3rd kill = 80% CP
 * 4th kill = 70% CP
 * 5th kill = 60% CP
 * 6th kill = 50% CP
 * 7th kill = 40% CP
 * 8th kill = 30% CP
 * 9th kill = 20% CP
 * 10th kill = 10% CP
 * 11th and subsequent kills = 0 CP
 * Contrary to official Blizzard statements there actually exists a group and even raid bonus when number of players who get the share of group honor is 3 or higher.
 * DK's immediately lower RP's (overall score) rather than your CP's (weekly score).
 * The CP's that you earn each day can be viewed under the honor tab of your character window on the next day.

Estimated Honor Points
Soandso dies, honorable kill Rank: Senior Sergeant (Estimated Honor Points: 38)
 * You can view your estimated honor earnings per kill in your Combat message window. You can also display those messages in your main chat window by enabling them in the Filters, Combat Messages, Honor Messages menu.
 * An estimated honor message looks like this:
 * The Estimated Honor Points number does not account for the diminishing returns rule. It is up to you or the mod of your choice to keep track of how many times you've killed each player.

CPs from Faction Leaders

 * One report says that killing Thrall was worth 488 CP and 0 reputation.

CPs from Battlegrounds

 * "Your team" in the notes below refers to everyone on your side of the battleground, regardless of groups or raid groups.
 * CP rewards scale down for players under level 60. The amount of reward for each objective is a multiple of the BHU for the level of battleground that you are in. The BHU is determined by the CP that would be awarded to the highest level in the range, if they made an honorable kill on a Rank 1 target. (So 198 CP for level 60 battlegrounds, as per the honor per rank table above.)
 * Bonus Honor Units (BHU) by Battleground Level Range:
 * Bonus honor for objectives are awarded immediately when the objective is achieved. This means that:
 * If you enter a battleground late, you will not receive bonus honor for objectives before you arrived.
 * If you leave a battleground before the end of the match, you will keep any awarded bonus you have received so far, but you will not receive the bonuses awarded at the end of the match.
 * If a game ends prematurely due to lack of players outnumbering team will be granted victory when timer expires regardless of objectives.

Alterac Valley

 * This section is a work in progress (see talk page).
 * Each side has 1 General. Killing the General gives your team bonus honor, and wins the match. If a game ends prematurely due to lack of players, General of outnumbered team will be killed when timer expires, unless both teams don't have enough players in which case all players will be kicked out and awarded a Deserter debuff.
 * Each side has 1 Captain, 4 Commanders, and 6 Lieutenants. These NPCs give your team bonus honor when killed.


 * Each side has 4 Towers or Bunkers. These structures give your team bonus honor when destroyed.


 * Each side has 3 captured Wing Commanders found in enemy territory. These NPCs can be rescued for bonus honor. After rescue, these NPC's collect items (medals for Alliance, flesh for Horde) to release the flight to help your side fight.


 * this table is not yet complete...

Arathi Basin

 * Your team earns bonus honor for collecting resources. During normal days, the bonus is awarded every time your team collects a multiple of 330 resource. On the Arathi Basin Holiday weekend, your team collects bonus for every multiple of 200 resources.
 * Your team also gets an additional bonus honor award for winning the match, regardless of the holiday schedule.
 * If a game ends prematurely due to lack of players outnumbering team will be granted victory when timer expires regardless of resources.

Warsong Gulch

 * Your team earns 2 BHU for each capture of the opponents' flag.
 * Your team earns 1 BHU for winning the match.
 * During Warsong Gulch Holidays both teams also earn an additional 3 BHU when match ends.
 * During Warsong Gulch Holidays the winning team earns an additional 2 BHU (in addition to normal 1 BHU for victory).
 * If a game ends prematurely due to lack of players outnumbering team will be granted victory when timer expires regardless of flags.

Quests

 * Marks are awarded at the end of the match in each of the three battlegrounds.
 * You earn 3 Marks for winning a match, 1 Mark for losing a match, and no marks if you quit out before the match is completed.
 * Turning in the quest for 3 Marks from each of the 3 battlegrounds (Concerted Efforts for Alliance, For Great Honor for Horde) is worth an additional 2388 CPs (at all levels, although only 51 and up can actually accomplish it because lower levels have no access to Alterac Valley).
 * Turning in one of the quests for 3 Marks from a single battleground is worth as follows:

CP Pseudo-Code
my CP = 0; # on Tuesday after the patch CP = CP + SomeHKFunction(My Level, Target Level, My Rank, Target Rank); # for each HK CP = CP + SomeBGFunction(My Level, BG Points, ???); # for battleground objectives CP = CP + SomeNPCReward; # for killing NPC honor targets

Weekly Standings

 * Your WS is calculated every week during the Tuesday server patch.
 * The person with the most CP's for the week on your side will have a WS of 1. The next highest CP score will have a WS of 2. And so on...
 * Your CP score is relative to the other players on your server/side. The absolute number of CP's you gain in one week can be wildly different from those you get in another week, and yet you may still get the same WS.
 * Any player that does not earn at least 15 HK's in a week will not be included in the weekly standings, and therefore cannot gain Rank.
 * There is also "a cut-off calculated based on the number of Honorable Kills made by all characters of your faction this week. Those having less HK than this cut-off (but at least 15 HK) will not be included in the calculations this week, but their points for the week will be enough to at least attain or keep Rank 1."
 * The HK cut-off was changed from 25 HK to 15 HK in or shortly after patch 1.10. (28-Mar-2006)

WS Pseudo-Code
@ListOfPlayers = list of all players on the server on this side (alliance/horde); foreach player (@ListOfPlayers) { if (HK(player) < 15) { delete player from @ListOfPlayers; } else if (CP(player) < cutoff) { delete player from @ListOfPlayers; if (Rank(player) == 0) { # 15 HK's is all you need to promote from no Rank to Rank=1 Rank(player) = 1; RP(player) = 0; }   } } standing=1; foreach player (@ListOfPlayers sorted by CP highest to lowest) { WS(player) = standing; standing++; } NR = standing; # total number of ranked players this week

Rank Points

 * Your RP score is adjusted weekly, during or before weekly maintenance (Tuesday for US, Wednesday for EU).
 * Your weekly adjustment is equal to your RP Earnings, minus your RP Decay.

Weekly RP Earnings

 * Your weekly earning depends on your WS, CP and the NR.
 * The function to convert CP to RP is piecewise-linear in CP. This function changes every week, depending upon how everyone on your server/side scores in the weekly standings.
 * The WS and NR are used to determine where the end points are for each linear segment.
 * The top end point is defined as (CPmax, 13000). In other words, the player scoring the most CP in a given week will earn 13000 RP. (Except on small servers, see below.)
 * The bottom end point is defined as (0, 0). In other words, 0 CP earns 0 RP.
 * The middle points are defined using Breakpoints, which are fractions of the total NR who will earn enough points to make progress toward each of the given ranks.
 * The Breakpoints are observed to be (pre-1.12):


 * The 1.12 patch changed the breakpoints, placing more people in the highest brackets for faster advancement. The new breakpoints listed above are estimates from a single server study.


 * This is used to determine the WS at the top of each Breakpoint by:

WS (at breakpoint) = round( NR * BreakPt )


 * The CP for the person at that WS, and the person at the next higher WS are used to determine the CP location at the breakpoint:

CP (breakpoint) = ( CP(WS) + CP(WS+1) ) / 2


 * CP location at breakpoint seems to be almost exactly in the middle for the datasets that I have checked so far.

Breakpoint Example



 * This is real data for the week ending Jan 25, 2006, on the Lothar Server, Alliance Side, as recorded by Greenman.

WS(14) = 0.002 * 2045 =  4.09 =   4 WS(13) = 0.007 * 2045 = 14.32 =  14 WS(12) = 0.017 * 2045 = 34.76 =  35 WS(11) = 0.037 * 2045 = 75.66 =  76 WS(10) = 0.077 * 2045 = 157.46 = 157 WS( 9) = 0.137 * 2045 = 280.17 = 280 ... and so on ...
 * 1) CPmax for WS=1 was 431492
 * 2) NR was 2045
 * 3) Breakpoints are:

CP(14) = (CP(WS=4) + CP(WS=5)) / 2 = (323844 + 306394) / 2       = 315119 CP(13) = (CP(WS=14) + CP(WS=15)) / 2 = (227956 + 225061) / 2       = 226508 ... and so on ...
 * 1) CP value at the 14 breakpoint is:
 * 1) CP value at the 13 breakpoint is:



(431492, 13000) # top CP score gets top RP score (315119, 12000) # breakpoint 14 (226508, 11000) (164960, 10000) (120420, 9000) ( 76316,  8000) ( 54408,  7000)  # breakpoint  9 ( 36958, 6000) ( 23369,  5000) ( 15491,  4000) (  9221,  3000) (  5231,  2000)  # breakpoint  4 ( 2539,  1000) (   910,   400) (     0,     0) # bottom end point
 * 1) the complete function is defined by the points:

Using the Fitted Function

 * The function is linear between each of the points, so find the two points that bound your CP score, and you know which group you are in.
 * Then take the linear fit between those two points to determine your RP earning.
 * For example:

RP = (CP - CPlo) / (CPup - CPlo) * (RPup - RPlo) + RPlo RP = (61353 - 54408) / (76316 - 54408) * (8000 - 7000) + 7000 RP = 6945 / 21908 * 1000 + 7000 RP = 7317  # which is exactly what he did earn that week
 * 1) Greenman earned CP=61353 during the week ending Jan 25th.
 * 2) Upper bound point:  ( 76316,  8000)
 * 3) Lower bound point:  ( 54408,  7000)

RP Earning Pseudo-Code
# # (@FX, @FY) = GenerateFunction(NR, @CP); sub GenerateFunction (NR, @CP) { #   # initialize the breakpoint values BRK[14] = 0.002; BRK[13] = 0.007; BRK[12] = 0.017; BRK[11] = 0.037; BRK[10] = 0.077; BRK[ 9] = 0.137; BRK[ 8] = 0.207; BRK[ 7] = 0.287; BRK[ 6] = 0.377; BRK[ 5] = 0.477; BRK[ 4] = 0.587; BRK[ 3] = 0.715; BRK[ 2] = 0.858; #   # get the WS scores at the top of each break point foreach i (2..14) { BRK[i] = round( BRK[i] * NR ); }        #    # set the high point FX[15] = CP[1];  # top scorer FY[15] = 13000;  # ... gets 13000 RP   # # set the low point FX[ 1] = 0; FY[ 1] = 0; #   # the Y values for each breakpoint are fixed FY[ 2] = 400; foreach i (3..14) { FY[i] = (i-2) * 1000; }   #    # the X values for each breakpoint are found from the CP scores # of the players around that point in the WS scores foreach i (2..14) { FX[i] ={ CP( BRK[i] ) + CP( BRK[i]+1 ) }/ 2; }   #     # function is complete, return the arrays return (@FX, @FY); }
 * 1) Variables:
 * 2)   NR    = total number of ranked players ont he server/side
 * 3)   @CP   = array of the CP scores for each of the ranked
 * 4)           players, indexed by their WS
 * 5)   @FX   = the X (CP) value of the 15 function control points
 * 6)   @FY   = the Y (RP) value of the 15 function control points
 * 1) Before any scoring can be done, we need to determine
 * 2) the parameters of the piecewise-linear function for
 * 3) this week. This is done with the following function call:

# # RP = LinearFit(CP, @FX, @FY); sub LinearFit (CP, @FX, @FY) { #   # search the function for the two points that bound the given CP    i = 15; while ((i>0) and (FX[i-1] > CP)) { i--; }   #     # we now have i such that FX[i] > CP >= FX[i-1] # so interpolate RP = (FY[i] - FY[i-1]) * (CP - FX[i-1]) / (FX[i] - FX[i-1]) + FY[i-1]; #   # that's all there is to it    return(RP); }
 * 1) Variables:
 * 2)   CP    = the given player's CP score for the week
 * 3)   @FX   = function params from above
 * 4)   @FY   = function params from above
 * 5)   RP    = the given player's RP earning for the week
 * 1) RP is found by a linear fit to one segment of the
 * 2) generated function.

Earnings on Small Servers

 * It is possible for a server to have an NR too small to support even a single Rank 14 player in a given week.
 * If NR < 250, the Rank 14 bracket will contain NR * 0.002 < 0.5, rounded to 0 players. In that case, the top scoring player for the week will earn 12000 RP (top of bracket 13) rather than the usual 13000 RP.
 * This was observed over multiple weeks, including the week ending 23-May-2006, on Muladin/H. NR for that week was estimated to be 207, and the WS=1 player earned 12000 RP.
 * Theoretically, if a server has NR < 71, then the Rank 13 bracket will also contain no players. In that case, I expect the top WS=1 player will earn 11000 RP (top of bracket 12).

How to Determine NR for a Server

 * If you know the standing at one of the breakpoints, you can estimate the NR from the breakpoint percentage value.
 * Examples:

NR = 4 / 0.002 = 2000 margin of error = 1 / 0.002 = 500 so NR = 2000 +/- 250 NR = 297 / 0.137 = 2168 margin of error = 1 / 0.137 = 7 so NR = 2168 +/- 4
 * 1) if your server regularly supports 4 people in bracket #14, then
 * 1) if the person earning closest to 7000 RP this week had WS=297, then

Weekly RP Decay

 * Your weekly RP decay is 20% of your current RP total.
 * But, if your weekly adjustment (Earning - Decay) negative, that adjustment is cut in half.
 * Also, your weekly adjustment will never drop you down by more than 2500 pts.
 * This limit does not include DK losses.

RP Decay Pseudo-Code
Earning = calculated above Decay = round(0.2 * RP); Delta = Earning - Decay; if (Delta < 0) { Delta = Delta / 2; } if (Delta < -2500) { Delta = -2500; } RP = RP + Delta; # change from last week to this week

Decay as Weighted Average
The official PVP Honor Guide describes the rank point system a little differently. This system is mathematically equivalent to the system described above, but it gives a better understanding of the reason why decay exists and how it is expected to work.


 * Every week your CP score is converted to a weekly rating point score. (Call this WRP, while RP is still your overall RP score from week to week.)
 * The WRP score is on the full 0 - 65000 point scale, just like RP. So WRP in this system is 5 * RP Earned in the above system.
 * Your new RP score for the week is calculated as a weighted average of your WRP and your RP to date.
 * If WRP > RP, then new RP = (4 * RP + 1 * WRP)/5
 * If WRP < RP, then new RP = (9 * RP + 1 * WRP)/10
 * and if (new RP) < (old RP - 2500), then new RP = RP - 2500
 * If you consistently score the same WRP from week to week, then this weighted average system will make your RP score approach that WRP value. (Just like in the old system, where 5 * your RP Earned is the expected limit of your RP over time.)
 * This system shows that the points are never actually taken away from you when you move up. You simply gain less ground when your total RP is approaching your potential WRP score.

CP to RP Rule of Thumb

 * You can derive how much honor (CP) you need to earn rank points (RP) for any given week on any given server, but only after the fact. There is no exact formula that can tell you how much CP you need this week to earn so many RP at the end of this week.
 * Furthermore, the Battlegrounds Holiday weekends change every week, which will also adjust how much CP you need for a given standing.
 * By reviewing the formulas for 28 server/week combinations, I have found a somewhat useful trend: the amount CP required for a given rank bracket is roughly 1.5 times the amount of CP required for the next lower bracket.
 * The calculated ratios are:


 * So if you want to increase your weekly earning by one rank bracket, you need to increase your honor earned per week by 1.5x. To go up two brackets, you need to increase your honor per week by 1.52 = 2.25x. And so on...

''This Rule of Thumb is an approximation. It is particularly bad for the highest rank brackets where voluntary server caps and individual performance can wildly skew the CP required. If you are looking to make the top #13 or #14 bracket on your server, you are better off inspecting people already in that bracket to see how much honor they are making.''

Rank

 * Your total RP determines your Rank, as follows:

Rank = 0,   no title, all players start here Rank = 1,   requires 15 HK in one week Rank = 2,   requires RP >= 2000 Rank = 3-14, requires RP >= (Rank - 2) * 5000

Dishonorable Kills

 * For level 60 PVP'ers, each DK costs you 100 RP. Lower level characters lose less RP per DK as seen in this table:


 * DK penalties are subtracted from your RP score immediately.
 * It is possible to lose rank when you score a DK.
 * DK losses are not included in the weekly adjustment and thus can make you exceed the -2500 pt loss cap.

Example
Tabithea of Frostwolf ended one week with RP = 16861. During the following week, she scored 6 DK's. Her score became: RP = 16861 - 6 * 100 = 16261 By the end of that week, she had scored only 1 HK. Thus she did not earn any RP for the week. She did lose 10% of her RP total to decay. RP = 16261 - 1626 = 14635 and the next week's rank list shows her RP = 14635 as expected.

Level Limits

 * Your RP total is capped based on your level below 60.
 * Your RP earning does not appear to be capped, except that your new total will not exceed your level cap.
 * Aurai's predictions on these caps are copied here, along with my recorded observations for the weeks since Dec 28 2005.

&42; Observed Max RP was less than Predicted Cap RP

How much RP did you earn?

 * You need to know your total RP score for this week, and for last week.
 * If your HS is ranked in the top 2000, you can get the exact numbers from the WoW PVP Rankings Page for the current week.
 * If not, you can estimate your RP by looking at the Rank progress bar. It's a linear scale between your current Rank RP score and the next Rank RP score. (or use the RankScore UI mod)

Decay = 0.2 * 11500 = 2300. Delta = 15498 - 11500 = 3998. Earning = 3998 + 2300 = 6298
 * 1) week of Dec 7, Greenman didn't quite make the top 1000, which cut off at 11640 RP.
 * 2) his estimated RP for that week is RP=11500.
 * 3) week of Dec 14, Greenman was WS=299 on his server, and made the total top 1000 with RP=15498.
 * 1) Delta = Earning - Decay gives
 * 1) so WS=299 earned RS = 6298 for that week.

Decay = 0.2 * 15498 = 3100 Delta = 18870 - 15498 = 3372 Earning = 3372 + 3100 = 6472
 * 1) week of Dec 21, Greenman was WS=310 on his server, and made the total top 1000 with RP=18870.
 * 1) so WS=310 earned RS = 6472 for that week.
 * 2) higher score for a lower standing? More ranked players the second week?

How far can you advance?

 * If you play consistently, and thus place consistently, you can expect to earn roughly the same amount of RP each week.
 * Your advancement is then limited by the 20% Weekly RP Decay.

0.2 * MaxRP = Earning MaxRP = 5 * Earning
 * 1) Max RP is reached when Decay = Earning

MaxRP = 5 * 6300 = 31500 Max Rank = 8
 * 1) If Greenman keeps up a consistent 6300 pts/week earning

How fast will you advance?

 * Step it out each week, using constant Earning and 20% Decay

Week 1:  RP = 18870 + 6300 - 3774 = 21396,  Rank = 6 Week 2:  RP = 21396 + 6300 - 4279 = 23417,  Rank = 6 Week 3:  RP = 23417 + 6300 - 4683 = 25034,  Rank = 7 Week 4:  RP = 25034 + 6300 - 5007 = 26327,  Rank = 7 Week 5:  RP = 26327 + 6300 - 5265 = 27362,  Rank = 7 Week 6:  RP = 27362 + 6300 - 5472 = 28190,  Rank = 7 Week 7:  RP = 28190 + 6300 - 5638 = 28852,  Rank = 7 Week 8:  RP = 28852 + 6300 - 5770 = 29382,  Rank = 7 Week 9:  RP = 29382 + 6300 - 5876 = 29806,  Rank = 7 Week 10: RP = 29806 + 6300 - 5961 = 30145,  Rank = 8
 * 1) Greenman starting at week 0 with RP=18870, Rank=5:


 * The decay catches up with you quickly, earning the last level will take some weeks.

How do you reach Rank 14?

 * You need to earn more than 12000 RP every week to beat the Decay to Rank 14 (RP=60000)
 * On most servers, only the top 3-6 players each week earn more than 12000 RP, depending on how many ranking PVP players on are your server.

Week 1:  RP = 55000 + 12500 - 11000 = 56500,  Rank = 13 Week 2:  RP = 56500 + 12500 - 11300 = 57700,  Rank = 13 Week 3:  RP = 57700 + 12500 - 11540 = 58660,  Rank = 13 Week 4:  RP = 58660 + 12500 - 11732 = 59428,  Rank = 13 Week 5:  RP = 59428 + 12500 - 11886 = 60042,  Rank = 14
 * 1) How long to progress from Rank = 13 to Rank = 14 earning 12500 RP per week?


 * So you can expect to spend around 5 weeks fighting to stay in the top WS on your server just to gain the last Rank.

How fast will you fall?

 * If you stop competing in PVP, your RP will fall by the Decay amount each week.
 * Players of Rank 7 or higher will lose 2500 RP or 1/2 of a Rank per week.
 * Players of Rank under 7 will lose 10% of their RP total each week.
 * Your RP total will approach 0 again, but you will not fall below Rank 1.

Week 1:  RP = 18870 - 1887 = 16983,  Rank = 5 Week 2:  RP = 16983 - 1698 = 15285,  Rank = 5 Week 3:  RP = 15285 - 1529 = 13756,  Rank = 4 Week 4:  RP = 13756 - 1376 = 12380,  Rank = 4 Week 5:  RP = 12380 - 1238 = 11142,  Rank = 4 Week 6:  RP = 11142 - 1114 = 10028,  Rank = 4 Week 7:  RP = 10028 - 1003 =  9025,  Rank = 3 Week 8:  RP =  9025 -  903 =  8122,  Rank = 3 Week 9:  RP =  8122 -  812 =  7310,  Rank = 3 Week 10: RP =  7310 -  731 =  6579,  Rank = 3 Week 11: RP =  6579 -  658 =  5921,  Rank = 3 Week 12: RP =  5921 -  592 =  5329,  Rank = 3 Week 13: RP =  5329 -  533 =  4796,  Rank = 2
 * 1) If Greenman gives up on PVP for 3 months:

What standing do you need to make a given rank?

 * The answer depends on your server/side PVP population NR.
 * Use the breakpoint values described above to calculate the WS for each breakpoint.
 * This table shows the calculated values for some average servers: NR=1500, 2000, and 2500.
 * To achieve the Rank Wanted, you will have to make sure your Weekly Standing (WS) is at or smaller than the value in the table every week.


 * In addition, you can use the to estimate how much honor you need to increase your earnings.

CP (bracket 11) = 1.52 * CP (bracket 9) CP = 2.25 * 62000 = 139500
 * 1) one week, Greenman collected 62000 CP
 * 2) that week he earned 7800 RP (bracket 9)
 * 3) to reach rank 11, he needs to earn at least 9000 RP
 * 4) so he needs to go up by 2 brackets
 * 1) so he needs to earn around 140k CP each week to reach rank 11