diff --git a/sim/core/debuffs.go b/sim/core/debuffs.go index bdf6a8c082..6d8e2ca4c6 100644 --- a/sim/core/debuffs.go +++ b/sim/core/debuffs.go @@ -233,7 +233,7 @@ func applyDebuffEffects(target *Unit, targetIdx int, debuffs *proto.Debuffs, rai if debuffs.DemoralizingShout != proto.TristateEffect_TristateEffectMissing { MakePermanent(DemoralizingShoutAura(target, 0, GetTristateValueInt32(debuffs.DemoralizingShout, 0, 5), level)) } - if debuffs.AtrophicPoison{ + if debuffs.AtrophicPoison { MakePermanent(AtrophicPoisonAura(target)) } diff --git a/sim/rogue/envenom.go b/sim/rogue/envenom.go index 6b3d255573..558e1b9fac 100644 --- a/sim/rogue/envenom.go +++ b/sim/rogue/envenom.go @@ -80,7 +80,7 @@ func (rogue *Rogue) registerEnvenom() { } else if rogue.usingDeadly { consumed = min(rogue.deadlyPoisonTick.Dot(target).GetStacks(), comboPoints) } - + baseDamage := baseAbilityDamage*float64(consumed)*0.8 + 0.072*float64(consumed)*spell.MeleeAttackPower() result := spell.CalcDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) diff --git a/sim/rogue/items_sets_pve.go b/sim/rogue/items_sets_pve.go index a9a090823f..7e925fce82 100644 --- a/sim/rogue/items_sets_pve.go +++ b/sim/rogue/items_sets_pve.go @@ -415,17 +415,16 @@ var ItemSetDeathdealersThrill = core.NewItemSet(core.ItemSet{ // Increases Saber Slash damage by 20% 2: func(agent core.Agent) { rogue := agent.(RogueAgent).GetRogue() - if !rogue.HasRune(proto.RogueRune_RuneSaberSlash) { - return - } rogue.RegisterAura(core.Aura{ Label: "S03 - Item - TAQ - Rogue - Damage 2P Bonus", OnInit: func(aura *core.Aura, sim *core.Simulation) { - rogue.SaberSlash.DamageMultiplier *= 1.20 - rogue.saberSlashTick.DamageMultiplier *= 1.20 + if rogue.HasRune(proto.RogueRune_RuneSaberSlash) { + rogue.SaberSlash.DamageMultiplier *= 1.20 + rogue.saberSlashTick.DamageMultiplier *= 1.20 + } rogue.SinisterStrike.DamageMultiplier *= 1.20 }, - }) + }) }, // Reduces the cooldown on Adrenaline Rush by 4 minutes. 4: func(agent core.Agent) { @@ -437,7 +436,7 @@ var ItemSetDeathdealersThrill = core.NewItemSet(core.ItemSet{ Label: "S03 - Item - TAQ - Rogue - Damage 4P Bonus", OnInit: func(aura *core.Aura, sim *core.Simulation) { rogue.AdrenalineRush.CD.Duration -= time.Second * 240 - }, + }, }) }, }, @@ -446,14 +445,14 @@ var ItemSetDeathdealersThrill = core.NewItemSet(core.ItemSet{ var ItemSetDeathdealersBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Deathdealer's Battlearmor", Bonuses: map[int32]core.ApplyEffect{ - // Your Main Gauche now strikes 1 additional nearby target and also causes your Sinister Strike to strike 1 additional nearby target. + // Your Main Gauche now strikes 1 additional nearby target and also causes your Sinister Strike to strike 1 additional nearby target. // These additional strikes are not duplicated by Blade Flurry. 2: func(agent core.Agent) { rogue := agent.(RogueAgent).GetRogue() if !rogue.HasRune(proto.RogueRune_RuneMainGauche) { return } - + if rogue.Env.GetNumTargets() == 1 { return } @@ -465,15 +464,15 @@ var ItemSetDeathdealersBattlearmor = core.NewItemSet(core.ItemSet{ SpellSchool: core.SpellSchoolPhysical, ProcMask: core.ProcMaskEmpty, Flags: core.SpellFlagMeleeMetrics | core.SpellFlagNoOnCastComplete | core.SpellFlagPassiveSpell, - + DamageMultiplier: 1, ThreatMultiplier: 1, - + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { spell.CalcAndDealDamage(sim, target, curDmg, spell.OutcomeAlwaysHit) }, - }) - + }) + cleaveAura := rogue.RegisterAura(core.Aura{ Label: "2P Cleave Buff", Duration: time.Second * 10, @@ -484,66 +483,66 @@ var ItemSetDeathdealersBattlearmor = core.NewItemSet(core.ItemSet{ cleaveHit.SpellMetrics[result.Target.UnitIndex].Casts-- } }, - }) + }) core.MakePermanent(rogue.RegisterAura(core.Aura{ - Label: "S03 - Item - TAQ - Rogue - Tank 2P Bonus", + Label: "S03 - Item - TAQ - Rogue - Tank 2P Bonus", OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if result.Landed() && spell.SpellCode == SpellCode_RogueMainGauche { cleaveAura.Activate(sim) - curDmg = result.Damage / result.ResistanceMultiplier - cleaveHit.Cast(sim, rogue.Env.NextTargetUnit(result.Target)) - cleaveHit.SpellMetrics[result.Target.UnitIndex].Casts-- + curDmg = result.Damage / result.ResistanceMultiplier + cleaveHit.Cast(sim, rogue.Env.NextTargetUnit(result.Target)) + cleaveHit.SpellMetrics[result.Target.UnitIndex].Casts-- } }, })) }, - // While active, your Main Gauche also causes you to heal for 10% of all damage done by Sinister Strike. + // While active, your Main Gauche also causes you to heal for 10% of all damage done by Sinister Strike. // Any excess healing becomes a Blood Barrier, absorbing damage up to 20% of your maximum health. // Shield appear to not be fully implemented in SoD commenting out until fixed 4: func(agent core.Agent) { -// rogue := agent.(RogueAgent).GetRogue() -// if !rogue.HasRune(proto.RogueRune_RuneMainGauche) { -// return -// } -// shieldSpell := rogue.GetOrRegisterSpell(core.SpellConfig{ -// ActionID: core.ActionID{SpellID: 1213761}, -// SpellSchool: core.SpellSchoolPhysical, -// ProcMask: core.ProcMaskSpellHealing, -// Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagPassiveSpell | core.SpellFlagHelpful, -// -// DamageMultiplier: 1, -// ThreatMultiplier: 1, -// -// Shield: core.ShieldConfig{ -// Aura: core.Aura{ -// Label: "Blood Barrier", -// Duration: time.Second * 15, -// }, -// }, -// }) -// -// activeAura := core.MakeProcTriggerAura(&rogue.Unit, core.ProcTrigger{ -// Name: "Main Gauche - Blood Barrier", -// ActionID: core.ActionID{SpellID: 1213762}, -// Callback: core.CallbackOnSpellHitDealt, -// Duration: time.Second * 15, -// Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { -// if result.Landed() && spell.SpellCode == SpellCode_RogueSinisterStrike{ -// shieldSpell.Shield(&rogue.Unit).Apply(sim, result.Damage*0.15) -// } -// }, -// }) -// -// core.MakePermanent(rogue.RegisterAura(core.Aura{ -// Label: "S03 - Item - TAQ - Rogue - Tank 4P Bonus", -// OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { -// if result.Landed() && spell.SpellCode == SpellCode_RogueMainGauche { -// activeAura.Activate(sim) -// } -// }, -// })) + // rogue := agent.(RogueAgent).GetRogue() + // if !rogue.HasRune(proto.RogueRune_RuneMainGauche) { + // return + // } + // shieldSpell := rogue.GetOrRegisterSpell(core.SpellConfig{ + // ActionID: core.ActionID{SpellID: 1213761}, + // SpellSchool: core.SpellSchoolPhysical, + // ProcMask: core.ProcMaskSpellHealing, + // Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagPassiveSpell | core.SpellFlagHelpful, + // + // DamageMultiplier: 1, + // ThreatMultiplier: 1, + // + // Shield: core.ShieldConfig{ + // Aura: core.Aura{ + // Label: "Blood Barrier", + // Duration: time.Second * 15, + // }, + // }, + // }) + // + // activeAura := core.MakeProcTriggerAura(&rogue.Unit, core.ProcTrigger{ + // Name: "Main Gauche - Blood Barrier", + // ActionID: core.ActionID{SpellID: 1213762}, + // Callback: core.CallbackOnSpellHitDealt, + // Duration: time.Second * 15, + // Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + // if result.Landed() && spell.SpellCode == SpellCode_RogueSinisterStrike{ + // shieldSpell.Shield(&rogue.Unit).Apply(sim, result.Damage*0.15) + // } + // }, + // }) + // + // core.MakePermanent(rogue.RegisterAura(core.Aura{ + // Label: "S03 - Item - TAQ - Rogue - Tank 4P Bonus", + // OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + // if result.Landed() && spell.SpellCode == SpellCode_RogueMainGauche { + // activeAura.Activate(sim) + // } + // }, + // })) }, }, }) diff --git a/sim/rogue/main_gauche.go b/sim/rogue/main_gauche.go index 1e0ef5c6e6..f37db9f418 100644 --- a/sim/rogue/main_gauche.go +++ b/sim/rogue/main_gauche.go @@ -45,11 +45,13 @@ func (rogue *Rogue) registerMainGaucheSpell() { if hasPKRune { rogue.PoisonedKnife.Cost.FlatModifier -= 20 rogue.PoisonedKnife.ThreatMultiplier *= 2.0 + rogue.PoisonedKnife.DamageMultiplier *= 1.5 } if hasQDRune { rogue.QuickDraw.Cost.FlatModifier -= 20 rogue.QuickDraw.ThreatMultiplier *= 2.0 + rogue.QuickDraw.DamageMultiplier *= 1.5 } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { @@ -61,11 +63,13 @@ func (rogue *Rogue) registerMainGaucheSpell() { if hasPKRune { rogue.PoisonedKnife.Cost.FlatModifier += 20 rogue.PoisonedKnife.ThreatMultiplier /= 2.0 + rogue.PoisonedKnife.DamageMultiplier /= 1.5 } if hasQDRune { rogue.QuickDraw.Cost.FlatModifier += 20 rogue.QuickDraw.ThreatMultiplier /= 2.0 + rogue.QuickDraw.DamageMultiplier /= 1.5 } }, }) @@ -104,7 +108,7 @@ func (rogue *Rogue) registerMainGaucheSpell() { baseDamage := spell.Unit.OHNormalizedWeaponDamage(sim, spell.MeleeAttackPower()) result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - + // Auras gained regardless of landed hit. mainGaucheAura.Activate(sim) mainGaucheSSAura.Activate(sim) diff --git a/sim/rogue/poisoned_knife.go b/sim/rogue/poisoned_knife.go index 315d420bba..ff03aa91b1 100644 --- a/sim/rogue/poisoned_knife.go +++ b/sim/rogue/poisoned_knife.go @@ -15,7 +15,7 @@ func (rogue *Rogue) registerPoisonedKnife() { poisonedKnifeMetrics := rogue.NewEnergyMetrics(core.ActionID{SpellID: 425012}) hasDeadlyBrew := rogue.HasRune(proto.RogueRune_RuneDeadlyBrew) hasJustAFleshWound := rogue.HasRune(proto.RogueRune_RuneJustAFleshWound) - + // Poisoned Knife /might/ scale with BonusWeaponDamage, if it's using https://www.wowhead.com/classic/spell=425013/poisoned-knife rogue.PoisonedKnife = rogue.RegisterSpell(core.SpellConfig{ SpellCode: SpellCode_RoguePoisonedKnife, @@ -59,14 +59,14 @@ func (rogue *Rogue) registerPoisonedKnife() { if result.Landed() { rogue.AddComboPoints(sim, 1, target, spell.ComboPointMetrics()) - + if rogue.usingOccult { numStacks = float64(rogue.occultPoisonTick.Dot(target).GetStacks()) } else if rogue.usingDeadly { numStacks = float64(rogue.deadlyPoisonTick.Dot(target).GetStacks()) } - - rogue.AddEnergy(sim, numStacks * 5, poisonedKnifeMetrics) + + rogue.AddEnergy(sim, numStacks*5, poisonedKnifeMetrics) // 100% application of OH poison (except for 1%? It can resist extremely rarely) switch rogue.Consumes.OffHandImbue { @@ -79,7 +79,7 @@ func (rogue *Rogue) registerPoisonedKnife() { case proto.WeaponImbue_OccultPoison: rogue.OccultPoison[ShivProc].Cast(sim, target) case proto.WeaponImbue_SebaciousPoison: - rogue.SebaciousPoison[ShivProc].Cast(sim, target) + rogue.SebaciousPoison[ShivProc].Cast(sim, target) // Add new alternative poisons as they are implemented default: if hasDeadlyBrew { diff --git a/sim/rogue/poisons.go b/sim/rogue/poisons.go index 007076c346..75fdaa47c4 100644 --- a/sim/rogue/poisons.go +++ b/sim/rogue/poisons.go @@ -6,7 +6,7 @@ import ( "github.com/wowsims/sod/sim/core" "github.com/wowsims/sod/sim/core/proto" -// "github.com/wowsims/sod/sim/core/stats" + // "github.com/wowsims/sod/sim/core/stats" ) /** @@ -20,7 +20,7 @@ Deadly Poison: 30% proc chance, 5 stacks 25: 36 damage, 2823 ID, 60 charges (Deadly Brew only) 40: 52 damage, 2824 ID, 75 charges 50: 80 damage, 11355 ID, 90 charges -60 R4: 108 damage, 11356 ID, 105 charges +60 R4: 108 damage, 11356 ID, 105 charges 60 R5: 136 damage, 25351 ID, 120 charges Wound Poison: 30% proc chance, 5 stacks @@ -51,10 +51,10 @@ const ( ) func (rogue *Rogue) GetInstantPoisonProcChance() float64 { - return (0.2 + rogue.improvedPoisons()) * (1 + rogue.instantPoisonProcChanceBonus) + rogue.additivePoisonBonusChance + return (0.2+rogue.improvedPoisons())*(1+rogue.instantPoisonProcChanceBonus) + rogue.additivePoisonBonusChance } -//Used for all 30% proc poisons (Sebacious and others) +// Used for all 30% proc poisons (Sebacious and others) func (rogue *Rogue) GetDeadlyPoisonProcChance() float64 { return 0.3 + rogue.improvedPoisons() + rogue.additivePoisonBonusChance } @@ -126,7 +126,6 @@ func (rogue *Rogue) applyDeadlyBrewDeadly() { rogue.usingDeadly = true } - rogue.RegisterAura(core.Aura{ Label: "Deadly Brew (Deadly)", Duration: core.NeverExpires, @@ -140,7 +139,7 @@ func (rogue *Rogue) applyDeadlyBrewDeadly() { if rogue.usingOccult { rogue.OccultPoison[DeadlyBrewProc].Cast(sim, result.Target) } else { - rogue.DeadlyPoison[DeadlyBrewProc].Cast(sim, result.Target) + rogue.DeadlyPoison[DeadlyBrewProc].Cast(sim, result.Target) } }, }) @@ -232,20 +231,20 @@ func (rogue *Rogue) applyOccultPoison() { rogue.usingOccult = true rogue.RegisterAura(core.Aura{ - Label: "Occult Poison Trigger", - Duration: core.NeverExpires, + Label: "Occult Poison Trigger", + Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(procMask) { - return - } - if sim.RandomFloat("Occult Poison") < rogue.GetDeadlyPoisonProcChance() { - rogue.OccultPoison[NormalProc].Cast(sim, result.Target) - } - }, - }) + aura.Activate(sim) + }, + OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if !result.Landed() || !spell.ProcMask.Matches(procMask) { + return + } + if sim.RandomFloat("Occult Poison") < rogue.GetDeadlyPoisonProcChance() { + rogue.OccultPoison[NormalProc].Cast(sim, result.Target) + } + }, + }) } // Apply Sebacious Poison to weapon and enable procs @@ -257,18 +256,18 @@ func (rogue *Rogue) applySebaciousPoison() { rogue.RegisterAura(core.Aura{ Label: "Sebacious Poison Trigger", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(procMask) { - return - } - if sim.RandomFloat("Sebacious Poison") < rogue.GetDeadlyPoisonProcChance() { - rogue.SebaciousPoison[NormalProc].Cast(sim, result.Target) - } - }, + Duration: core.NeverExpires, + OnReset: func(aura *core.Aura, sim *core.Simulation) { + aura.Activate(sim) + }, + OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if !result.Landed() || !spell.ProcMask.Matches(procMask) { + return + } + if sim.RandomFloat("Sebacious Poison") < rogue.GetDeadlyPoisonProcChance() { + rogue.SebaciousPoison[NormalProc].Cast(sim, result.Target) + } + }, }) } @@ -281,18 +280,18 @@ func (rogue *Rogue) applyAtrophicPoison() { rogue.RegisterAura(core.Aura{ Label: "Atrophic Poison Trigger", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(procMask) { - return - } - if sim.RandomFloat("Atrophic Poison") < rogue.GetDeadlyPoisonProcChance() { - rogue.AtrophicPoison[NormalProc].Cast(sim, result.Target) - } - }, + Duration: core.NeverExpires, + OnReset: func(aura *core.Aura, sim *core.Simulation) { + aura.Activate(sim) + }, + OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if !result.Landed() || !spell.ProcMask.Matches(procMask) { + return + } + if sim.RandomFloat("Atrophic Poison") < rogue.GetDeadlyPoisonProcChance() { + rogue.AtrophicPoison[NormalProc].Cast(sim, result.Target) + } + }, }) } @@ -305,18 +304,18 @@ func (rogue *Rogue) applyNumbingPoison() { rogue.RegisterAura(core.Aura{ Label: "Numbing Poison Trigger", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(procMask) { - return - } - if sim.RandomFloat("Numbing Poison") < rogue.GetDeadlyPoisonProcChance() { - rogue.NumbingPoison[NormalProc].Cast(sim, result.Target) - } - }, + Duration: core.NeverExpires, + OnReset: func(aura *core.Aura, sim *core.Simulation) { + aura.Activate(sim) + }, + OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if !result.Landed() || !spell.ProcMask.Matches(procMask) { + return + } + if sim.RandomFloat("Numbing Poison") < rogue.GetDeadlyPoisonProcChance() { + rogue.NumbingPoison[NormalProc].Cast(sim, result.Target) + } + }, }) } @@ -431,43 +430,43 @@ func (rogue *Rogue) registerOccultPoisonSpell() { hasDeadlyBrew := rogue.HasRune(proto.RogueRune_RuneDeadlyBrew) rogue.occultPoisonTick = rogue.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: spellID, Tag: 100}, - SpellSchool: core.SpellSchoolNature, - DefenseType: core.DefenseTypeMagic, - ProcMask: core.ProcMaskSpellDamageProc, - Flags: SpellFlagCarnage | core.SpellFlagPoison | SpellFlagRoguePoison, - - DamageMultiplier: rogue.getPoisonDamageMultiplier(), - ThreatMultiplier: 1, - - Dot: core.DotConfig{ - Aura: core.Aura{ - Label: "OccultPoison", - MaxStacks: 5, - Duration: time.Second * 12, - }, - NumberOfTicks: 4, - TickLength: time.Second * 3, - - OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, applyStack bool) { - if !applyStack { - return - } - - // only the first stack snapshots the multiplier - if dot.GetStacks() == 1 { - attackTable := dot.Spell.Unit.AttackTables[target.UnitIndex][dot.Spell.CastType] - dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(attackTable) - dot.SnapshotBaseDamage = 0 + ActionID: core.ActionID{SpellID: spellID, Tag: 100}, + SpellSchool: core.SpellSchoolNature, + DefenseType: core.DefenseTypeMagic, + ProcMask: core.ProcMaskSpellDamageProc, + Flags: SpellFlagCarnage | core.SpellFlagPoison | SpellFlagRoguePoison, + + DamageMultiplier: rogue.getPoisonDamageMultiplier(), + ThreatMultiplier: 1, + + Dot: core.DotConfig{ + Aura: core.Aura{ + Label: "OccultPoison", + MaxStacks: 5, + Duration: time.Second * 12, + }, + NumberOfTicks: 4, + TickLength: time.Second * 3, + + OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, applyStack bool) { + if !applyStack { + return } - // each stack snapshots the AP it was applied with - // 3.6% per stack for all ticks, or 0.9% per stack and tick - dot.SnapshotBaseDamage += baseDamageTick + core.TernaryFloat64(hasDeadlyBrew, 0.009*dot.Spell.MeleeAttackPower(), 0) + // only the first stack snapshots the multiplier + if dot.GetStacks() == 1 { + attackTable := dot.Spell.Unit.AttackTables[target.UnitIndex][dot.Spell.CastType] + dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(attackTable) + dot.SnapshotBaseDamage = 0 + } + + // each stack snapshots the AP it was applied with + // 3.6% per stack for all ticks, or 0.9% per stack and tick + dot.SnapshotBaseDamage += baseDamageTick + core.TernaryFloat64(hasDeadlyBrew, 0.009*dot.Spell.MeleeAttackPower(), 0) }, OnTick: func(sim *core.Simulation, target *core.Unit, dot *core.Dot) { - dot.CalcAndDealPeriodicSnapshotDamage(sim, target, dot.OutcomeTick) + dot.CalcAndDealPeriodicSnapshotDamage(sim, target, dot.OutcomeTick) }, }, }) @@ -483,7 +482,7 @@ func (rogue *Rogue) registerSebaciousPoisonSpell() { if rogue.Level < 60 { return } - + rogue.sebaciousPoisonDebuffAura = rogue.NewEnemyAuraArray(func(unit *core.Unit, level int32) *core.Aura { return core.SebaciousPoisonAura(unit, rogue.Talents.ImprovedExposeArmor, rogue.Level) }) @@ -499,7 +498,7 @@ func (rogue *Rogue) registerAtrophicPoisonSpell() { if rogue.Level < 60 { return } - + rogue.atrophicPoisonDebuffAura = rogue.NewEnemyAuraArray(func(unit *core.Unit, level int32) *core.Aura { return core.AtrophicPoisonAura(unit) }) @@ -515,7 +514,7 @@ func (rogue *Rogue) registerNumbingPoisonSpell() { if rogue.Level < 60 { return } - + rogue.numbingPoisonDebuffAura = rogue.NewEnemyAuraArray(func(unit *core.Unit, level int32) *core.Aura { return core.NumbingPoisonAura(unit) }) @@ -606,11 +605,11 @@ func (rogue *Rogue) makeDeadlyPoison(procSource PoisonProcSource) *core.Spell { } func (rogue *Rogue) makeOccultPoison(procSource PoisonProcSource) *core.Spell { - + rogue.occultPoisonDebuffAuras = rogue.NewEnemyAuraArray(func(unit *core.Unit, level int32) *core.Aura { return core.OccultPoisonDebuffAura(unit, rogue.Level) }) - + return rogue.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: rogue.occultPoisonTick.SpellID, Tag: int32(procSource)}, Flags: core.Ternary(procSource == DeadlyBrewProc, core.SpellFlagNone, SpellFlagDeadlyBrewed), @@ -679,7 +678,7 @@ func (rogue *Rogue) makeWoundPoison(procSource PoisonProcSource) *core.Spell { } func (rogue *Rogue) makeSebaciousPoison(procSource PoisonProcSource) *core.Spell { - + return rogue.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 439500, Tag: int32(procSource)}, SpellSchool: core.SpellSchoolNature, @@ -705,7 +704,7 @@ func (rogue *Rogue) makeSebaciousPoison(procSource PoisonProcSource) *core.Spell } func (rogue *Rogue) makeAtrophicPoison(procSource PoisonProcSource) *core.Spell { - + return rogue.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 439473, Tag: int32(procSource)}, SpellSchool: core.SpellSchoolNature, @@ -731,7 +730,7 @@ func (rogue *Rogue) makeAtrophicPoison(procSource PoisonProcSource) *core.Spell } func (rogue *Rogue) makeNumbingPoison(procSource PoisonProcSource) *core.Spell { - + return rogue.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 439472, Tag: int32(procSource)}, SpellSchool: core.SpellSchoolNature, @@ -754,4 +753,4 @@ func (rogue *Rogue) makeNumbingPoison(procSource PoisonProcSource) *core.Spell { rogue.numbingPoisonDebuffAura.Get(target).Activate(sim) }, }) -} \ No newline at end of file +} diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 6d7a7c9f47..f33a593f9e 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -94,7 +94,7 @@ type Rogue struct { ExposeArmor *core.Spell Rupture *core.Spell SliceAndDice *core.Spell - Finishers []*core.Spell + Finishers []*core.Spell Evasion *core.Spell BladeDance *core.Spell @@ -106,10 +106,10 @@ type Rogue struct { OccultPoison [3]*core.Spell occultPoisonTick *core.Spell SebaciousPoison [2]*core.Spell - AtrophicPoison [2]*core.Spell - NumbingPoison [2]*core.Spell - usingDeadly bool - usingOccult bool + AtrophicPoison [2]*core.Spell + NumbingPoison [2]*core.Spell + usingDeadly bool + usingOccult bool instantPoisonProcChanceBonus float64 additivePoisonBonusChance float64 @@ -134,11 +134,11 @@ type Rogue struct { HonorAmongThieves *core.Aura - woundPoisonDebuffAuras core.AuraArray - occultPoisonDebuffAuras core.AuraArray - sebaciousPoisonDebuffAura core.AuraArray - atrophicPoisonDebuffAura core.AuraArray - numbingPoisonDebuffAura core.AuraArray + woundPoisonDebuffAuras core.AuraArray + occultPoisonDebuffAuras core.AuraArray + sebaciousPoisonDebuffAura core.AuraArray + atrophicPoisonDebuffAura core.AuraArray + numbingPoisonDebuffAura core.AuraArray } func (rogue *Rogue) GetCharacter() *core.Character { diff --git a/sim/rogue/runes.go b/sim/rogue/runes.go index 039fdbb076..041e142911 100644 --- a/sim/rogue/runes.go +++ b/sim/rogue/runes.go @@ -204,7 +204,7 @@ func (rogue *Rogue) registerBladeDance() { } cachedBonusAP := 0.0 - cachedDefense := 0.0 + cachedDefense := 0.0 apProcAura := rogue.RegisterAura(core.Aura{ Label: "Defender's Resolve", @@ -293,14 +293,14 @@ func (rogue *Rogue) applyJustAFleshWound() { // Shuriken Toss and Poisoned Knife gain 50% threat mod // Implemented in the relevant files - + // -50% of Current non Evasion Dodge statDep := rogue.NewDynamicMultiplyStat(stats.Dodge, 0.5*core.DodgeRatingPerDodgeChance) // 1% Physical DR gained for 8 defense over max - + rogue.RegisterAura(core.Aura{ - Label: "Just a Flesh Wound", + Label: "Just a Flesh Wound", ActionID: core.ActionID{SpellID: int32(proto.RogueRune_RuneJustAFleshWound)}, Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { @@ -310,7 +310,7 @@ func (rogue *Rogue) applyJustAFleshWound() { rogue.EnableDynamicStatDep(sim, statDep) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { - rogue.DisableDynamicStatDep(sim,statDep) + rogue.DisableDynamicStatDep(sim, statDep) }, }) } diff --git a/sim/warlock/dps/TestAffliction.results b/sim/warlock/dps/TestAffliction.results index a616969814..b2aab4259e 100644 --- a/sim/warlock/dps/TestAffliction.results +++ b/sim/warlock/dps/TestAffliction.results @@ -447,9 +447,9 @@ dps_results: { dps_results: { key: "TestAffliction-Phase4-Lvl60-AllItems-DeathmistRaiment" value: { - dps: 646.7303 - tps: 454.0011 - hps: 270.79764 + dps: 646.72959 + tps: 454.02774 + hps: 270.81193 } } dps_results: { @@ -471,9 +471,9 @@ dps_results: { dps_results: { key: "TestAffliction-Phase4-Lvl60-AllItems-IronweaveBattlesuit" value: { - dps: 630.33445 - tps: 446.9489 - hps: 271.7413 + dps: 630.33261 + tps: 446.9369 + hps: 271.72929 } } dps_results: { diff --git a/sim/warlock/pet.go b/sim/warlock/pet.go index 6cf378074a..2423178857 100644 --- a/sim/warlock/pet.go +++ b/sim/warlock/pet.go @@ -145,6 +145,7 @@ func (wp *WarlockPet) Initialize() { } func (wp *WarlockPet) Reset(_ *core.Simulation) { + wp.manaPooling = false } func (wp *WarlockPet) ExecuteCustomRotation(sim *core.Simulation) { diff --git a/sim/warlock/tank/TestDestruction.results b/sim/warlock/tank/TestDestruction.results index 0fe7cfcd90..22f8815aea 100644 --- a/sim/warlock/tank/TestDestruction.results +++ b/sim/warlock/tank/TestDestruction.results @@ -519,9 +519,9 @@ dps_results: { dps_results: { key: "TestDestruction-Phase3-Lvl50-AllItems-DeathmistRaiment" value: { - dps: 321.19075 - tps: 199.75076 - hps: 161.55267 + dps: 321.21283 + tps: 199.73444 + hps: 161.53984 } } dps_results: {