diff --git a/sim/common/item_effects.go b/sim/common/item_effects.go index 5747983f8..34b3bd27a 100644 --- a/sim/common/item_effects.go +++ b/sim/common/item_effects.go @@ -146,6 +146,7 @@ const ( WrathOfCenarius = 21190 EyeOfMoam = 21473 ScarabBrooch = 21625 + BadgeOfTheSwarmguard = 21670 KalimdorsRevenge = 21679 DraconicInfusedEmblem = 22268 HeartOfWyrmthalak = 22321 @@ -3507,6 +3508,59 @@ func init() { }) }) + // https://www.wowhead.com/classic/item=21670/badge-of-the-swarmguard + // Use: Chance on melee or ranged attack to grant 200 armor pen stacks up to 6 times. Lasts 30 sec. (3 Min Cooldown) + core.NewItemEffect(BadgeOfTheSwarmguard, func(agent core.Agent) { + character := agent.GetCharacter() + + procAura := character.RegisterAura(core.Aura{ + Label: "Insight of the Qiraji", + ActionID: core.ActionID{SpellID: 26481}, + Duration: core.NeverExpires, + MaxStacks: 6, + OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { + character.AddStatDynamic(sim, stats.ArmorPenetration, 200*float64(newStacks-oldStacks)) + }, + }) + + auraLabel := "Badge of the Swarmguard" + actionID := core.ActionID{SpellID: 26480} + trinketAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + Name: auraLabel, + ActionID: actionID, + Duration: time.Second * 30, + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + ProcMask: core.ProcMaskMeleeOrRanged, + SpellFlagsExclude: core.SpellFlagSuppressEquipProcs, + PPM: 10.0, + Handler: func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { + procAura.Activate(sim) + procAura.AddStack(sim) + }, + }) + + spell := character.RegisterSpell(core.SpellConfig{ + ActionID: actionID, + Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagOffensiveEquipment, + + Cast: core.CastConfig{ + CD: core.Cooldown{ + Timer: character.NewTimer(), + Duration: time.Minute * 3, + }, + }, + ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { + trinketAura.Activate(sim) + }, + }) + + character.AddMajorCooldown(core.MajorCooldown{ + Spell: spell, + Type: core.CooldownTypeDPS, + }) + }) + core.AddEffectsToTest = true }