|
1 | 1 | package core |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "github.com/wowsims/mop/sim/core/proto" |
4 | 5 | "github.com/wowsims/mop/sim/core/stats" |
5 | 6 | ) |
6 | 7 |
|
7 | | -// Could be in constants.go, but they won't be used anywhere else |
8 | | -// C values are divided by 100 so that we are working with 1% = 0.01 |
9 | | -// TODO: UPDATE FOR MOP |
10 | | -// Reference for Cata values: https://web.archive.org/web/20130127084642/http://elitistjerks.com/f15/t29453-combat_ratings_level_85_cataclysm/ |
11 | | -const Diminish_k_Druid = 0.972 |
12 | | -const Diminish_k_Nondruid = 0.956 |
13 | | -const Diminish_Cd_Druid = 116.890707 / 100 |
14 | | -const Diminish_Cd_Nondruid = 65.631440 / 100 |
15 | | -const Diminish_Cp = 65.631440 / 100 |
16 | | -const Diminish_kCd_Druid = (Diminish_k_Druid * Diminish_Cd_Druid) |
17 | | -const Diminish_kCd_Nondruid = (Diminish_k_Nondruid * Diminish_Cd_Nondruid) |
18 | | -const Diminish_kCp = (Diminish_k_Nondruid * Diminish_Cp) |
| 8 | +type DiminishingReturnsConstants struct { |
| 9 | + k, c_p, c_d, c_b float64 |
| 10 | +} |
| 11 | + |
| 12 | +// https://github.com/raethkcj/MistsDiminishingReturns |
| 13 | +var AvoidanceDRByClass = map[proto.Class]DiminishingReturnsConstants{ |
| 14 | + proto.Class_ClassWarrior: {0.956, 237.186, 90.6425, 150.376}, |
| 15 | + proto.Class_ClassPaladin: {0.886, 237.186, 66.5675, 150.376}, |
| 16 | + proto.Class_ClassHunter: {0.988, 0, 145.560, 0}, |
| 17 | + proto.Class_ClassRogue: {0.988, 145.560, 145.560, 0}, |
| 18 | + proto.Class_ClassPriest: {0.983, 0, 150.376, 0}, |
| 19 | + proto.Class_ClassDeathKnight: {0.956, 237.186, 90.6425, 0}, |
| 20 | + proto.Class_ClassShaman: {0.988, 145.560, 145.560, 0}, |
| 21 | + proto.Class_ClassMonk: {1.422, 90.6425, 501.253, 0}, |
| 22 | + proto.Class_ClassMage: {0.983, 0, 150.376, 0}, |
| 23 | + proto.Class_ClassWarlock: {0.983, 0, 150.376, 0}, |
| 24 | + proto.Class_ClassDruid: {1.222, 0, 150.376, 0}, |
| 25 | +} |
19 | 26 |
|
20 | 27 | // Diminishing Returns for tank avoidance |
21 | 28 | // Non-diminishing sources are added separately in spell outcome funcs |
22 | 29 |
|
23 | 30 | func (unit *Unit) GetDiminishedDodgeChance() float64 { |
24 | 31 | // undiminished Dodge % = D |
25 | 32 | // diminished Dodge % = (D * Cd)/((k*Cd) + D) |
26 | | - dodgeChance := unit.stats[stats.DodgeRating] / DodgeRatingPerDodgePercent / 100 |
27 | | - |
28 | | - if unit.PseudoStats.CanParry { |
29 | | - return (dodgeChance * Diminish_Cd_Nondruid) / (Diminish_kCd_Nondruid + dodgeChance) |
30 | | - } else { |
31 | | - return (dodgeChance * Diminish_Cd_Druid) / (Diminish_kCd_Druid + dodgeChance) |
32 | | - } |
| 33 | + dodgePercent := unit.stats[stats.DodgeRating] / DodgeRatingPerDodgePercent |
| 34 | + return (dodgePercent * unit.avoidanceParams.c_d) / (unit.avoidanceParams.k * unit.avoidanceParams.c_d + dodgePercent) / 100 |
33 | 35 | } |
34 | 36 |
|
35 | 37 | func (unit *Unit) GetDiminishedParryChance() float64 { |
36 | 38 | // undiminished Parry % = P |
37 | 39 | // diminished Parry % = (P * Cp)/((k*Cp) + P) |
38 | | - parryChance := unit.stats[stats.ParryRating] / ParryRatingPerParryPercent / 100 |
39 | | - return (parryChance * Diminish_Cp) / (Diminish_kCp + parryChance) |
| 40 | + parryPercent := unit.stats[stats.ParryRating] / ParryRatingPerParryPercent |
| 41 | + return (parryPercent * unit.avoidanceParams.c_p) / (unit.avoidanceParams.k * unit.avoidanceParams.c_p + parryPercent) / 100 |
40 | 42 | } |
41 | 43 |
|
42 | | -func (unit *Unit) GetDiminishedMissChance() float64 { |
43 | | - // Defense Rating is gone in Cata, so there are no diminished sources of Miss |
44 | | - return 0 |
| 44 | +func (unit *Unit) GetDiminishedBlockChance() float64 { |
| 45 | + // undiminished Block % = B |
| 46 | + // diminished Block % = (B * Cb)/((k*Cb) + B) |
| 47 | + blockPercent := unit.stats[stats.BlockPercent] |
| 48 | + return (blockPercent * unit.avoidanceParams.c_b) / (unit.avoidanceParams.k * unit.avoidanceParams.c_b + blockPercent) / 100 |
45 | 49 | } |
0 commit comments