@@ -12,11 +12,7 @@ func applyRaceEffects(agent Agent) {
1212
1313 switch character .Race {
1414 case proto .Race_RaceBloodElf :
15- character .PseudoStats .ReducedArcaneHitTakenChance += 0.02
16- character .PseudoStats .ReducedFireHitTakenChance += 0.02
17- character .PseudoStats .ReducedFrostHitTakenChance += 0.02
18- character .PseudoStats .ReducedNatureHitTakenChance += 0.02
19- character .PseudoStats .ReducedShadowHitTakenChance += 0.02
15+ character .PseudoStats .SchoolDamageTakenMultiplier [stats .SchoolIndexArcane ] *= 0.99
2016
2117 var actionID ActionID
2218
@@ -25,6 +21,9 @@ func applyRaceEffects(agent Agent) {
2521 if character .HasRunicPowerBar () {
2622 actionID = ActionID {SpellID : 50613 }
2723 resourceMetrics = character .NewRunicPowerMetrics (actionID )
24+ } else if character .Class == proto .Class_ClassMonk {
25+ actionID = ActionID {SpellID : 129597 }
26+ resourceMetrics = character .NewChiMetrics (actionID )
2827 } else if character .HasEnergyBar () {
2928 actionID = ActionID {SpellID : 25046 }
3029 resourceMetrics = character .NewEnergyMetrics (actionID )
@@ -52,10 +51,12 @@ func applyRaceEffects(agent Agent) {
5251 ApplyEffects : func (sim * Simulation , _ * Unit , spell * Spell ) {
5352 if spell .Unit .HasRunicPowerBar () {
5453 spell .Unit .AddRunicPower (sim , 15.0 , resourceMetrics )
54+ } else if character .Class == proto .Class_ClassMonk {
55+ spell .Unit .AddComboPoints (sim , 1 , resourceMetrics )
5556 } else if spell .Unit .HasEnergyBar () {
5657 spell .Unit .AddEnergy (sim , 15.0 , resourceMetrics )
5758 } else if spell .Unit .HasManaBar () {
58- spell .Unit .AddMana (sim , spell .Unit .MaxMana ()* 0.06 , resourceMetrics )
59+ spell .Unit .AddMana (sim , spell .Unit .MaxMana ()* 0.02 , resourceMetrics )
5960 } else if spell .Unit .HasRageBar () {
6061 spell .Unit .AddRage (sim , 15.0 , resourceMetrics )
6162 } else if spell .Unit .HasFocusBar () {
@@ -71,6 +72,8 @@ func applyRaceEffects(agent Agent) {
7172 ShouldActivate : func (sim * Simulation , character * Character ) bool {
7273 if spell .Unit .HasRunicPowerBar () {
7374 return character .CurrentRunicPower () <= character .maxRunicPower - 15
75+ } else if character .Class == proto .Class_ClassMonk {
76+ return character .ComboPoints () <= character .maxComboPoints - 1
7477 } else if spell .Unit .HasEnergyBar () {
7578 return character .CurrentEnergy () <= character .maxEnergy - 15
7679 } else if spell .Unit .HasRageBar () {
@@ -82,14 +85,14 @@ func applyRaceEffects(agent Agent) {
8285 },
8386 })
8487 case proto .Race_RaceDraenei :
85- character .PseudoStats .ReducedShadowHitTakenChance += 0.02
8688 character .AddStats (stats.Stats {
8789 stats .PhysicalHitPercent : 1 ,
8890 stats .SpellHitPercent : 1 ,
8991 })
92+ character .PseudoStats .SchoolDamageTakenMultiplier [stats .SchoolIndexShadow ] *= 0.99
9093 // TODO: Gift of the naaru for healers
9194 case proto .Race_RaceDwarf :
92- character .PseudoStats .ReducedFrostHitTakenChance + = 0.02
95+ character .PseudoStats .SchoolDamageTakenMultiplier [ stats . SchoolIndexFrost ] * = 0.99
9396
9497 // Crack Shot: 1% Expertise with Ranged Weapons
9598 ranged := character .Ranged ()
@@ -99,18 +102,17 @@ func applyRaceEffects(agent Agent) {
99102 character .AddStat (stats .ExpertiseRating , ExpertisePerQuarterPercentReduction * 4 )
100103 }
101104
102- applyWeaponSpecialization (character , 3 * ExpertisePerQuarterPercentReduction ,
105+ applyWeaponSpecialization (character , 4 * ExpertisePerQuarterPercentReduction ,
103106 proto .WeaponType_WeaponTypeMace )
104107
105108 actionID := ActionID {SpellID : 20594 }
106109
107- statDep := character .NewDynamicMultiplyStat (stats .Armor , 1.1 )
108110 stoneFormAura := character .NewTemporaryStatsAuraWrapped ("Stoneform" , actionID , stats.Stats {}, time .Second * 8 , func (aura * Aura ) {
109111 aura .ApplyOnGain (func (aura * Aura , sim * Simulation ) {
110- aura . Unit . EnableDynamicStatDep ( sim , statDep )
112+ character . PseudoStats . DamageTakenMultiplier *= 0.90
111113 })
112114 aura .ApplyOnExpire (func (aura * Aura , sim * Simulation ) {
113- aura . Unit . DisableDynamicStatDep ( sim , statDep )
115+ character . PseudoStats . DamageTakenMultiplier /= 0.90
114116 })
115117 })
116118
@@ -133,16 +135,16 @@ func applyRaceEffects(agent Agent) {
133135 Type : CooldownTypeDPS ,
134136 })
135137 case proto .Race_RaceGnome :
136- character .PseudoStats .ReducedArcaneHitTakenChance + = 0.02
138+ character .PseudoStats .SchoolDamageTakenMultiplier [ stats . SchoolIndexArcane ] * = 0.99
137139 character .MultiplyStat (stats .Mana , 1.05 )
138- applyOneHandWeaponSpecialization (character , 3 * ExpertisePerQuarterPercentReduction ,
140+ applyOneHandWeaponSpecialization (character , 4 * ExpertisePerQuarterPercentReduction ,
139141 proto .WeaponType_WeaponTypeSword , proto .WeaponType_WeaponTypeDagger )
140142 case proto .Race_RaceHuman :
141143 character .MultiplyStat (stats .Spirit , 1.03 )
142- applyWeaponSpecialization (character , 3 * ExpertisePerQuarterPercentReduction ,
144+ applyWeaponSpecialization (character , 4 * ExpertisePerQuarterPercentReduction ,
143145 proto .WeaponType_WeaponTypeMace , proto .WeaponType_WeaponTypeSword )
144146 case proto .Race_RaceNightElf :
145- character .PseudoStats .ReducedNatureHitTakenChance + = 0.02
147+ character .PseudoStats .SchoolDamageTakenMultiplier [ stats . SchoolIndexNature ] * = 0.99
146148 character .PseudoStats .ReducedPhysicalHitTakenChance += 0.02
147149
148150 // Shadowmeld
@@ -192,9 +194,9 @@ func applyRaceEffects(agent Agent) {
192194 })
193195
194196 case proto .Race_RaceOrc :
195- // Command (Pet damage +5 %)
197+ // Command (Pet damage +2 %)
196198 for _ , pet := range character .Pets {
197- pet .PseudoStats .DamageDealtMultiplier *= 1.05
199+ pet .PseudoStats .DamageDealtMultiplier *= 1.02
198200 }
199201
200202 // Blood Fury
@@ -204,14 +206,17 @@ func applyRaceEffects(agent Agent) {
204206
205207 switch character .Class {
206208 case proto .Class_ClassMage :
207- spBonus = 584.5
209+ spBonus = 2257.0
208210 case proto .Class_ClassWarlock :
209- spBonus = 584.5
211+ spBonus = 2257.0
210212 case proto .Class_ClassShaman :
211- spBonus = 584.5
212- apBonus = 1169.0
213+ spBonus = 2257.0
214+ apBonus = 4514.0
215+ case proto .Class_ClassMonk :
216+ spBonus = 2257.0
217+ apBonus = 4514.0
213218 default :
214- apBonus = 1169 .0
219+ apBonus = 4514 .0
215220 }
216221
217222 buffStats := stats.Stats {stats .AttackPower : apBonus , stats .RangedAttackPower : apBonus , stats .SpellPower : spBonus }
@@ -227,10 +232,10 @@ func applyRaceEffects(agent Agent) {
227232 })
228233
229234 // Axe specialization
230- applyWeaponSpecialization (character , 3 * ExpertisePerQuarterPercentReduction ,
235+ applyWeaponSpecialization (character , 4 * ExpertisePerQuarterPercentReduction ,
231236 proto .WeaponType_WeaponTypeAxe , proto .WeaponType_WeaponTypeFist )
232237 case proto .Race_RaceTauren :
233- character .PseudoStats .ReducedNatureHitTakenChance + = 0.02
238+ character .PseudoStats .SchoolDamageTakenMultiplier [ stats . SchoolIndexNature ] * = 0.99
234239 character .AddStat (stats .Health , character .GetBaseStats ()[stats .Health ]* 0.05 )
235240 case proto .Race_RaceTroll :
236241 // Dead Eye: 1% Expertise with Guns, Bows or Crossbows.
@@ -285,14 +290,48 @@ func applyRaceEffects(agent Agent) {
285290 Type : CooldownTypeDPS ,
286291 })
287292 case proto .Race_RaceUndead :
288- character .PseudoStats .ReducedShadowHitTakenChance += 0.02
293+ character .PseudoStats .SchoolDamageTakenMultiplier [stats .SchoolIndexShadow ] *= 0.99
294+
295+ touchOfTheGraveSpell := character .RegisterSpell (SpellConfig {
296+ ActionID : ActionID {SpellID : 127802 },
297+ SpellSchool : SpellSchoolShadow ,
298+ ProcMask : ProcMaskSpellProc ,
299+ CritMultiplier : character .DefaultCritMultiplier (),
300+ ApplyEffects : func (sim * Simulation , target * Unit , spell * Spell ) {
301+ baseDamage := sim .Roll (CalcScalingSpellEffectVarianceMinMax (proto .Class_ClassUnknown , 8 , 0.15000000596 ))
302+ result := spell .CalcDamage (sim , target , baseDamage , spell .OutcomeMagicHit )
303+ healAmount := result .Damage * spell .Unit .PseudoStats .HealingTakenMultiplier
304+ spell .DealDamage (sim , result )
305+ result .Target = spell .Unit
306+ result .Damage = healAmount
307+ spell .DealHealing (sim , result )
308+ },
309+ })
310+
311+ MakeProcTriggerAura (& character .Unit , ProcTrigger {
312+ Name : "Touch of the Grave" ,
313+ ActionID : ActionID {SpellID : 5227 },
314+ Callback : CallbackOnSpellHitDealt | CallbackOnPeriodicDamageDealt ,
315+ ProcMask : ProcMaskSpellDamage | ProcMaskMelee ,
316+ Outcome : OutcomeLanded ,
317+ ProcChance : 0.2 ,
318+ ICD : time .Second * 15 ,
319+ Handler : func (sim * Simulation , spell * Spell , result * SpellResult ) {
320+ touchOfTheGraveSpell .Cast (sim , result .Target )
321+ },
322+ })
289323 case proto .Race_RaceWorgen :
324+ character .PseudoStats .SchoolDamageTakenMultiplier [stats .SchoolIndexNature ] *= 0.99
325+ character .PseudoStats .SchoolDamageTakenMultiplier [stats .SchoolIndexShadow ] *= 0.99
290326 character .AddStat (stats .PhysicalCritPercent , 1 )
291327 character .AddStat (stats .SpellCritPercent , 1 )
292328 case proto .Race_RaceGoblin :
293329 character .PseudoStats .MeleeSpeedMultiplier *= 1.01
294330 character .PseudoStats .RangedSpeedMultiplier *= 1.01
295331 character .PseudoStats .CastSpeedMultiplier *= 1.01
332+ case proto .Race_RaceAlliancePandaren :
333+ case proto .Race_RaceHordePandaren :
334+ //Epicurean in consumes.go
296335 }
297336}
298337
0 commit comments