Skip to content

Commit

Permalink
Merge pull request #153 from wowsims/balance-druid
Browse files Browse the repository at this point in the history
Balance druid Phase 2 Updates
  • Loading branch information
kayla-glick authored Feb 8, 2024
2 parents 929b2e7 + 2d9616a commit 6bb2877
Show file tree
Hide file tree
Showing 18 changed files with 355 additions and 276 deletions.
12 changes: 12 additions & 0 deletions sim/common/sod/item_sets/gnomeregan.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,18 @@ var ItemSetInsulatedLeather = core.NewItemSet(core.ItemSet{
},
})

var ItemSetInsulatedSorcerorLeather = core.NewItemSet(core.ItemSet{
Name: "Insulated Sorceror's Leathers",
Bonuses: map[int32]core.ApplyEffect{
2: func(agent core.Agent) {
c := agent.GetCharacter()
c.AddStat(stats.SpellPower, 16)
},
// TODO: Implement Feral set bonus
3: func(agent core.Agent) {},
},
})

///////////////////////////////////////////////////////////////////////////
// Mail
///////////////////////////////////////////////////////////////////////////
Expand Down
3 changes: 2 additions & 1 deletion sim/core/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,8 @@ func (env *Environment) setupAttackTables() {

if attacker.Type == PlayerUnit {
character := env.Raid.GetPlayerFromUnit(attacker).GetCharacter()
if character.Class == proto.Class_ClassMage || character.Class == proto.Class_ClassPriest || character.Class == proto.Class_ClassWarlock {
if character.Class == proto.Class_ClassMage || character.Class == proto.Class_ClassPriest || character.Class == proto.Class_ClassWarlock ||
character.Spec == proto.Spec_SpecBalanceDruid || character.Spec == proto.Spec_SpecElementalShaman {
ModNonMeleeAttackTable(attacker.AttackTables[idx], attacker, defender)
}
}
Expand Down
94 changes: 75 additions & 19 deletions sim/druid/balance/TestBalance.results
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ character_stats_results: {
final_stats: 132.44
final_stats: 140.14
final_stats: 113.74
final_stats: 110
final_stats: 119
final_stats: 0
final_stats: 0
final_stats: 0
Expand Down Expand Up @@ -48,66 +48,122 @@ character_stats_results: {
final_stats: 0
}
}
dps_results: {
key: "TestBalance-AllItems-BlackfathomElementalist'sHide"
value: {
dps: 32.59634
tps: 33.52338
}
}
dps_results: {
key: "TestBalance-AllItems-BlackfathomSlayer'sLeather"
value: {
dps: 27.74523
tps: 28.49407
}
}
dps_results: {
key: "TestBalance-AllItems-HyperconductiveMender'sMeditation"
value: {
dps: 17.1432
tps: 18.02404
}
}
dps_results: {
key: "TestBalance-AllItems-HyperconductiveWizard'sAttire"
value: {
dps: 17.10841
tps: 18.07505
}
}
dps_results: {
key: "TestBalance-AllItems-InsulatedLeathers"
value: {
dps: 13.74543
tps: 14.50747
}
}
dps_results: {
key: "TestBalance-AllItems-InsulatedSorceror'sLeathers"
value: {
dps: 16.85366
tps: 17.7873
}
}
dps_results: {
key: "TestBalance-AllItems-IrradiatedGarments"
value: {
dps: 19.37368
tps: 20.34032
}
}
dps_results: {
key: "TestBalance-AllItems-StormshroudArmor"
value: {
dps: 11.36908
tps: 12.09812
dps: 11.30751
tps: 12.03655
}
}
dps_results: {
key: "TestBalance-AllItems-TwilightInvoker'sVestments"
value: {
dps: 31.606
tps: 32.48024
}
}
dps_results: {
key: "TestBalance-Average-Default"
value: {
dps: 53.98941
tps: 54.91017
dps: 55.49145
tps: 56.41221
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-FullBuffs-Full Consumes-LongMultiTarget"
value: {
dps: 54.55232
tps: 72.96112
dps: 56.07227
tps: 74.48107
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-FullBuffs-Full Consumes-LongSingleTarget"
value: {
dps: 54.55232
tps: 55.47276
dps: 56.07227
tps: 56.99271
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-FullBuffs-Full Consumes-ShortSingleTarget"
value: {
dps: 58.66311
tps: 63.26531
dps: 60.14399
tps: 64.74619
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-NoBuffs-Full Consumes-LongMultiTarget"
value: {
dps: 51.14897
tps: 51.14897
dps: 52.66508
tps: 52.66508
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-NoBuffs-Full Consumes-LongSingleTarget"
value: {
dps: 51.14897
tps: 51.14897
dps: 52.66508
tps: 52.66508
}
}
dps_results: {
key: "TestBalance-Settings-Tauren-25-phase_1-Default-phase_1-NoBuffs-Full Consumes-ShortSingleTarget"
value: {
dps: 57.37988
tps: 57.37988
dps: 58.82808
tps: 58.82808
}
}
dps_results: {
key: "TestBalance-SwitchInFrontOfTarget-Default"
value: {
dps: 54.55232
tps: 55.47276
dps: 56.07227
tps: 56.99271
}
}
10 changes: 4 additions & 6 deletions sim/druid/balance/balance.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,11 @@ func NewBalanceDruid(character *core.Character, options *proto.Player) *BalanceD
moonkin.SelfBuffs.InnervateTarget = balanceOptions.Options.InnervateTarget
}

// moonkin.EnableEnergyBar(100.0)

// Enable Auto Attacks for this spec
// moonkin.EnableAutoAttacks(moonkin, core.AutoAttackOptions{
// MainHand: moonkin.GetCatWeapon(),
// AutoSwingMelee: true,
// })
moonkin.EnableAutoAttacks(moonkin, core.AutoAttackOptions{
MainHand: moonkin.WeaponFromMainHand(moonkin.DefaultMeleeCritMultiplier()),
AutoSwingMelee: true,
})

return moonkin
}
Expand Down
7 changes: 2 additions & 5 deletions sim/druid/druid.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ const (
var TalentTreeSizes = [3]int{16, 16, 15}

const (
SpellCode_DruidWrath int32 = iota
SpellCode_DruidNone int32 = iota
SpellCode_DruidWrath
SpellCode_DruidStarfire
SpellCode_DruidStarsurge
)
Expand Down Expand Up @@ -130,10 +131,6 @@ func (druid *Druid) AddRaidBuffs(raidBuffs *proto.RaidBuffs) {
}
}

func (druid *Druid) BalanceCritMultiplier() float64 {
return druid.SpellCritMultiplier(1, 0.2*float64(druid.Talents.Vengeance))
}

func (druid *Druid) NaturesGraceCastTime() func(spell *core.Spell) time.Duration {
return func(spell *core.Spell) time.Duration {
baseTime := core.TernaryDuration(druid.NaturesGraceProcAura.IsActive(),
Expand Down
7 changes: 3 additions & 4 deletions sim/druid/faerie_fire.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func (druid *Druid) registerFaerieFireSpell() {
flags := core.SpellFlagNone
formMask := Humanoid | Moonkin

if druid.InForm(Cat | Bear) && druid.Talents.FaerieFireFeral {
if druid.InForm(Cat|Bear) && druid.Talents.FaerieFireFeral {
actionID = core.ActionID{SpellID: map[int32]int32{
25: 16857,
40: 17390,
Expand All @@ -49,7 +49,7 @@ func (druid *Druid) registerFaerieFireSpell() {
Duration: time.Second * 6,
}
}
flags |= core.SpellFlagAPL
flags |= core.SpellFlagAPL | core.SpellFlagResetAttackSwing

druid.FaerieFireAuras = druid.NewEnemyAuraArray(func(target *core.Unit, level int32) *core.Aura {
return core.FaerieFireAura(target, level)
Expand All @@ -73,7 +73,6 @@ func (druid *Druid) registerFaerieFireSpell() {
ThreatMultiplier: 1,
FlatThreatBonus: flatThreatBonus,
DamageMultiplier: 1,
CritMultiplier: druid.BalanceCritMultiplier(),

ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) {
result := spell.CalcAndDealOutcome(sim, target, spell.OutcomeMagicHit)
Expand All @@ -100,5 +99,5 @@ func (druid *Druid) ShouldFaerieFire(sim *core.Simulation, target *core.Unit) bo
}

debuff := druid.FaerieFireAuras.Get(target)
return !debuff.IsActive() || debuff.RemainingDuration(sim) < time.Second * 4
return !debuff.IsActive() || debuff.RemainingDuration(sim) < time.Second*4
}
Loading

0 comments on commit 6bb2877

Please sign in to comment.