From ec8f55af4125c586d113bbf01f39bfffc0215cef Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 7 Dec 2024 21:47:43 +0100 Subject: [PATCH 001/127] Add ability to item swap trinkets --- proto/common.proto | 2 + sim/common/cata/stat_bonus_cds.go | 4 +- sim/common/shared/shared_utils.go | 48 ++++++++++----- sim/core/character.go | 7 ++- sim/core/item_swaps.go | 61 +++++++++++-------- sim/core/major_cooldown.go | 16 +++++ sim/shaman/weapon_imbues.go | 6 +- .../gear_picker/icon_item_swap_picker.tsx | 31 ++++++---- ui/core/proto_utils/database.ts | 4 +- ui/core/proto_utils/gear.ts | 4 +- ui/warlock/affliction/sim.ts | 18 +----- ui/warlock/demonology/sim.ts | 2 +- ui/warlock/destruction/sim.ts | 2 +- ui/warrior/fury/sim.ts | 1 + 14 files changed, 126 insertions(+), 80 deletions(-) diff --git a/proto/common.proto b/proto/common.proto index 06856c4016..84ff8554af 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -1040,6 +1040,8 @@ message ItemSwap { ItemSpec mh_item = 1; ItemSpec oh_item = 2; ItemSpec ranged_item = 3; + ItemSpec trinket_1_item = 4; + ItemSpec trinket_2_item = 5; } message Duration { diff --git a/sim/common/cata/stat_bonus_cds.go b/sim/common/cata/stat_bonus_cds.go index ac5917223c..f1f6dbdf4a 100644 --- a/sim/common/cata/stat_bonus_cds.go +++ b/sim/common/cata/stat_bonus_cds.go @@ -116,7 +116,7 @@ func init() { shared.NewParryActive(56406, 1425, time.Second*10, time.Minute) // Impetuous Query (Heroic) // RESI - shared.CreateDevensiveStatActive(62466, time.Second*10, time.Minute, stats.Stats{ // Mirror of Broken Images (Alliance) + shared.CreateDefensiveStatActive(62466, time.Second*10, time.Minute, stats.Stats{ // Mirror of Broken Images (Alliance) stats.ArcaneResistance: 400, stats.FrostResistance: 400, stats.FireResistance: 400, @@ -124,7 +124,7 @@ func init() { stats.NatureResistance: 400, }) - shared.CreateDevensiveStatActive(62471, time.Second*10, time.Minute, stats.Stats{ // Mirror of Broken Images (Horde) + shared.CreateDefensiveStatActive(62471, time.Second*10, time.Minute, stats.Stats{ // Mirror of Broken Images (Horde) stats.ArcaneResistance: 400, stats.FrostResistance: 400, stats.FireResistance: 400, diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 6bcde6ff62..52cf91fb68 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -172,60 +172,80 @@ func testFirstOnly(factory StatCDFactory) StatCDFactory { } } -func CreateOffensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats) { +func CreateOffensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats, otherEffects core.ApplyEffect) { testFirstOnly(func(itemID int32, duration time.Duration, cooldown time.Duration) { - core.NewSimpleStatOffensiveTrinketEffect(itemID, stats, duration, cooldown) + core.NewSimpleStatOffensiveTrinketEffectWithOtherEffects(itemID, stats, duration, cooldown, otherEffects) })(itemID, duration, cooldown) } -func CreateDevensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats) { +func CreateDefensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats) { testFirstOnly(func(itemID int32, duration time.Duration, cooldown time.Duration) { core.NewSimpleStatDefensiveTrinketEffect(itemID, stats, duration, cooldown) })(itemID, duration, cooldown) } +func applyItemSwapEffect(itemID int32, registerForItemSwap bool) core.ApplyEffect { + if !registerForItemSwap { + return nil + } + return func(agent core.Agent) { + character := agent.GetCharacter() + aura := character.GetAuraByID(core.ActionID{ItemID: itemID}) + if aura != nil { + character.ItemSwap.RegisterOnSwapItemForItemEffect(itemID, aura) + } + } +} + func NewStrengthActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Strength: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Strength: bonus}, otherEffects) } func NewAgilityActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Agility: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Agility: bonus}, otherEffects) } func NewIntActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Intellect: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Intellect: bonus}, otherEffects) } func NewSpiritActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Spirit: bonus}) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Spirit: bonus}, nil) } func NewCritActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.CritRating: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.CritRating: bonus}, otherEffects) } func NewHasteActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.HasteRating: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.HasteRating: bonus}, otherEffects) } func NewDodgeActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateDevensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.DodgeRating: bonus}) + CreateDefensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.DodgeRating: bonus}) } func NewSpellPowerActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.SpellPower: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.SpellPower: bonus}, otherEffects) } func NewHealthActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateDevensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Health: bonus}) + CreateDefensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Health: bonus}) } func NewParryActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateDevensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.ParryRating: bonus}) + CreateDefensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.ParryRating: bonus}) } func NewMasteryActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.MasteryRating: bonus}) + otherEffects := applyItemSwapEffect(itemID, true) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.MasteryRating: bonus}, otherEffects) } type StackingStatBonusCD struct { diff --git a/sim/core/character.go b/sim/core/character.go index 76a978d1a8..b630e75fe1 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -345,14 +345,17 @@ func (character *Character) applyItemEffects(agent Agent) { } if character.ItemSwap.IsEnabled() { - offset := int(proto.ItemSlot_ItemSlotMainHand) for i, item := range character.ItemSwap.unEquippedItems { + if applyItemEffect, ok := itemEffects[item.ID]; ok { + applyItemEffect(agent) + } + if applyEnchantEffect, ok := enchantEffects[item.Enchant.EffectID]; ok { applyEnchantEffect(agent) } if applyWeaponEffect, ok := weaponEffects[item.Enchant.EffectID]; ok { - applyWeaponEffect(agent, proto.ItemSlot(offset+i)) + applyWeaponEffect(agent, proto.ItemSlot(i)) } } } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 9b762a057e..5a0f528eb6 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -9,8 +9,6 @@ import ( type OnSwapItem func(*Simulation) -const offset = proto.ItemSlot_ItemSlotMainHand - type ItemSwap struct { character *Character onSwapCallbacks []OnSwapItem @@ -23,28 +21,31 @@ type ItemSwap struct { slots []proto.ItemSlot // Holds items that are currently not equipped - unEquippedItems [3]Item + unEquippedItems []Item swapped bool } -/* -TODO All the extra parameters here and the code in multiple places for handling the Weapon struct is really messy, - - we'll need to figure out something cleaner as this will be quite error-prone -*/ +/** + * TODO All the extra parameters here and the code in multiple places for handling the Weapon struct is really messy, + * we'll need to figure out something cleaner as this will be quite error-prone +**/ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMultiplier float64, ohCritMultiplier float64, rangedCritMultiplier float64) { var slots []proto.ItemSlot hasMhSwap := itemSwap.MhItem != nil && itemSwap.MhItem.Id != 0 hasOhSwap := itemSwap.OhItem != nil && itemSwap.OhItem.Id != 0 hasRangedSwap := itemSwap.RangedItem != nil && itemSwap.RangedItem.Id != 0 - - swapItems := [3]Item{ - toItem(itemSwap.MhItem), - toItem(itemSwap.OhItem), - toItem(itemSwap.RangedItem), + hasTrinket1Swap := itemSwap.Trinket_1Item != nil && itemSwap.Trinket_1Item.Id != 0 + hasTrinket2Swap := itemSwap.Trinket_2Item != nil && itemSwap.Trinket_2Item.Id != 0 + + swapItems := []Item{ + proto.ItemSlot_ItemSlotMainHand: toItem(itemSwap.MhItem), + proto.ItemSlot_ItemSlotOffHand: toItem(itemSwap.OhItem), + proto.ItemSlot_ItemSlotRanged: toItem(itemSwap.RangedItem), + proto.ItemSlot_ItemSlotTrinket1: toItem(itemSwap.Trinket_1Item), + proto.ItemSlot_ItemSlotTrinket2: toItem(itemSwap.Trinket_2Item), } - has2H := swapItems[0].HandType == proto.HandType_HandTypeTwoHand + has2H := swapItems[proto.ItemSlot_ItemSlotMainHand].HandType == proto.HandType_HandTypeTwoHand hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() @@ -58,6 +59,12 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti if hasRangedSwap { slots = append(slots, proto.ItemSlot_ItemSlotRanged) } + if hasTrinket1Swap { + slots = append(slots, proto.ItemSlot_ItemSlotTrinket1) + } + if hasTrinket2Swap { + slots = append(slots, proto.ItemSlot_ItemSlotTrinket2) + } if len(slots) == 0 { return @@ -112,13 +119,13 @@ func (swap *ItemSwap) RegisterOnSwapItemUpdateProcMaskWithPPMManager(procMask Pr func (swap *ItemSwap) RegisterOnSwapItemForItemEffect(itemID int32, aura *Aura) { character := swap.character character.RegisterOnItemSwap(func(sim *Simulation) { - procMask := character.GetProcMaskForItem(itemID) - - if procMask == ProcMaskUnknown { - aura.Deactivate(sim) - } else { - aura.Activate(sim) + if swap.IsSwapped() { + spell := character.GetSpell(ActionID{ItemID: itemID}) + if spell != nil && spell.CD.Duration != 0 { + spell.CD.Set(spell.CD.Duration) + } } + aura.Deactivate(sim) }) } @@ -144,18 +151,18 @@ func (swap *ItemSwap) IsSwapped() bool { return swap.swapped } -func (swap *ItemSwap) GetItem(slot proto.ItemSlot) *Item { - if slot-offset < 0 { +func (swap *ItemSwap) GetUnequippedItem(slot proto.ItemSlot) *Item { + if slot < 0 { panic("Not able to swap Item " + slot.String() + " not supported") } - return &swap.unEquippedItems[slot-offset] + return &swap.unEquippedItems[slot] } func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { newStats := stats.Stats{} for _, slot := range slots { oldItemStats := swap.getItemStats(swap.character.Equipment[slot]) - newItemStats := swap.getItemStats(*swap.GetItem(slot)) + newItemStats := swap.getItemStats(*swap.GetUnequippedItem(slot)) newStats = newStats.Add(newItemStats.Subtract(oldItemStats)) } @@ -171,7 +178,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { meleeWeaponSwapped := false newStats := stats.Stats{} - has2H := swap.GetItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand + has2H := swap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand for _, slot := range slots { //will swap both on the MainHand Slot for 2H. if slot == proto.ItemSlot_ItemSlotOffHand && has2H { @@ -209,7 +216,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool) (bool, stats.Stats) { oldItem := swap.character.Equipment[slot] - newItem := swap.GetItem(slot) + newItem := swap.GetUnequippedItem(slot) swap.character.Equipment[slot] = *newItem oldItemStats := swap.getItemStats(oldItem) @@ -222,7 +229,7 @@ func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool) (bool, stats.Sta newStats = newStats.Add(ohStats) } - swap.unEquippedItems[slot-offset] = oldItem + swap.unEquippedItems[slot] = oldItem swap.swapWeapon(slot) return true, newStats diff --git a/sim/core/major_cooldown.go b/sim/core/major_cooldown.go index 7d143bac2c..fd59b5e1df 100644 --- a/sim/core/major_cooldown.go +++ b/sim/core/major_cooldown.go @@ -399,6 +399,22 @@ func MakeTemporaryStatsOnUseCDRegistration(auraLabel string, tempStats stats.Sta if sharedCDFunc != nil { localConfig.Cast.SharedCD = sharedCDFunc(character) } + if character.ItemSwap.IsEnabled() && localConfig.ActionID.ItemID != 0 { + originalCastCondition := localConfig.ExtraCastCondition + localConfig.ExtraCastCondition = func(sim *Simulation, unit *Unit) bool { + isEquipped := false + for _, slot := range character.ItemSwap.slots { + isEquipped = localConfig.ActionID.IsItemAction(character.Equipment[slot].ID) + if isEquipped { + break + } + } + if originalCastCondition != nil { + return isEquipped && originalCastCondition(sim, unit) + } + return isEquipped + } + } RegisterTemporaryStatsOnUseCD(character, auraLabel, tempStats, duration, localConfig) } } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index e079385023..9c27880dda 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -160,7 +160,7 @@ func (shaman *Shaman) ApplyFlametongueImbueToItem(item *core.Item) { return } - if shaman.ItemSwap.IsEnabled() && (shaman.ItemSwap.GetItem(proto.ItemSlot_ItemSlotMainHand).TempEnchant == int32(enchantID) || shaman.ItemSwap.GetItem(proto.ItemSlot_ItemSlotOffHand).TempEnchant == int32(enchantID)) { + if shaman.ItemSwap.IsEnabled() && (shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).TempEnchant == int32(enchantID) || shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotOffHand).TempEnchant == int32(enchantID)) { item.TempEnchant = int32(enchantID) return } @@ -189,11 +189,11 @@ func (shaman *Shaman) ApplyFlametongueImbue(procMask core.ProcMask) { func (shaman *Shaman) ApplyFlametongueImbueSwap(procMask core.ProcMask) { if procMask.Matches(core.ProcMaskMeleeMH) && shaman.ItemSwap.IsEnabled() { - shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetItem(proto.ItemSlot_ItemSlotMainHand)) + shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand)) } if procMask.Matches(core.ProcMaskMeleeOH) && shaman.ItemSwap.IsEnabled() { - shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetItem(proto.ItemSlot_ItemSlotOffHand)) + shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotOffHand)) } } diff --git a/ui/core/components/gear_picker/icon_item_swap_picker.tsx b/ui/core/components/gear_picker/icon_item_swap_picker.tsx index e5dcc3e834..dce30bd214 100644 --- a/ui/core/components/gear_picker/icon_item_swap_picker.tsx +++ b/ui/core/components/gear_picker/icon_item_swap_picker.tsx @@ -1,3 +1,5 @@ +import { ref } from 'tsx-vanilla'; + import { Player } from '../../player'; import { ItemSlot } from '../../proto/common'; import { EquippedItem } from '../../proto_utils/equipped_item'; @@ -20,14 +22,17 @@ export default class IconItemSwapPicker extends Component { this.player = player; this.slot = slot; - this.iconAnchor = document.createElement('a'); - this.iconAnchor.classList.add('icon-picker-button'); - this.iconAnchor.target = '_blank'; - this.rootElem.prepend(this.iconAnchor); + const iconAnchorRef = ref(); + const socketsContainerRef = ref(); + + this.rootElem.prepend( + +
+ , + ); - this.socketsContainerElem = document.createElement('div'); - this.socketsContainerElem.classList.add('item-picker-sockets-container'); - this.iconAnchor.appendChild(this.socketsContainerElem); + this.iconAnchor = iconAnchorRef.value!; + this.socketsContainerElem = socketsContainerRef.value!; const selectorModal = new SelectorModal(simUI.rootElem, simUI, this.player); @@ -47,17 +52,17 @@ export default class IconItemSwapPicker extends Component { this.iconAnchor.style.backgroundImage = `url('${getEmptySlotIconUrl(this.slot)}')`; this.iconAnchor.removeAttribute('data-wowhead'); this.iconAnchor.href = '#'; - this.socketsContainerElem.innerText = ''; + this.socketsContainerElem.replaceChildren(); if (newItem) { - this.iconAnchor.classList.add('active'); - newItem.asActionId().fillAndSet(this.iconAnchor, true, true); this.player.setWowheadData(newItem, this.iconAnchor); - newItem.allSocketColors().forEach((socketColor, gemIdx) => { - this.socketsContainerElem.appendChild(createGemContainer(socketColor, newItem.gems[gemIdx], gemIdx)); - }); + this.socketsContainerElem.replaceChildren( + <>{newItem.allSocketColors().map((socketColor, gemIdx) => createGemContainer(socketColor, newItem.gems[gemIdx], gemIdx))}, + ); + + this.iconAnchor.classList.add('active'); } else { this.iconAnchor.classList.remove('active'); } diff --git a/ui/core/proto_utils/database.ts b/ui/core/proto_utils/database.ts index 19fea76223..b4c79d6bde 100644 --- a/ui/core/proto_utils/database.ts +++ b/ui/core/proto_utils/database.ts @@ -167,7 +167,7 @@ export class Database { } getAvailableReforges(item: Item): ReforgeStat[] { - return Array.from(this.reforgeStats.values()).filter(reforgeStat => (item.stats[reforgeStat.fromStat] > 0) && (item.stats[reforgeStat.toStat] == 0)); + return Array.from(this.reforgeStats.values()).filter(reforgeStat => item.stats[reforgeStat.fromStat] > 0 && item.stats[reforgeStat.toStat] == 0); } getEnchants(slot: ItemSlot): Array { @@ -259,6 +259,8 @@ export class Database { [ItemSlot.ItemSlotMainHand]: itemSwap.mhItem ? this.lookupItemSpec(itemSwap.mhItem) : null, [ItemSlot.ItemSlotOffHand]: itemSwap.ohItem ? this.lookupItemSpec(itemSwap.ohItem) : null, [ItemSlot.ItemSlotRanged]: itemSwap.rangedItem ? this.lookupItemSpec(itemSwap.rangedItem) : null, + [ItemSlot.ItemSlotTrinket1]: itemSwap.trinket1Item ? this.lookupItemSpec(itemSwap.trinket1Item) : null, + [ItemSlot.ItemSlotTrinket2]: itemSwap.trinket2Item ? this.lookupItemSpec(itemSwap.trinket2Item) : null, }); } diff --git a/ui/core/proto_utils/gear.ts b/ui/core/proto_utils/gear.ts index 7deeab94ed..5279314240 100644 --- a/ui/core/proto_utils/gear.ts +++ b/ui/core/proto_utils/gear.ts @@ -395,7 +395,7 @@ export class ItemSwapGear extends BaseGear { } getItemSlots(): ItemSlot[] { - return [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged]; + return [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2]; } withEquippedItem(newSlot: ItemSlot, newItem: EquippedItem | null, canDualWield2H: boolean): ItemSwapGear { @@ -407,6 +407,8 @@ export class ItemSwapGear extends BaseGear { mhItem: this.gear[ItemSlot.ItemSlotMainHand]?.asSpec(), ohItem: this.gear[ItemSlot.ItemSlotOffHand]?.asSpec(), rangedItem: this.gear[ItemSlot.ItemSlotRanged]?.asSpec(), + trinket1Item: this.gear[ItemSlot.ItemSlotTrinket1]?.asSpec(), + trinket2Item: this.gear[ItemSlot.ItemSlotTrinket2]?.asSpec(), }); } } diff --git a/ui/warlock/affliction/sim.ts b/ui/warlock/affliction/sim.ts index 87e52054a6..58f91c9637 100644 --- a/ui/warlock/affliction/sim.ts +++ b/ui/warlock/affliction/sim.ts @@ -24,20 +24,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecAfflictionWarlock, { epReferenceStat: Stat.StatSpellPower, // Which stats to display in the Character Stats section, at the bottom of the left-hand sidebar. displayStats: UnitStat.createDisplayStatArray( - [ - Stat.StatHealth, - Stat.StatMana, - Stat.StatStamina, - Stat.StatIntellect, - Stat.StatSpellPower, - Stat.StatMasteryRating, - Stat.StatMP5, - ], - [ - PseudoStat.PseudoStatSpellHitPercent, - PseudoStat.PseudoStatSpellCritPercent, - PseudoStat.PseudoStatSpellHastePercent, - ], + [Stat.StatHealth, Stat.StatMana, Stat.StatStamina, Stat.StatIntellect, Stat.StatSpellPower, Stat.StatMasteryRating, Stat.StatMP5], + [PseudoStat.PseudoStatSpellHitPercent, PseudoStat.PseudoStatSpellCritPercent, PseudoStat.PseudoStatSpellHastePercent], ), defaults: { @@ -118,7 +106,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecAfflictionWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged], + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warlock/demonology/sim.ts b/ui/warlock/demonology/sim.ts index 186be7c516..3e4787af77 100644 --- a/ui/warlock/demonology/sim.ts +++ b/ui/warlock/demonology/sim.ts @@ -113,7 +113,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDemonologyWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged], + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warlock/destruction/sim.ts b/ui/warlock/destruction/sim.ts index 933186b2a0..ad86afc43d 100644 --- a/ui/warlock/destruction/sim.ts +++ b/ui/warlock/destruction/sim.ts @@ -84,7 +84,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDestructionWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged], + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warrior/fury/sim.ts b/ui/warrior/fury/sim.ts index 9ddb589b6a..533c62a971 100644 --- a/ui/warrior/fury/sim.ts +++ b/ui/warrior/fury/sim.ts @@ -124,6 +124,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { FuryInputs.PrepullMastery, ], }, + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, From f22aed1b164bb9b54e8324c4a771cde877cdf185 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 7 Dec 2024 21:53:38 +0100 Subject: [PATCH 002/127] Fix typo --- sim/core/major_cooldown.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sim/core/major_cooldown.go b/sim/core/major_cooldown.go index fd59b5e1df..58849d4a17 100644 --- a/sim/core/major_cooldown.go +++ b/sim/core/major_cooldown.go @@ -400,7 +400,7 @@ func MakeTemporaryStatsOnUseCDRegistration(auraLabel string, tempStats stats.Sta localConfig.Cast.SharedCD = sharedCDFunc(character) } if character.ItemSwap.IsEnabled() && localConfig.ActionID.ItemID != 0 { - originalCastCondition := localConfig.ExtraCastCondition + originalExtraCastCondition := localConfig.ExtraCastCondition localConfig.ExtraCastCondition = func(sim *Simulation, unit *Unit) bool { isEquipped := false for _, slot := range character.ItemSwap.slots { @@ -409,8 +409,8 @@ func MakeTemporaryStatsOnUseCDRegistration(auraLabel string, tempStats stats.Sta break } } - if originalCastCondition != nil { - return isEquipped && originalCastCondition(sim, unit) + if originalExtraCastCondition != nil { + return isEquipped && originalExtraCastCondition(sim, unit) } return isEquipped } From c2b01dd10e361310c337ebccc1750b500a0ba8a4 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sun, 8 Dec 2024 23:07:14 +0100 Subject: [PATCH 003/127] Progress PR merge Polynomix --- proto/common.proto | 1 + sim/common/cata/enchant_effects.go | 25 ++++-- sim/common/shared/shared_utils.go | 41 +++------ sim/common/wotlk/enchant_effects.go | 4 +- sim/common/wotlk/other_effects.go | 2 +- sim/core/bulksim.go | 2 +- sim/core/cast.go | 12 +++ sim/core/character.go | 15 ++-- sim/core/consumes.go | 5 ++ sim/core/database.go | 9 +- sim/core/flags.go | 1 + sim/core/item_effects.go | 13 ++- sim/core/item_swaps.go | 115 ++++++++++++++++++++------ sim/core/major_cooldown.go | 1 + sim/core/spell.go | 7 ++ sim/death_knight/runeforging.go | 3 +- sim/rogue/ambush.go | 3 +- sim/rogue/rogue.go | 2 +- sim/rogue/subtlety/hemorrhage.go | 2 +- sim/shaman/enhancement/enhancement.go | 2 +- sim/shaman/weapon_imbues.go | 2 +- ui/core/proto_utils/database.ts | 1 + ui/core/proto_utils/gear.ts | 1 + ui/warlock/affliction/sim.ts | 9 +- ui/warlock/demonology/sim.ts | 9 +- ui/warlock/destruction/sim.ts | 9 +- ui/warrior/fury/sim.ts | 9 +- 27 files changed, 213 insertions(+), 92 deletions(-) diff --git a/proto/common.proto b/proto/common.proto index 84ff8554af..b41a3fe7bf 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -1042,6 +1042,7 @@ message ItemSwap { ItemSpec ranged_item = 3; ItemSpec trinket_1_item = 4; ItemSpec trinket_2_item = 5; + ItemSpec hands_item = 6; } message Duration { diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index fe418954ac..ae4cea1216 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -44,7 +44,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4066, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4066, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -261,7 +261,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4084, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4084, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent @@ -288,7 +288,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4097, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4097, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk @@ -365,7 +365,7 @@ func init() { time.Second*15, ) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Lightweave Embroidery Cata", ActionID: core.ActionID{SpellID: 75171}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, @@ -377,6 +377,8 @@ func init() { statAura.Activate(sim) }, }) + + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4115, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) // Enchant: 4116, Spell: 75175 - Darkglow Embroidery @@ -390,7 +392,7 @@ func init() { time.Second*15, ) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Darkglow Embroidery Cata", ActionID: core.ActionID{SpellID: 75174}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, @@ -402,6 +404,8 @@ func init() { statAura.Activate(sim) }, }) + + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4116, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) // Enchant: 4118, Spell: 75178 - Swordguard Embroidery @@ -415,7 +419,7 @@ func init() { time.Second*15, ) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Swordguard Embroidery Cataa", ActionID: core.ActionID{SpellID: 75176}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, @@ -427,6 +431,8 @@ func init() { statAura.Activate(sim) }, }) + + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4118, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) // Enchant: 4175, Spell: 81932, Item: 59594 - Gnomish X-Ray Scope @@ -452,6 +458,7 @@ func init() { statAura.Activate(sim) }, }) + }) // Enchant: 4176, Item: 59595 - R19 Threatfinder @@ -498,7 +505,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4215, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4215, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4216, Spell: 92437, Item: 55056 - Pyrium Shield Spike @@ -531,7 +538,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4216, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4216, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4267, Spell: 99623, Item: 70139 - Flintlocke's Woodchucker @@ -574,6 +581,6 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(4267, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4267, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}) }) } diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 52cf91fb68..2b06dfb9dc 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -148,6 +148,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c procAura.Icd = triggerAura.Icd character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(config.ID, triggerAura, core.EligibleSlotsForItem(core.GetItemByID(config.ID), false)) }) } @@ -172,9 +173,9 @@ func testFirstOnly(factory StatCDFactory) StatCDFactory { } } -func CreateOffensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats, otherEffects core.ApplyEffect) { +func CreateOffensiveStatActive(itemID int32, duration time.Duration, cooldown time.Duration, stats stats.Stats) { testFirstOnly(func(itemID int32, duration time.Duration, cooldown time.Duration) { - core.NewSimpleStatOffensiveTrinketEffectWithOtherEffects(itemID, stats, duration, cooldown, otherEffects) + core.NewSimpleStatOffensiveTrinketEffect(itemID, stats, duration, cooldown) })(itemID, duration, cooldown) } @@ -184,46 +185,28 @@ func CreateDefensiveStatActive(itemID int32, duration time.Duration, cooldown ti })(itemID, duration, cooldown) } -func applyItemSwapEffect(itemID int32, registerForItemSwap bool) core.ApplyEffect { - if !registerForItemSwap { - return nil - } - return func(agent core.Agent) { - character := agent.GetCharacter() - aura := character.GetAuraByID(core.ActionID{ItemID: itemID}) - if aura != nil { - character.ItemSwap.RegisterOnSwapItemForItemEffect(itemID, aura) - } - } -} - func NewStrengthActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Strength: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Strength: bonus}) } func NewAgilityActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Agility: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Agility: bonus}) } func NewIntActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Intellect: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Intellect: bonus}) } func NewSpiritActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Spirit: bonus}, nil) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.Spirit: bonus}) } func NewCritActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.CritRating: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.CritRating: bonus}) } func NewHasteActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.HasteRating: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.HasteRating: bonus}) } func NewDodgeActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { @@ -231,8 +214,7 @@ func NewDodgeActive(itemID int32, bonus float64, duration time.Duration, cooldow } func NewSpellPowerActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.SpellPower: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.SpellPower: bonus}) } func NewHealthActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { @@ -244,8 +226,7 @@ func NewParryActive(itemID int32, bonus float64, duration time.Duration, cooldow } func NewMasteryActive(itemID int32, bonus float64, duration time.Duration, cooldown time.Duration) { - otherEffects := applyItemSwapEffect(itemID, true) - CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.MasteryRating: bonus}, otherEffects) + CreateOffensiveStatActive(itemID, duration, cooldown, stats.Stats{stats.MasteryRating: bonus}) } type StackingStatBonusCD struct { diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 9bb5c40465..3fe6c31eda 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -144,7 +144,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(3748, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3748, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) }) core.NewEnchantEffect(3247, func(agent core.Agent) { @@ -259,7 +259,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(3790, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3790, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) core.AddWeaponEffect(3843, func(agent core.Agent, _ proto.ItemSlot) { diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 613f198d03..587dedf810 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -999,7 +999,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForItemEffect(itemID, aura) + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(itemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) }) diff --git a/sim/core/bulksim.go b/sim/core/bulksim.go index 1b16ef8e61..8e2d2c4125 100644 --- a/sim/core/bulksim.go +++ b/sim/core/bulksim.go @@ -407,7 +407,7 @@ func buildCombos(signals simsignals.Signals, baseSettings *proto.RaidSimRequest, if !ok { return nil, 0, fmt.Errorf("unknown item with id %d in bulk settings", is.Id) } - for _, slot := range eligibleSlotsForItem(item, isFuryWarrior) { + for _, slot := range EligibleSlotsForItem(&item, isFuryWarrior) { distinctItemSlotCombos = append(distinctItemSlotCombos, &itemWithSlot{ Item: is, Slot: slot, diff --git a/sim/core/cast.go b/sim/core/cast.go index 24d11a3693..d6d096b1b7 100644 --- a/sim/core/cast.go +++ b/sim/core/cast.go @@ -99,6 +99,12 @@ func (spell *Spell) makeCastFunc(config CastConfig) CastSuccessFunc { } } + if spell.Flags != 0 { + if spell.Flags.Matches(SpellFlagSwapped) { + return spell.castFailureHelper(sim, "spell belong to a swapped item") + } + } + if spell.ExtraCastCondition != nil { if !spell.ExtraCastCondition(sim, target) { return spell.castFailureHelper(sim, "extra spell condition") @@ -225,6 +231,12 @@ func (spell *Spell) makeCastFunc(config CastConfig) CastSuccessFunc { func (spell *Spell) makeCastFuncSimple() CastSuccessFunc { return func(sim *Simulation, target *Unit) bool { + if spell.Flags != 0 { + if spell.Flags.Matches(SpellFlagSwapped) { + return spell.castFailureHelper(sim, "spell belong to a swapped item") + } + } + if spell.ExtraCastCondition != nil { if !spell.ExtraCastCondition(sim, target) { return spell.castFailureHelper(sim, "extra spell condition") diff --git a/sim/core/character.go b/sim/core/character.go index b630e75fe1..44446cdafb 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -517,6 +517,8 @@ func (character *Character) reset(sim *Simulation, agent Agent) { agent.Reset(sim) + character.ItemSwap.reset(sim) + for _, petAgent := range character.PetAgents { petAgent.GetPet().reset(sim, petAgent) } @@ -596,14 +598,14 @@ func (character *Character) HasRangedWeapon() bool { } func (character *Character) GetProcMaskForEnchant(effectID int32) ProcMask { - return character.getProcMaskFor(func(weapon *Item) bool { - return weapon.Enchant.EffectID == effectID + return character.getProcMaskFor(func(item *Item) bool { + return item.Enchant.EffectID == effectID }) } func (character *Character) GetProcMaskForItem(itemID int32) ProcMask { - return character.getProcMaskFor(func(weapon *Item) bool { - return weapon.ID == itemID + return character.getProcMaskFor(func(item *Item) bool { + return item.ID == itemID }) } @@ -619,7 +621,7 @@ func (character *Character) GetProcMaskForTypesAndHand(twohand bool, weaponTypes }) } -func (character *Character) getProcMaskFor(pred func(weapon *Item) bool) ProcMask { +func (character *Character) getProcMaskFor(pred func(item *Item) bool) ProcMask { mask := ProcMaskUnknown if pred(character.MainHand()) { mask |= ProcMaskMeleeMH @@ -627,6 +629,9 @@ func (character *Character) getProcMaskFor(pred func(weapon *Item) bool) ProcMas if pred(character.OffHand()) { mask |= ProcMaskMeleeOH } + if pred(character.Trinket1()) || pred(character.Trinket2()) { + mask |= ProcMaskProc + } return mask } diff --git a/sim/core/consumes.go b/sim/core/consumes.go index b09a9971ca..cb140df14e 100644 --- a/sim/core/consumes.go +++ b/sim/core/consumes.go @@ -974,6 +974,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeDPS, }) + character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsQuickflipDeflectionPlates: // Enchant: 4180, Spell: 82176 - Quickflip Deflection Plates statAura := character.NewTemporaryStatsAura( @@ -1005,6 +1006,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeSurvival, }) + character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsTazikShocker: // Enchant: 4181, Spell: 82180 - Tazik Shocker spell := character.GetOrRegisterSpell(SpellConfig{ @@ -1030,6 +1032,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { spell.CalcAndDealDamage(sim, unit, sim.Roll(4320, 961), spell.OutcomeMagicHitAndCrit) }, }) + character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) character.AddMajorCooldown(MajorCooldown{ Spell: spell, @@ -1066,6 +1069,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeSurvival, }) + character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsZ50ManaGulper: // Enchant: 4183, Spell: 82186 - Z50 Mana Gulper manaMetric := character.NewManaMetrics(ActionID{SpellID: 82186}) @@ -1101,5 +1105,6 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeMana, }) + character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) } } diff --git a/sim/core/database.go b/sim/core/database.go index c1cfb42002..e8d61dadf3 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -487,6 +487,13 @@ func ItemEquipmentStats(item Item) stats.Stats { return equipStats } +func GetItemByID(id int32) *Item { + if item, ok := ItemsByID[id]; ok { + return &item + } + return nil +} + func ItemTypeToSlot(it proto.ItemType) proto.ItemSlot { switch it { case proto.ItemType_ItemTypeHead: @@ -540,7 +547,7 @@ var itemTypeToSlotsMap = map[proto.ItemType][]proto.ItemSlot{ // ItemType_ItemTypeWeapon is excluded intentionally - the slot cannot be decided based on type alone for weapons. } -func eligibleSlotsForItem(item Item, isFuryWarrior bool) []proto.ItemSlot { +func EligibleSlotsForItem(item *Item, isFuryWarrior bool) []proto.ItemSlot { if slots, ok := itemTypeToSlotsMap[item.Type]; ok { return slots } diff --git a/sim/core/flags.go b/sim/core/flags.go index 19c1cbe7ae..c4b8b42fb6 100644 --- a/sim/core/flags.go +++ b/sim/core/flags.go @@ -204,6 +204,7 @@ const ( SpellFlagCanCastWhileMoving // Allows the cast to be casted while moving SpellFlagPassiveSpell // Indicates this spell is applied/cast as a result of another spell SpellFlagSupressDoTApply // If present this spell will not apply dots (Used for DTR dot supression) + SpellFlagSwapped // Indicates that this spell is not useable because it is from a currently swapped item // Used to let agents categorize their spells. SpellFlagAgentReserved1 diff --git a/sim/core/item_effects.go b/sim/core/item_effects.go index f7578a358e..a89272abbd 100644 --- a/sim/core/item_effects.go +++ b/sim/core/item_effects.go @@ -113,14 +113,13 @@ func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration tim sharedCDFunc, ) - if otherEffects == nil { - NewItemEffect(itemID, registerCD) - } else { - NewItemEffect(itemID, func(agent Agent) { - registerCD(agent) + NewItemEffect(itemID, func(agent Agent) { + registerCD(agent) + if otherEffects != nil { otherEffects(agent) - }) - } + } + agent.GetCharacter().ItemSwap.RegisterOnSwapItemForItemOnUseEffect(itemID, EligibleSlotsForItem(GetItemByID(itemID), false)) + }) } // No shared CD diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 5a0f528eb6..943c1cf49b 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -7,11 +7,13 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -type OnSwapItem func(*Simulation) +type OnSwapItem func(*Simulation, proto.ItemSlot) + +const numberOfGearPieces = int32(17) type ItemSwap struct { character *Character - onSwapCallbacks []OnSwapItem + onSwapCallbacks [numberOfGearPieces][]OnSwapItem mhCritMultiplier float64 ohCritMultiplier float64 @@ -31,6 +33,7 @@ type ItemSwap struct { **/ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMultiplier float64, ohCritMultiplier float64, rangedCritMultiplier float64) { var slots []proto.ItemSlot + hasHandsSwap := itemSwap.HandsItem != nil && itemSwap.HandsItem.Id != 0 hasMhSwap := itemSwap.MhItem != nil && itemSwap.MhItem.Id != 0 hasOhSwap := itemSwap.OhItem != nil && itemSwap.OhItem.Id != 0 hasRangedSwap := itemSwap.RangedItem != nil && itemSwap.RangedItem.Id != 0 @@ -38,6 +41,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti hasTrinket2Swap := itemSwap.Trinket_2Item != nil && itemSwap.Trinket_2Item.Id != 0 swapItems := []Item{ + proto.ItemSlot_ItemSlotHands: toItem(itemSwap.HandsItem), proto.ItemSlot_ItemSlotMainHand: toItem(itemSwap.MhItem), proto.ItemSlot_ItemSlotOffHand: toItem(itemSwap.OhItem), proto.ItemSlot_ItemSlotRanged: toItem(itemSwap.RangedItem), @@ -49,6 +53,9 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() + if hasHandsSwap { + slots = append(slots, proto.ItemSlot_ItemSlotHands) + } // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH if hasMhSwap || (hasOhSwap && hasMh) { slots = append(slots, proto.ItemSlot_ItemSlotMainHand) @@ -84,18 +91,21 @@ func (swap *ItemSwap) initialize(character *Character) { swap.character = character } -func (character *Character) RegisterOnItemSwap(callback OnSwapItem) { +func (character *Character) RegisterOnItemSwap(slots []proto.ItemSlot, callback OnSwapItem) { if character == nil || !character.ItemSwap.IsEnabled() { return } - character.ItemSwap.onSwapCallbacks = append(character.ItemSwap.onSwapCallbacks, callback) + var slot proto.ItemSlot + for _, slot = range slots { + character.ItemSwap.onSwapCallbacks[slot] = append(character.ItemSwap.onSwapCallbacks[slot], callback) + } } // Helper for handling Effects that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura) { character := swap.character - character.RegisterOnItemSwap(func(sim *Simulation) { + character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) @@ -110,29 +120,33 @@ func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, // Helper for handling procs that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterOnSwapItemUpdateProcMaskWithPPMManager(procMask ProcMask, ppm float64, ppmm *PPMManager) { character := swap.character - character.RegisterOnItemSwap(func(sim *Simulation) { + character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) } -// Helper for handling Effects that use the itemID to toggle the aura on and off -func (swap *ItemSwap) RegisterOnSwapItemForItemEffect(itemID int32, aura *Aura) { +// Helper for handling Item Effects that use the itemID to toggle the aura on and off +func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character - character.RegisterOnItemSwap(func(sim *Simulation) { - if swap.IsSwapped() { - spell := character.GetSpell(ActionID{ItemID: itemID}) - if spell != nil && spell.CD.Duration != 0 { - spell.CD.Set(spell.CD.Duration) + character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { + procMask := character.GetProcMaskForItem(itemID) + if procMask == ProcMaskUnknown { + aura.Deactivate(sim) + } else { + if !aura.IsActive() { + aura.Activate(sim) + if aura.Icd != nil { + aura.Icd.Use(sim) + } } } - aura.Deactivate(sim) }) } -// Helper for handling Effects that use the effectID to toggle the aura on and off -func (swap *ItemSwap) RegisterOnSwapItemForEnchantEffect(effectID int32, aura *Aura) { +// Helper for handling Enchant Effects that use the effectID to toggle the aura on and off +func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character - character.RegisterOnItemSwap(func(sim *Simulation) { + character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) if procMask == ProcMaskUnknown { @@ -143,6 +157,44 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantEffect(effectID int32, aura *A }) } +// Helper for handling Item On Use effects to set a 30s cd on the related spell. +func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots []proto.ItemSlot) { + character := swap.character + character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { + idEquipped := character.Equipment[slot].ID + spell := swap.character.GetSpell(ActionID{ItemID: itemID}) + if spell != nil { + aura := character.GetAuraByID(spell.ActionID) + if aura.IsActive() { + aura.Deactivate(sim) + } + if idEquipped != itemID { + spell.Flags |= SpellFlagSwapped + return + } + spell.Flags &= ^SpellFlagSwapped + idSwapped := swap.unEquippedItems[slot].ID + if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { + spell.CD.Set(sim.CurrentTime + time.Second*30) + } + } + }) +} + +// Helper for handling Enchant On Use effects to set a 30s cd on the related spell. +func (swap *ItemSwap) RegisterOnSwapItemForEnchantOnUseEffect(spell *Spell, slots []proto.ItemSlot) { + character := swap.character + character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { + if spell != nil { + idEquipped := character.Equipment[slot].ID + idSwapped := swap.unEquippedItems[slot].ID + if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { + spell.CD.Set(sim.CurrentTime + time.Second*30) + } + } + }) +} + func (swap *ItemSwap) IsEnabled() bool { return swap.character != nil && len(swap.slots) > 0 } @@ -179,7 +231,12 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { meleeWeaponSwapped := false newStats := stats.Stats{} has2H := swap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand + isPrepull := sim.CurrentTime < 0 for _, slot := range slots { + if !isPrepull && slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotOffHand { + continue + } + //will swap both on the MainHand Slot for 2H. if slot == proto.ItemSlot_ItemSlotOffHand && has2H { continue @@ -188,6 +245,10 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { if ok, swapStats := swap.swapItem(slot, has2H); ok { newStats = newStats.Add(swapStats) meleeWeaponSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || meleeWeaponSwapped + + for _, onSwap := range swap.onSwapCallbacks[slot] { + onSwap(sim, slot) + } } } @@ -197,10 +258,6 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { character.AddStatsDynamic(sim, newStats) - for _, onSwap := range swap.onSwapCallbacks { - onSwap(sim) - } - if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped && sim.CurrentTime > 0 { character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) } @@ -263,23 +320,29 @@ func (swap *ItemSwap) swapWeapon(slot proto.ItemSlot) { } func (swap *ItemSwap) reset(sim *Simulation) { - if !swap.IsEnabled() || !swap.IsSwapped() { + if !swap.IsEnabled() { return } - swap.SwapItems(sim, swap.slots) + if swap.IsSwapped() { + swap.SwapItems(sim, swap.slots) + } + + for _, slot := range swap.slots { + for _, onSwap := range swap.onSwapCallbacks[slot] { + onSwap(sim, slot) + } + } } func (swap *ItemSwap) doneIteration(sim *Simulation) { if !swap.IsEnabled() || !swap.IsSwapped() { return } - - swap.SwapItems(sim, swap.slots) } func toItem(itemSpec *proto.ItemSpec) Item { - if itemSpec == nil { + if itemSpec == nil || itemSpec.Id == 0 { return Item{} } diff --git a/sim/core/major_cooldown.go b/sim/core/major_cooldown.go index 58849d4a17..e2f8f1909a 100644 --- a/sim/core/major_cooldown.go +++ b/sim/core/major_cooldown.go @@ -379,6 +379,7 @@ func RegisterTemporaryStatsOnUseCD(character *Character, auraLabel string, tempS config.ApplyEffects = func(sim *Simulation, _ *Unit, _ *Spell) { aura.Activate(sim) } + spell := character.RegisterSpell(config) character.AddMajorCooldown(MajorCooldown{ diff --git a/sim/core/spell.go b/sim/core/spell.go index 3f07a4ea24..053f304ced 100644 --- a/sim/core/spell.go +++ b/sim/core/spell.go @@ -502,6 +502,13 @@ func (spell *Spell) CanCast(sim *Simulation, target *Unit) bool { return false } + if spell.Flags.Matches(SpellFlagSwapped) { + //if sim.Log != nil { + // sim.Log("Cant cast because of item swap") + //} + return false + } + if spell.ExtraCastCondition != nil && !spell.ExtraCastCondition(sim, target) { //if sim.Log != nil { // sim.Log("Cant cast because of extra condition") diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 6fbb7f975e..51627c1dda 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -4,6 +4,7 @@ import ( "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -255,6 +256,6 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantEffect(3370, aura) + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3370, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) } diff --git a/sim/rogue/ambush.go b/sim/rogue/ambush.go index 8ec5af7d8b..ce11856654 100644 --- a/sim/rogue/ambush.go +++ b/sim/rogue/ambush.go @@ -4,6 +4,7 @@ import ( "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" ) func (rogue *Rogue) registerAmbushSpell() { @@ -56,7 +57,7 @@ func (rogue *Rogue) registerAmbushSpell() { }, }) - rogue.RegisterOnItemSwap(func(s *core.Simulation) { + rogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { // Recalculate Ambush's multiplier in case the MH weapon changed. rogue.Ambush.DamageMultiplier = core.TernaryFloat64(rogue.HasDagger(core.MainHand), 2.86, 1.97) }) diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 82e0e9a122..1134cb607e 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -204,7 +204,7 @@ func (rogue *Rogue) Initialize() { rogue.T12ToTLastBuff = 3 // re-configure poisons when performing an item swap - rogue.RegisterOnItemSwap(func(sim *core.Simulation) { + rogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { if !rogue.Options.ApplyPoisonsManually { if rogue.MainHand() == nil || rogue.OffHand() == nil { return diff --git a/sim/rogue/subtlety/hemorrhage.go b/sim/rogue/subtlety/hemorrhage.go index 26a2c1335d..7471eb2949 100644 --- a/sim/rogue/subtlety/hemorrhage.go +++ b/sim/rogue/subtlety/hemorrhage.go @@ -100,7 +100,7 @@ func (subRogue *SubtletyRogue) registerHemorrhageSpell() { RelatedAuras: []core.AuraArray{hemoAuras}, }) - subRogue.RegisterOnItemSwap(func(s *core.Simulation) { + subRogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { // Recalculate Hemorrhage's multiplier in case the MH weapon changed. subRogue.Hemorrhage.DamageMultiplier = core.TernaryFloat64(subRogue.HasDagger(core.MainHand), 3.25, 2.24) }) diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index 264ce5bbdc..fe4aa2f7a1 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -103,7 +103,7 @@ func (enh *EnhancementShaman) Initialize() { if enh.ItemSwap.IsEnabled() { enh.ApplyFlametongueImbueSwap(enh.getImbueProcMask(proto.ShamanImbue_FlametongueWeapon)) - enh.RegisterOnItemSwap(func(_ *core.Simulation) { + enh.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(_ *core.Simulation, slot proto.ItemSlot) { enh.ApplySyncType(proto.ShamanSyncType_Auto) }) } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 9c27880dda..7349fb6e46 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -9,7 +9,7 @@ import ( ) func (shaman *Shaman) RegisterOnItemSwapWithImbue(effectID int32, procMask *core.ProcMask, aura *core.Aura) { - shaman.RegisterOnItemSwap(func(sim *core.Simulation) { + shaman.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { mask := core.ProcMaskUnknown if shaman.MainHand().TempEnchant == effectID { mask |= core.ProcMaskMeleeMH diff --git a/ui/core/proto_utils/database.ts b/ui/core/proto_utils/database.ts index b4c79d6bde..e288769c33 100644 --- a/ui/core/proto_utils/database.ts +++ b/ui/core/proto_utils/database.ts @@ -256,6 +256,7 @@ export class Database { lookupItemSwap(itemSwap: ItemSwap): ItemSwapGear { return new ItemSwapGear({ + [ItemSlot.ItemSlotHands]: itemSwap.handsItem ? this.lookupItemSpec(itemSwap.handsItem) : null, [ItemSlot.ItemSlotMainHand]: itemSwap.mhItem ? this.lookupItemSpec(itemSwap.mhItem) : null, [ItemSlot.ItemSlotOffHand]: itemSwap.ohItem ? this.lookupItemSpec(itemSwap.ohItem) : null, [ItemSlot.ItemSlotRanged]: itemSwap.rangedItem ? this.lookupItemSpec(itemSwap.rangedItem) : null, diff --git a/ui/core/proto_utils/gear.ts b/ui/core/proto_utils/gear.ts index 5279314240..9477199cb9 100644 --- a/ui/core/proto_utils/gear.ts +++ b/ui/core/proto_utils/gear.ts @@ -404,6 +404,7 @@ export class ItemSwapGear extends BaseGear { toProto(): ItemSwap { return ItemSwap.create({ + handsItem: this.gear[ItemSlot.ItemSlotHands]?.asSpec(), mhItem: this.gear[ItemSlot.ItemSlotMainHand]?.asSpec(), ohItem: this.gear[ItemSlot.ItemSlotOffHand]?.asSpec(), rangedItem: this.gear[ItemSlot.ItemSlotRanged]?.asSpec(), diff --git a/ui/warlock/affliction/sim.ts b/ui/warlock/affliction/sim.ts index 58f91c9637..5d75f72b69 100644 --- a/ui/warlock/affliction/sim.ts +++ b/ui/warlock/affliction/sim.ts @@ -106,7 +106,14 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecAfflictionWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotRanged, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warlock/demonology/sim.ts b/ui/warlock/demonology/sim.ts index 3e4787af77..a7a0040e2b 100644 --- a/ui/warlock/demonology/sim.ts +++ b/ui/warlock/demonology/sim.ts @@ -113,7 +113,14 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDemonologyWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotRanged, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warlock/destruction/sim.ts b/ui/warlock/destruction/sim.ts index ad86afc43d..c90276c0f9 100644 --- a/ui/warlock/destruction/sim.ts +++ b/ui/warlock/destruction/sim.ts @@ -84,7 +84,14 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDestructionWarlock, { OtherInputs.ChannelClipDelay, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotRanged, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, diff --git a/ui/warrior/fury/sim.ts b/ui/warrior/fury/sim.ts index 533c62a971..8af2ce3f7f 100644 --- a/ui/warrior/fury/sim.ts +++ b/ui/warrior/fury/sim.ts @@ -124,7 +124,14 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { FuryInputs.PrepullMastery, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotRanged, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, From 9d1a40ad9ed38491f9c7402b8b32e1e0c96f5bd0 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 9 Dec 2024 23:11:17 +0100 Subject: [PATCH 004/127] Add full prepull equipment --- proto/common.proto | 7 +- sim/core/character.go | 30 +++++++- sim/core/item_swaps.go | 77 ++++++++++++------- ui/core/components/input.tsx | 11 +-- .../components/pickers/item_swap_picker.tsx | 68 ++++++++-------- ui/core/proto_utils/database.ts | 18 +++-- ui/core/proto_utils/gear.ts | 9 +-- .../core/components/_item_swap_picker.scss | 15 +++- ui/shaman/elemental/sim.ts | 3 +- ui/warlock/demonology/sim.ts | 15 +++- ui/warrior/fury/sim.ts | 15 +++- 11 files changed, 172 insertions(+), 96 deletions(-) diff --git a/proto/common.proto b/proto/common.proto index b41a3fe7bf..ddb0e7871c 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -1037,12 +1037,7 @@ message CustomSpell { } message ItemSwap { - ItemSpec mh_item = 1; - ItemSpec oh_item = 2; - ItemSpec ranged_item = 3; - ItemSpec trinket_1_item = 4; - ItemSpec trinket_2_item = 5; - ItemSpec hands_item = 6; + repeated ItemSpec items = 1; } message Duration { diff --git a/sim/core/character.go b/sim/core/character.go index 44446cdafb..907829eb42 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -777,7 +777,33 @@ func (character *Character) MeetsArmorSpecializationRequirement(armorType proto. func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { hasBonus := character.MeetsArmorSpecializationRequirement(armorType) + dep := character.NewDynamicMultiplyStat(primaryStat, 1.05) if hasBonus { - character.MultiplyStat(primaryStat, 1.05) - } + character.StatDependencyManager.EnableDynamicStatDep(dep) + } + character.RegisterOnItemSwap([]proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotWrist, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotWaist, + proto.ItemSlot_ItemSlotLegs, + proto.ItemSlot_ItemSlotFeet, + }, + func(sim *Simulation, slot proto.ItemSlot) { + hasBonus := character.MeetsArmorSpecializationRequirement(armorType) + if hasBonus { + character.EnableDynamicStatDep(sim, dep) + } else { + character.DisableDynamicStatDep(sim, dep) + } + }) } + +// func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { +// hasBonus := character.MeetsArmorSpecializationRequirement(armorType) +// if hasBonus { +// character.MultiplyStat(primaryStat, 1.05) +// } +// } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 943c1cf49b..567694ce4f 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -23,7 +23,7 @@ type ItemSwap struct { slots []proto.ItemSlot // Holds items that are currently not equipped - unEquippedItems []Item + unEquippedItems Equipment swapped bool } @@ -33,45 +33,70 @@ type ItemSwap struct { **/ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMultiplier float64, ohCritMultiplier float64, rangedCritMultiplier float64) { var slots []proto.ItemSlot - hasHandsSwap := itemSwap.HandsItem != nil && itemSwap.HandsItem.Id != 0 - hasMhSwap := itemSwap.MhItem != nil && itemSwap.MhItem.Id != 0 - hasOhSwap := itemSwap.OhItem != nil && itemSwap.OhItem.Id != 0 - hasRangedSwap := itemSwap.RangedItem != nil && itemSwap.RangedItem.Id != 0 - hasTrinket1Swap := itemSwap.Trinket_1Item != nil && itemSwap.Trinket_1Item.Id != 0 - hasTrinket2Swap := itemSwap.Trinket_2Item != nil && itemSwap.Trinket_2Item.Id != 0 - - swapItems := []Item{ - proto.ItemSlot_ItemSlotHands: toItem(itemSwap.HandsItem), - proto.ItemSlot_ItemSlotMainHand: toItem(itemSwap.MhItem), - proto.ItemSlot_ItemSlotOffHand: toItem(itemSwap.OhItem), - proto.ItemSlot_ItemSlotRanged: toItem(itemSwap.RangedItem), - proto.ItemSlot_ItemSlotTrinket1: toItem(itemSwap.Trinket_1Item), - proto.ItemSlot_ItemSlotTrinket2: toItem(itemSwap.Trinket_2Item), + var hasItemSwap [numberOfGearPieces]bool + var swapItems Equipment + + for slot, item := range itemSwap.Items { + hasItemSwap[slot] = item != nil && item.Id != 0 + swapItems[slot] = toItem(item) } has2H := swapItems[proto.ItemSlot_ItemSlotMainHand].HandType == proto.HandType_HandTypeTwoHand hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() - if hasHandsSwap { + if hasItemSwap[proto.ItemSlot_ItemSlotHead] { + slots = append(slots, proto.ItemSlot_ItemSlotHead) + } + if hasItemSwap[proto.ItemSlot_ItemSlotNeck] { + slots = append(slots, proto.ItemSlot_ItemSlotNeck) + } + if hasItemSwap[proto.ItemSlot_ItemSlotShoulder] { + slots = append(slots, proto.ItemSlot_ItemSlotShoulder) + } + if hasItemSwap[proto.ItemSlot_ItemSlotBack] { + slots = append(slots, proto.ItemSlot_ItemSlotBack) + } + if hasItemSwap[proto.ItemSlot_ItemSlotChest] { + slots = append(slots, proto.ItemSlot_ItemSlotChest) + } + if hasItemSwap[proto.ItemSlot_ItemSlotWrist] { + slots = append(slots, proto.ItemSlot_ItemSlotWrist) + } + if hasItemSwap[proto.ItemSlot_ItemSlotHands] { slots = append(slots, proto.ItemSlot_ItemSlotHands) } - // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - if hasMhSwap || (hasOhSwap && hasMh) { - slots = append(slots, proto.ItemSlot_ItemSlotMainHand) + if hasItemSwap[proto.ItemSlot_ItemSlotWaist] { + slots = append(slots, proto.ItemSlot_ItemSlotWaist) } - if hasOhSwap || (has2H && hasOh) { - slots = append(slots, proto.ItemSlot_ItemSlotOffHand) + if hasItemSwap[proto.ItemSlot_ItemSlotLegs] { + slots = append(slots, proto.ItemSlot_ItemSlotLegs) } - if hasRangedSwap { - slots = append(slots, proto.ItemSlot_ItemSlotRanged) + if hasItemSwap[proto.ItemSlot_ItemSlotFeet] { + slots = append(slots, proto.ItemSlot_ItemSlotFeet) + } + if hasItemSwap[proto.ItemSlot_ItemSlotFinger1] { + slots = append(slots, proto.ItemSlot_ItemSlotFinger1) + } + if hasItemSwap[proto.ItemSlot_ItemSlotFinger2] { + slots = append(slots, proto.ItemSlot_ItemSlotFinger2) } - if hasTrinket1Swap { + if hasItemSwap[proto.ItemSlot_ItemSlotTrinket1] { slots = append(slots, proto.ItemSlot_ItemSlotTrinket1) } - if hasTrinket2Swap { + if hasItemSwap[proto.ItemSlot_ItemSlotTrinket2] { slots = append(slots, proto.ItemSlot_ItemSlotTrinket2) } + // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH + if hasItemSwap[proto.ItemSlot_ItemSlotMainHand] || (hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh) { + slots = append(slots, proto.ItemSlot_ItemSlotMainHand) + } + if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] || (has2H && hasOh) { + slots = append(slots, proto.ItemSlot_ItemSlotOffHand) + } + if hasItemSwap[proto.ItemSlot_ItemSlotRanged] { + slots = append(slots, proto.ItemSlot_ItemSlotRanged) + } if len(slots) == 0 { return @@ -335,7 +360,7 @@ func (swap *ItemSwap) reset(sim *Simulation) { } } -func (swap *ItemSwap) doneIteration(sim *Simulation) { +func (swap *ItemSwap) doneIteration(_ *Simulation) { if !swap.IsEnabled() || !swap.IsSwapped() { return } diff --git a/ui/core/components/input.tsx b/ui/core/components/input.tsx index a9dc027bad..c85f44bd44 100644 --- a/ui/core/components/input.tsx +++ b/ui/core/components/input.tsx @@ -1,3 +1,4 @@ +import clsx, { ClassValue } from 'clsx'; import tippy, { Content as TippyContent } from 'tippy.js'; import { EventID, TypedEvent } from '../typed_event.js'; @@ -98,11 +99,7 @@ export abstract class Input extends Component { } private buildDescription(config: InputConfig): JSX.Element { - return ( -
- {config.description} -
- ); + return
{config.description}
; } update() { @@ -164,7 +161,7 @@ export abstract class Input extends Component { this.inputConfig.setValue(eventID, this.modObject, newValue); } - static newGroupContainer(): HTMLElement { - return (
) as HTMLElement; + static newGroupContainer(className?: ClassValue): HTMLElement { + return (
) as HTMLElement; } } diff --git a/ui/core/components/pickers/item_swap_picker.tsx b/ui/core/components/pickers/item_swap_picker.tsx index b486624917..82c28257a1 100644 --- a/ui/core/components/pickers/item_swap_picker.tsx +++ b/ui/core/components/pickers/item_swap_picker.tsx @@ -1,4 +1,5 @@ import tippy from 'tippy.js'; +import { ref } from 'tsx-vanilla'; import { Player } from '../../player.js'; import { ItemSlot, Spec } from '../../proto/common.js'; @@ -35,51 +36,52 @@ export class ItemSwapPicker extends Component { changedEvent: (player: Player) => player.itemSwapChangeEmitter, }); - const swapPickerContainer = document.createElement('div'); - swapPickerContainer.classList.add('input-root', 'input-inline'); - this.rootElem.appendChild(swapPickerContainer); - - let noteElem: Element; - if (config.note) { - noteElem = this.rootElem.appendChild(

{config.note}

); - } + const swapPickerContainerRef = ref(); + const swapButtonRef = ref(); + const noteRef = ref(); + const itemSwapContainer = Input.newGroupContainer('icon-group'); + this.rootElem.appendChild( + <> +
+ + + {itemSwapContainer} +
+ {config.note && ( +

+ {config.note} +

+ )} + , + ); const toggleEnabled = () => { if (!player.getEnableItemSwap()) { - swapPickerContainer.classList.add('hide'); - noteElem?.classList.add('hide'); + swapPickerContainerRef.value?.classList.add('hide'); + noteRef.value?.classList.add('hide'); } else { - swapPickerContainer.classList.remove('hide'); - noteElem?.classList.remove('hide'); + swapPickerContainerRef.value?.classList.remove('hide'); + noteRef.value?.classList.remove('hide'); } }; player.itemSwapChangeEmitter.on(toggleEnabled); toggleEnabled(); - const label = document.createElement('label'); - label.classList.add('form-label'); - label.textContent = 'Item Swap'; - swapPickerContainer.appendChild(label); - - const itemSwapContainer = Input.newGroupContainer(); - itemSwapContainer.classList.add('icon-group'); - swapPickerContainer.appendChild(itemSwapContainer); - - const swapButton = ( - - ); - swapButton.addEventListener('click', _event => this.swapWithGear(TypedEvent.nextEventID(), player)); - itemSwapContainer.appendChild(swapButton); - - tippy(swapButton, { - content: 'Swap with equipped items', - }); + if (swapButtonRef.value) { + swapButtonRef.value.addEventListener('click', _event => this.swapWithGear(TypedEvent.nextEventID(), player)); + tippy(swapButtonRef.value, { + content: 'Swap with equipped items', + }); + } + const tmpContainer = (<>) as HTMLElement; this.itemSlots.forEach(itemSlot => { - new IconItemSwapPicker(itemSwapContainer, simUI, player, itemSlot); + new IconItemSwapPicker(tmpContainer, simUI, player, itemSlot); }); + + itemSwapContainer.appendChild(tmpContainer); } swapWithGear(eventID: EventID, player: Player) { diff --git a/ui/core/proto_utils/database.ts b/ui/core/proto_utils/database.ts index e288769c33..00ef44cf51 100644 --- a/ui/core/proto_utils/database.ts +++ b/ui/core/proto_utils/database.ts @@ -255,14 +255,16 @@ export class Database { } lookupItemSwap(itemSwap: ItemSwap): ItemSwapGear { - return new ItemSwapGear({ - [ItemSlot.ItemSlotHands]: itemSwap.handsItem ? this.lookupItemSpec(itemSwap.handsItem) : null, - [ItemSlot.ItemSlotMainHand]: itemSwap.mhItem ? this.lookupItemSpec(itemSwap.mhItem) : null, - [ItemSlot.ItemSlotOffHand]: itemSwap.ohItem ? this.lookupItemSpec(itemSwap.ohItem) : null, - [ItemSlot.ItemSlotRanged]: itemSwap.rangedItem ? this.lookupItemSpec(itemSwap.rangedItem) : null, - [ItemSlot.ItemSlotTrinket1]: itemSwap.trinket1Item ? this.lookupItemSpec(itemSwap.trinket1Item) : null, - [ItemSlot.ItemSlotTrinket2]: itemSwap.trinket2Item ? this.lookupItemSpec(itemSwap.trinket2Item) : null, - }); + const gearMap = itemSwap.items.reduce>>((gearMap, itemSpec) => { + const item = this.lookupItemSpec(itemSpec); + if (item) { + const itemSlots = getEligibleItemSlots(item.item); + const assignedSlot = itemSlots.find(slot => !gearMap[slot]); + if (assignedSlot) gearMap[assignedSlot] = item; + } + return gearMap; + }, {}); + return new ItemSwapGear(gearMap); } enchantSpellIdToEffectId(enchantSpellId: number): number { diff --git a/ui/core/proto_utils/gear.ts b/ui/core/proto_utils/gear.ts index 9477199cb9..ce957507a8 100644 --- a/ui/core/proto_utils/gear.ts +++ b/ui/core/proto_utils/gear.ts @@ -395,7 +395,7 @@ export class ItemSwapGear extends BaseGear { } getItemSlots(): ItemSlot[] { - return [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2]; + return getEnumValues(ItemSlot); } withEquippedItem(newSlot: ItemSlot, newItem: EquippedItem | null, canDualWield2H: boolean): ItemSwapGear { @@ -404,12 +404,7 @@ export class ItemSwapGear extends BaseGear { toProto(): ItemSwap { return ItemSwap.create({ - handsItem: this.gear[ItemSlot.ItemSlotHands]?.asSpec(), - mhItem: this.gear[ItemSlot.ItemSlotMainHand]?.asSpec(), - ohItem: this.gear[ItemSlot.ItemSlotOffHand]?.asSpec(), - rangedItem: this.gear[ItemSlot.ItemSlotRanged]?.asSpec(), - trinket1Item: this.gear[ItemSlot.ItemSlotTrinket1]?.asSpec(), - trinket2Item: this.gear[ItemSlot.ItemSlotTrinket2]?.asSpec(), + items: this.asArray().map(ei => (ei ? ei.asSpec() : ItemSpec.create())), }); } } diff --git a/ui/scss/core/components/_item_swap_picker.scss b/ui/scss/core/components/_item_swap_picker.scss index 2ae1577d13..97307e5496 100644 --- a/ui/scss/core/components/_item_swap_picker.scss +++ b/ui/scss/core/components/_item_swap_picker.scss @@ -1,7 +1,18 @@ .item-swap-picker-root { + --column-count: 4; .picker-group { - grid-template-columns: none; - grid-auto-flow: column; + &:has(> div:last-child:nth-child(1)) { + --column-count: 1; + } + &:has(> div:last-child:nth-child(2)) { + --column-count: 2; + } + &:has(> div:last-child:nth-child(3)) { + --column-count: 3; + } + + grid-template-columns: repeat(var(--column-count), 35px); + grid-auto-flow: row; align-items: center; justify-content: flex-end; } diff --git a/ui/shaman/elemental/sim.ts b/ui/shaman/elemental/sim.ts index ed53378ab5..6d14ea147c 100644 --- a/ui/shaman/elemental/sim.ts +++ b/ui/shaman/elemental/sim.ts @@ -6,7 +6,7 @@ import { IndividualSimUI, registerSpecConfig } from '../../core/individual_sim_u import { Player } from '../../core/player.js'; import { PlayerClasses } from '../../core/player_classes'; import { APLRotation } from '../../core/proto/apl.js'; -import { Debuffs, Faction, IndividualBuffs, PartyBuffs, PseudoStat, Race, RaidBuffs, Spec, Stat } from '../../core/proto/common.js'; +import { Debuffs, Faction, IndividualBuffs, ItemSlot, PartyBuffs, PseudoStat, Race, RaidBuffs, Spec, Stat } from '../../core/proto/common.js'; import { Stats, UnitStat } from '../../core/proto_utils/stats.js'; import { TypedEvent } from '../../core/typed_event.js'; import * as ShamanInputs from '../inputs.js'; @@ -117,6 +117,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecElementalShaman, { OtherInputs.DistanceFromTarget, ], }, + itemSwapSlots: [ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], customSections: [ShamanInputs.TotemsSection], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. diff --git a/ui/warlock/demonology/sim.ts b/ui/warlock/demonology/sim.ts index a7a0040e2b..1217872c85 100644 --- a/ui/warlock/demonology/sim.ts +++ b/ui/warlock/demonology/sim.ts @@ -114,12 +114,23 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDemonologyWarlock, { ], }, itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotNeck, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotWrist, ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotWaist, + ItemSlot.ItemSlotLegs, + ItemSlot.ItemSlotFeet, + ItemSlot.ItemSlotFinger1, + ItemSlot.ItemSlotFinger2, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, - ItemSlot.ItemSlotTrinket1, - ItemSlot.ItemSlotTrinket2, ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. diff --git a/ui/warrior/fury/sim.ts b/ui/warrior/fury/sim.ts index 8af2ce3f7f..94d88e6351 100644 --- a/ui/warrior/fury/sim.ts +++ b/ui/warrior/fury/sim.ts @@ -125,12 +125,23 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { ], }, itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotNeck, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotWrist, ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotWaist, + ItemSlot.ItemSlotLegs, + ItemSlot.ItemSlotFeet, + ItemSlot.ItemSlotFinger1, + ItemSlot.ItemSlotFinger2, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotRanged, - ItemSlot.ItemSlotTrinket1, - ItemSlot.ItemSlotTrinket2, ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. From 54e577d8b0f98014aedbd263c60fa2fbb51eccd8 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 9 Dec 2024 23:19:11 +0100 Subject: [PATCH 005/127] Remove cast condition logic --- sim/core/major_cooldown.go | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/sim/core/major_cooldown.go b/sim/core/major_cooldown.go index e2f8f1909a..0d03af9f0f 100644 --- a/sim/core/major_cooldown.go +++ b/sim/core/major_cooldown.go @@ -400,22 +400,6 @@ func MakeTemporaryStatsOnUseCDRegistration(auraLabel string, tempStats stats.Sta if sharedCDFunc != nil { localConfig.Cast.SharedCD = sharedCDFunc(character) } - if character.ItemSwap.IsEnabled() && localConfig.ActionID.ItemID != 0 { - originalExtraCastCondition := localConfig.ExtraCastCondition - localConfig.ExtraCastCondition = func(sim *Simulation, unit *Unit) bool { - isEquipped := false - for _, slot := range character.ItemSwap.slots { - isEquipped = localConfig.ActionID.IsItemAction(character.Equipment[slot].ID) - if isEquipped { - break - } - } - if originalExtraCastCondition != nil { - return isEquipped && originalExtraCastCondition(sim, unit) - } - return isEquipped - } - } RegisterTemporaryStatsOnUseCD(character, auraLabel, tempStats, duration, localConfig) } } From 094b070b8b9ba5ccf488dc10549844b30b470112 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 10 Dec 2024 17:33:49 +0100 Subject: [PATCH 006/127] Fix swap triggering GCD outside combat --- proto/common.proto | 5 ++- sim/core/character.go | 67 +++++++++++++++++++++------------ sim/core/item_swaps.go | 31 ++++++++------- ui/core/individual_sim_ui.tsx | 23 +++-------- ui/core/player.ts | 23 +++++++++++ ui/core/proto_utils/database.ts | 2 +- 6 files changed, 92 insertions(+), 59 deletions(-) diff --git a/proto/common.proto b/proto/common.proto index ddb0e7871c..070413f355 100644 --- a/proto/common.proto +++ b/proto/common.proto @@ -1037,7 +1037,10 @@ message CustomSpell { } message ItemSwap { - repeated ItemSpec items = 1; + ItemSpec mh_item = 1 [deprecated=true]; + ItemSpec oh_item = 2 [deprecated=true]; + ItemSpec ranged_item = 3 [deprecated=true]; + repeated ItemSpec items = 4; } message Duration { diff --git a/sim/core/character.go b/sim/core/character.go index 907829eb42..e957c39b93 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -776,34 +776,51 @@ func (character *Character) MeetsArmorSpecializationRequirement(armorType proto. } func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { + armorSpecMultiplier := 1.05 hasBonus := character.MeetsArmorSpecializationRequirement(armorType) - dep := character.NewDynamicMultiplyStat(primaryStat, 1.05) if hasBonus { - character.StatDependencyManager.EnableDynamicStatDep(dep) - } - character.RegisterOnItemSwap([]proto.ItemSlot{ - proto.ItemSlot_ItemSlotHead, - proto.ItemSlot_ItemSlotShoulder, - proto.ItemSlot_ItemSlotChest, - proto.ItemSlot_ItemSlotWrist, - proto.ItemSlot_ItemSlotHands, - proto.ItemSlot_ItemSlotWaist, - proto.ItemSlot_ItemSlotLegs, - proto.ItemSlot_ItemSlotFeet, - }, - func(sim *Simulation, slot proto.ItemSlot) { + character.MultiplyStat(primaryStat, armorSpecMultiplier) + } + + // If we use ItemSwap we need to be able to toggle the item specialization + // However due to dynamic stats only being able to be added after finalize() + // we need to maintain 2 stat dependencies to toggle the effect when swapping items + if character.ItemSwap.IsEnabled() { + character.ItemSwap.hasInitialArmorSpecialization = hasBonus + removeArmorSpecializationDep := character.NewDynamicMultiplyStat(primaryStat, 1/armorSpecMultiplier) + addArmorSpecializationDep := character.NewDynamicMultiplyStat(primaryStat, armorSpecMultiplier) + + handleArmorSpecializationToggle := func(sim *Simulation) { hasBonus := character.MeetsArmorSpecializationRequirement(armorType) - if hasBonus { - character.EnableDynamicStatDep(sim, dep) + if character.ItemSwap.hasInitialArmorSpecialization { + // Handle "reverting" the existing bonus when the item swap is triggered with different armor types + if hasBonus { + character.DisableDynamicStatDep(sim, removeArmorSpecializationDep) + } else { + character.EnableDynamicStatDep(sim, removeArmorSpecializationDep) + } } else { - character.DisableDynamicStatDep(sim, dep) + // Handle "adding" the non-existing bonus if the initial equip did not have the bonus + if hasBonus { + character.EnableDynamicStatDep(sim, addArmorSpecializationDep) + } else { + character.DisableDynamicStatDep(sim, addArmorSpecializationDep) + } } - }) -} + } -// func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { -// hasBonus := character.MeetsArmorSpecializationRequirement(armorType) -// if hasBonus { -// character.MultiplyStat(primaryStat, 1.05) -// } -// } + character.RegisterOnItemSwap([]proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotWrist, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotWaist, + proto.ItemSlot_ItemSlotLegs, + proto.ItemSlot_ItemSlotFeet, + }, + func(sim *Simulation, _ proto.ItemSlot) { + handleArmorSpecializationToggle(sim) + }) + } +} diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 567694ce4f..a93c6da7aa 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -23,8 +23,9 @@ type ItemSwap struct { slots []proto.ItemSlot // Holds items that are currently not equipped - unEquippedItems Equipment - swapped bool + unEquippedItems Equipment + swapped bool + hasInitialArmorSpecialization bool } /** @@ -258,7 +259,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { has2H := swap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 for _, slot := range slots { - if !isPrepull && slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotOffHand { + if !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotOffHand) { continue } @@ -283,14 +284,16 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { character.AddStatsDynamic(sim, newStats) - if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped && sim.CurrentTime > 0 { - character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) - } + if sim.CurrentTime > 0 { + if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped { + character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) + } - // If GCD is ready then use the GCD, otherwise we assume it's being used along side a spell. - if character.GCD.IsReady(sim) { - newGCD := sim.CurrentTime + 1500*time.Millisecond - character.SetGCDTimer(sim, newGCD) + // If GCD is ready then use the GCD, otherwise we assume it's being used along side a spell. + if character.GCD.IsReady(sim) { + newGCD := sim.CurrentTime + 1500*time.Millisecond + character.SetGCDTimer(sim, newGCD) + } } swap.swapped = !swap.swapped @@ -351,11 +354,11 @@ func (swap *ItemSwap) reset(sim *Simulation) { if swap.IsSwapped() { swap.SwapItems(sim, swap.slots) - } - for _, slot := range swap.slots { - for _, onSwap := range swap.onSwapCallbacks[slot] { - onSwap(sim, slot) + for _, slot := range swap.slots { + for _, onSwap := range swap.onSwapCallbacks[slot] { + onSwap(sim, slot) + } } } } diff --git a/ui/core/individual_sim_ui.tsx b/ui/core/individual_sim_ui.tsx index 12c6d9c872..d6ef5b5b7c 100644 --- a/ui/core/individual_sim_ui.tsx +++ b/ui/core/individual_sim_ui.tsx @@ -284,27 +284,14 @@ export abstract class IndividualSimUI extends SimUI { this.addWarning({ updateOn: this.player.gearChangeEmitter, getContent: () => { - const playerClass = this.player.getPlayerClass(); - // We always pick the first entry since this is always the preffered armor type - const armorSpecializationArmorType = playerClass.armorTypes[0]; - - if (!armorSpecializationArmorType || playerClass.classID === Class.ClassDruid) { + if (!this.player.armorSpecializationArmorType) { return ''; } - if ( - [ - ItemSlot.ItemSlotHead, - ItemSlot.ItemSlotShoulder, - ItemSlot.ItemSlotChest, - ItemSlot.ItemSlotWrist, - ItemSlot.ItemSlotHands, - ItemSlot.ItemSlotWaist, - ItemSlot.ItemSlotLegs, - ItemSlot.ItemSlotFeet, - ].some(itemSlot => this.player.getEquippedItem(itemSlot)?.item.armorType !== armorSpecializationArmorType) - ) { - return `Equip ${armorTypeNames.get(armorSpecializationArmorType)} gear in each slot for the Armor Specialization (5% primary stat) effect.`; + if (this.player.hasArmorSpecializationBonus()) { + return `Equip ${armorTypeNames.get( + this.player.armorSpecializationArmorType, + )} gear in each slot for the Armor Specialization (5% primary stat) effect.`; } else { return ''; } diff --git a/ui/core/player.ts b/ui/core/player.ts index 183ef43915..f77fc1101b 100644 --- a/ui/core/player.ts +++ b/ui/core/player.ts @@ -1260,6 +1260,29 @@ export class Player { [RaidFilterOption.RaidDragonSoul]: 5892, }; + get armorSpecializationArmorType() { + // We always pick the first entry since this is always the preffered armor type + return this.playerClass.armorTypes[0]; + } + + hasArmorSpecializationBonus() { + return [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotWrist, + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotWaist, + ItemSlot.ItemSlotLegs, + ItemSlot.ItemSlotFeet, + ].some(itemSlot => { + const item = this.getEquippedItem(itemSlot)?.item; + if (!item) return false; + const armorType = item.armorType; + return armorType !== this.armorSpecializationArmorType; + }); + } + filterItemData(itemData: Array, getItemFunc: (val: T) => Item, slot: ItemSlot): Array { const filters = this.sim.getFilters(); diff --git a/ui/core/proto_utils/database.ts b/ui/core/proto_utils/database.ts index 00ef44cf51..3391f717b7 100644 --- a/ui/core/proto_utils/database.ts +++ b/ui/core/proto_utils/database.ts @@ -260,7 +260,7 @@ export class Database { if (item) { const itemSlots = getEligibleItemSlots(item.item); const assignedSlot = itemSlots.find(slot => !gearMap[slot]); - if (assignedSlot) gearMap[assignedSlot] = item; + if (typeof assignedSlot === 'number') gearMap[assignedSlot] = item; } return gearMap; }, {}); From 14903dc822c0dd2928c4ba8d6c7f9f06f7b776b0 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 10 Dec 2024 18:26:48 +0100 Subject: [PATCH 007/127] Add initialize check for initial flags --- sim/core/character.go | 2 +- sim/core/database.go | 4 ++++ sim/core/item_swaps.go | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/sim/core/character.go b/sim/core/character.go index e957c39b93..e3aa1c3aea 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -629,7 +629,7 @@ func (character *Character) getProcMaskFor(pred func(item *Item) bool) ProcMask if pred(character.OffHand()) { mask |= ProcMaskMeleeOH } - if pred(character.Trinket1()) || pred(character.Trinket2()) { + if pred(character.Trinket1()) || pred(character.Trinket2()) || pred(character.Back()) { mask |= ProcMaskProc } return mask diff --git a/sim/core/database.go b/sim/core/database.go index e8d61dadf3..f4bd7a0c55 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -231,6 +231,10 @@ func (equipment *Equipment) Shoulder() *Item { return &equipment[proto.ItemSlot_ItemSlotShoulder] } +func (equipment *Equipment) Back() *Item { + return &equipment[proto.ItemSlot_ItemSlotBack] +} + func (equipment *Equipment) Chest() *Item { return &equipment[proto.ItemSlot_ItemSlotChest] } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index a93c6da7aa..51a938ec73 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -25,6 +25,7 @@ type ItemSwap struct { // Holds items that are currently not equipped unEquippedItems Equipment swapped bool + initialized bool hasInitialArmorSpecialization bool } @@ -110,6 +111,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti slots: slots, unEquippedItems: swapItems, swapped: false, + initialized: false, } } @@ -156,6 +158,7 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Au character := swap.character character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForItem(itemID) + if procMask == ProcMaskUnknown { aura.Deactivate(sim) } else { @@ -199,6 +202,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots [ return } spell.Flags &= ^SpellFlagSwapped + if !swap.initialized { + return + } idSwapped := swap.unEquippedItems[slot].ID if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { spell.CD.Set(sim.CurrentTime + time.Second*30) @@ -214,6 +220,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantOnUseEffect(spell *Spell, slot if spell != nil { idEquipped := character.Equipment[slot].ID idSwapped := swap.unEquippedItems[slot].ID + if !swap.initialized { + return + } if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { spell.CD.Set(sim.CurrentTime + time.Second*30) } @@ -351,16 +360,21 @@ func (swap *ItemSwap) reset(sim *Simulation) { if !swap.IsEnabled() { return } - if swap.IsSwapped() { swap.SwapItems(sim, swap.slots) + } + if !swap.initialized || swap.IsSwapped() { for _, slot := range swap.slots { for _, onSwap := range swap.onSwapCallbacks[slot] { onSwap(sim, slot) } } } + + // This is used to set the initial spell flags for unequipped items. + // Reset is called before the first iteration. + swap.initialized = true } func (swap *ItemSwap) doneIteration(_ *Simulation) { From 0135729a293db548c5a112e3cf1c026ca4e089ec Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 10 Dec 2024 18:52:39 +0100 Subject: [PATCH 008/127] Fix resetting --- sim/core/apl_actions_misc.go | 2 +- sim/core/item_swaps.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index 732b61ba9b..e13d30bc23 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -153,7 +153,7 @@ func (action *APLActionItemSwap) Execute(sim *Simulation) { action.character.Log(sim, "Item Swap to set %s", action.swapSet) } - action.character.ItemSwap.SwapItems(sim, action.character.ItemSwap.slots) + action.character.ItemSwap.SwapItems(sim, action.character.ItemSwap.slots, false) } func (action *APLActionItemSwap) String() string { return fmt.Sprintf("Item Swap(%s)", action.swapSet) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 51a938ec73..8056f3e262 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -256,7 +256,7 @@ func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { return newStats } -func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { +func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset bool) { if !swap.IsEnabled() { return } @@ -268,7 +268,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { has2H := swap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 for _, slot := range slots { - if !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotOffHand) { + if !isReset && !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotRanged) { continue } @@ -279,7 +279,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { if ok, swapStats := swap.swapItem(slot, has2H); ok { newStats = newStats.Add(swapStats) - meleeWeaponSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || meleeWeaponSwapped + meleeWeaponSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || meleeWeaponSwapped for _, onSwap := range swap.onSwapCallbacks[slot] { onSwap(sim, slot) @@ -293,7 +293,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot) { character.AddStatsDynamic(sim, newStats) - if sim.CurrentTime > 0 { + if sim.CurrentTime >= 0 { if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped { character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) } @@ -361,7 +361,7 @@ func (swap *ItemSwap) reset(sim *Simulation) { return } if swap.IsSwapped() { - swap.SwapItems(sim, swap.slots) + swap.SwapItems(sim, swap.slots, true) } if !swap.initialized || swap.IsSwapped() { From 01050d55dd17f4aa67b1e20f9c45bebbf502e149 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 10 Dec 2024 19:22:50 +0100 Subject: [PATCH 009/127] Fix item desync --- sim/core/item_swaps.go | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 8056f3e262..255f3c2c18 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,6 +1,7 @@ package core import ( + "fmt" "time" "github.com/wowsims/cata/sim/core/proto" @@ -22,6 +23,10 @@ type ItemSwap struct { // Which slots to actually swap. slots []proto.ItemSlot + // Holds the original equip + originalEquip Equipment + // Holds the items that are selected for swapping + swapEquip Equipment // Holds items that are currently not equipped unEquippedItems Equipment swapped bool @@ -104,11 +109,15 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti return } + fmt.Println("ItemSwap Init", character.Equipment.ToEquipmentSpecProto()) + character.ItemSwap = ItemSwap{ mhCritMultiplier: mhCritMultiplier, ohCritMultiplier: ohCritMultiplier, rangedCritMultiplier: rangedCritMultiplier, slots: slots, + originalEquip: character.Equipment, + swapEquip: swapItems, unEquippedItems: swapItems, swapped: false, initialized: false, @@ -277,7 +286,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset continue } - if ok, swapStats := swap.swapItem(slot, has2H); ok { + if ok, swapStats := swap.swapItem(slot, has2H, isReset); ok { newStats = newStats.Add(swapStats) meleeWeaponSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || meleeWeaponSwapped @@ -290,7 +299,6 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset if sim.Log != nil { sim.Log("Item Swap Stats: %v", newStats.FlatString()) } - character.AddStatsDynamic(sim, newStats) if sim.CurrentTime >= 0 { @@ -308,9 +316,14 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset swap.swapped = !swap.swapped } -func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool) (bool, stats.Stats) { +func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (bool, stats.Stats) { oldItem := swap.character.Equipment[slot] - newItem := swap.GetUnequippedItem(slot) + var newItem *Item + if isReset { + newItem = &swap.originalEquip[slot] + } else { + newItem = swap.GetUnequippedItem(slot) + } swap.character.Equipment[slot] = *newItem oldItemStats := swap.getItemStats(oldItem) @@ -319,7 +332,7 @@ func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool) (bool, stats.Sta //2H will swap out the offhand also. if has2H && slot == proto.ItemSlot_ItemSlotMainHand { - _, ohStats := swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H) + _, ohStats := swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H, isReset) newStats = newStats.Add(ohStats) } @@ -360,9 +373,8 @@ func (swap *ItemSwap) reset(sim *Simulation) { if !swap.IsEnabled() { return } - if swap.IsSwapped() { - swap.SwapItems(sim, swap.slots, true) - } + + swap.SwapItems(sim, swap.slots, true) if !swap.initialized || swap.IsSwapped() { for _, slot := range swap.slots { @@ -372,6 +384,10 @@ func (swap *ItemSwap) reset(sim *Simulation) { } } + fmt.Println("ItemSwap Reset", swap.character.Equipment.ToEquipmentSpecProto()) + + swap.unEquippedItems = swap.swapEquip + // This is used to set the initial spell flags for unequipped items. // Reset is called before the first iteration. swap.initialized = true From dd37eed1743525786ac08c6a6e23caa4c3826440 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 10 Dec 2024 19:23:34 +0100 Subject: [PATCH 010/127] Remove logs --- sim/core/item_swaps.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 255f3c2c18..3246cce6bc 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,7 +1,6 @@ package core import ( - "fmt" "time" "github.com/wowsims/cata/sim/core/proto" @@ -109,8 +108,6 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti return } - fmt.Println("ItemSwap Init", character.Equipment.ToEquipmentSpecProto()) - character.ItemSwap = ItemSwap{ mhCritMultiplier: mhCritMultiplier, ohCritMultiplier: ohCritMultiplier, @@ -384,8 +381,6 @@ func (swap *ItemSwap) reset(sim *Simulation) { } } - fmt.Println("ItemSwap Reset", swap.character.Equipment.ToEquipmentSpecProto()) - swap.unEquippedItems = swap.swapEquip // This is used to set the initial spell flags for unequipped items. From 1b07f39a75ff47e288f25c752a1042e506b26605 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 11 Dec 2024 08:21:02 +0100 Subject: [PATCH 011/127] Fix reset GCD check --- sim/core/item_swaps.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 3246cce6bc..bf1ef04eb4 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -298,7 +298,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset } character.AddStatsDynamic(sim, newStats) - if sim.CurrentTime >= 0 { + if !isPrepull && !isReset { if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped { character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) } From afbbc609371f11d08fe4c7ffb69346da7f9ca9a9 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 11 Dec 2024 22:21:28 +0100 Subject: [PATCH 012/127] PR feedback --- sim/core/aura.go | 2 +- sim/core/buffs.go | 12 ++------ sim/core/character.go | 68 +++++++++++++++++++++++++----------------- sim/core/item_swaps.go | 7 ++--- sim/core/unit.go | 16 ++++++++++ 5 files changed, 62 insertions(+), 43 deletions(-) diff --git a/sim/core/aura.go b/sim/core/aura.go index a570ddcaa8..efee965ede 100644 --- a/sim/core/aura.go +++ b/sim/core/aura.go @@ -98,7 +98,7 @@ type Aura struct { OnPeriodicHealDealt OnPeriodicDamage // Invoked when a hot tick occurs and this unit is the caster. OnPeriodicHealTaken OnPeriodicDamage // Invoked when a hot tick occurs and this unit is the target. - // If non-default, stat bonuses fron the OnGain callback of this aura will be + // If non-default, stat bonuses from the OnGain callback of this aura will be // included in Character Stats in the UI. BuildPhase CharacterBuildPhase diff --git a/sim/core/buffs.go b/sim/core/buffs.go index b6a8f85a60..9dfdac50fc 100644 --- a/sim/core/buffs.go +++ b/sim/core/buffs.go @@ -29,18 +29,10 @@ func makeExclusiveMultiplierBuff(aura *Aura, stat stats.Stat, value float64) { aura.NewExclusiveEffect(stat.StatName()+"%Buff", false, ExclusiveEffect{ Priority: value, OnGain: func(ee *ExclusiveEffect, s *Simulation) { - if ee.Aura.Unit.Env.MeasuringStats && ee.Aura.Unit.Env.State != Finalized { - aura.Unit.StatDependencyManager.EnableDynamicStatDep(dep) - } else { - ee.Aura.Unit.EnableDynamicStatDep(s, dep) - } + ee.Aura.Unit.EnableBuildPhaseStatDep(s, dep) }, OnExpire: func(ee *ExclusiveEffect, s *Simulation) { - if ee.Aura.Unit.Env.MeasuringStats { - aura.Unit.StatDependencyManager.DisableDynamicStatDep(dep) - } else { - ee.Aura.Unit.DisableDynamicStatDep(s, dep) - } + ee.Aura.Unit.DisableBuildPhaseStatDep(s, dep) }, }) } diff --git a/sim/core/character.go b/sim/core/character.go index e3aa1c3aea..1fb1be516c 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -776,39 +776,51 @@ func (character *Character) MeetsArmorSpecializationRequirement(armorType proto. } func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { - armorSpecMultiplier := 1.05 - hasBonus := character.MeetsArmorSpecializationRequirement(armorType) - if hasBonus { - character.MultiplyStat(primaryStat, armorSpecMultiplier) + armorSpecializationDepdency := character.NewDynamicMultiplyStat(primaryStat, 1.05) + + enableArmorSpecialization := func(sim *Simulation) { + character.EnableBuildPhaseStatDep(sim, armorSpecializationDepdency) + + if sim.Log != nil { + sim.Log("Armor Specialization: Active") + } + } + disableArmorSpecialization := func(sim *Simulation) { + character.DisableBuildPhaseStatDep(sim, armorSpecializationDepdency) + + if sim.Log != nil { + sim.Log("Armor Specialization: Inactive") + } } + processArmorSpecialization := func(sim *Simulation) { + hasBonus := character.MeetsArmorSpecializationRequirement(armorType) + if hasBonus { + enableArmorSpecialization(sim) + } else { + disableArmorSpecialization(sim) + } + } + + character.RegisterAura(Aura{ + Label: "Armor Specialization", + Duration: NeverExpires, + BuildPhase: CharacterBuildPhaseTalents, + OnGain: func(aura *Aura, sim *Simulation) { + processArmorSpecialization(sim) + }, + OnExpire: func(aura *Aura, sim *Simulation) { + disableArmorSpecialization(sim) + }, + OnReset: func(aura *Aura, sim *Simulation) { + aura.Activate(sim) + }, + }) + // If we use ItemSwap we need to be able to toggle the item specialization // However due to dynamic stats only being able to be added after finalize() // we need to maintain 2 stat dependencies to toggle the effect when swapping items if character.ItemSwap.IsEnabled() { - character.ItemSwap.hasInitialArmorSpecialization = hasBonus - removeArmorSpecializationDep := character.NewDynamicMultiplyStat(primaryStat, 1/armorSpecMultiplier) - addArmorSpecializationDep := character.NewDynamicMultiplyStat(primaryStat, armorSpecMultiplier) - - handleArmorSpecializationToggle := func(sim *Simulation) { - hasBonus := character.MeetsArmorSpecializationRequirement(armorType) - if character.ItemSwap.hasInitialArmorSpecialization { - // Handle "reverting" the existing bonus when the item swap is triggered with different armor types - if hasBonus { - character.DisableDynamicStatDep(sim, removeArmorSpecializationDep) - } else { - character.EnableDynamicStatDep(sim, removeArmorSpecializationDep) - } - } else { - // Handle "adding" the non-existing bonus if the initial equip did not have the bonus - if hasBonus { - character.EnableDynamicStatDep(sim, addArmorSpecializationDep) - } else { - character.DisableDynamicStatDep(sim, addArmorSpecializationDep) - } - } - } - character.RegisterOnItemSwap([]proto.ItemSlot{ proto.ItemSlot_ItemSlotHead, proto.ItemSlot_ItemSlotShoulder, @@ -820,7 +832,7 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta proto.ItemSlot_ItemSlotFeet, }, func(sim *Simulation, _ proto.ItemSlot) { - handleArmorSpecializationToggle(sim) + processArmorSpecialization(sim) }) } } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index bf1ef04eb4..8d02dc7dce 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -27,10 +27,9 @@ type ItemSwap struct { // Holds the items that are selected for swapping swapEquip Equipment // Holds items that are currently not equipped - unEquippedItems Equipment - swapped bool - initialized bool - hasInitialArmorSpecialization bool + unEquippedItems Equipment + swapped bool + initialized bool } /** diff --git a/sim/core/unit.go b/sim/core/unit.go index 8b121a8589..27423f35f6 100644 --- a/sim/core/unit.go +++ b/sim/core/unit.go @@ -366,6 +366,22 @@ func (unit *Unit) DisableDynamicStatDep(sim *Simulation, dep *stats.StatDependen } } +func (unit *Unit) EnableBuildPhaseStatDep(sim *Simulation, dep *stats.StatDependency) { + if unit.Env.MeasuringStats && unit.Env.State != Finalized { + unit.StatDependencyManager.EnableDynamicStatDep(dep) + } else { + unit.EnableDynamicStatDep(sim, dep) + } +} + +func (unit *Unit) DisableBuildPhaseStatDep(sim *Simulation, dep *stats.StatDependency) { + if unit.Env.MeasuringStats && unit.Env.State != Finalized { + unit.StatDependencyManager.DisableDynamicStatDep(dep) + } else { + unit.DisableDynamicStatDep(sim, dep) + } +} + // Returns whether the indicates stat is currently modified by a temporary bonus. func (unit *Unit) HasTemporaryBonusForStat(stat stats.Stat) bool { return unit.initialStats[stat] != unit.stats[stat] From ca93e297e2828a9ed6ad07f61f93077e4d4b7845 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 11 Dec 2024 22:44:46 +0100 Subject: [PATCH 013/127] Call ICD call to Activate Aura APL --- sim/common/cata/enchant_effects.go | 17 ++++++++++++++++- sim/core/apl_actions_misc.go | 3 +++ sim/shaman/shaman.go | 3 --- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index ae4cea1216..9cf7bc20b1 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -261,6 +261,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4084, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) @@ -288,6 +290,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4097, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) @@ -314,6 +318,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4098, 2.5, aura.Ppmm, aura) }) @@ -378,6 +384,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4115, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) @@ -405,6 +413,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4116, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) @@ -432,6 +442,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4118, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) }) @@ -446,7 +458,7 @@ func init() { time.Second*10, ) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Gnomish X-Ray Scope", ActionID: core.ActionID{SpellID: 95712}, Callback: core.CallbackOnSpellHitDealt, @@ -459,6 +471,7 @@ func init() { }, }) + statAura.Icd = aura.Icd }) // Enchant: 4176, Item: 59595 - R19 Threatfinder @@ -581,6 +594,8 @@ func init() { }, }) + statAura.Icd = aura.Icd + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4267, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}) }) } diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index e13d30bc23..2de56475fd 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -87,6 +87,9 @@ func (action *APLActionActivateAura) Execute(sim *Simulation) { action.aura.Unit.Log(sim, "Activating aura %s", action.aura.ActionID) } action.aura.Activate(sim) + if action.aura.Icd != nil { + action.aura.Icd.Use(sim) + } } func (action *APLActionActivateAura) String() string { diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index 355bb71e45..790ef90058 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -268,9 +268,6 @@ func (shaman *Shaman) Initialize() { shaman.registerCallOfTheSpirits() shaman.registerBloodlustCD() - // shaman.NewTemporaryStatsAura("DC Pre-Pull SP Proc", core.ActionID{SpellID: 60494}, stats.Stats{stats.SpellPower: 765}, time.Second*10) - - shaman.NewTemporaryStatsAura("Sorrowsong Pre-Pull", core.ActionID{SpellID: 91002, Tag: 1}, stats.Stats{stats.SpellPower: 1710}, 10*time.Second) } func (shaman *Shaman) RegisterHealingSpells() { From 1ea188d4a7eed966979a96e66654f4360d718269 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 11:25:33 +0100 Subject: [PATCH 014/127] Fix (num) Buff stat aura APL --- sim/common/shared/shared_utils.go | 21 ++++++++++++++++++++- sim/core/apl_actions_casting.go | 21 +++++++++++++++------ sim/core/apl_value.go | 2 ++ sim/core/apl_values_aura_sets.go | 29 +++++++++++++++++++++++------ sim/core/item_swaps.go | 28 +++++++++++++++++++++++----- sim/shaman/weapon_imbues.go | 6 +++--- ui/core/proto_utils/database.ts | 7 ++++--- ui/shaman/elemental/sim.ts | 2 +- 8 files changed, 91 insertions(+), 25 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 2b06dfb9dc..a52a276495 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -86,9 +86,28 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) + var itemSwapProcCondition core.CustomStatBuffProcCondition + if character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(config.ID) { + itemSwapProcCondition = func(sim *core.Simulation, aura *core.Aura) bool { + return character.ItemSwap.HasItemEquipped(config.ID) + } + } + var customHandler CustomProcHandler if config.CustomProcCondition != nil { - procAura.CustomProcCondition = config.CustomProcCondition + if itemSwapProcCondition != nil { + procAura.CustomProcCondition = func(sim *core.Simulation, aura *core.Aura) bool { + return itemSwapProcCondition(sim, aura) && config.CustomProcCondition(sim, aura) + } + } else { + procAura.CustomProcCondition = config.CustomProcCondition + } + + } else if itemSwapProcCondition != nil { + procAura.CustomProcCondition = itemSwapProcCondition + } + + if config.CustomProcCondition != nil { customHandler = func(sim *core.Simulation, procAura *core.StatBuffAura) { if procAura.CanProc(sim) { procAura.Activate(sim) diff --git a/sim/core/apl_actions_casting.go b/sim/core/apl_actions_casting.go index 3b3b0a5143..f719c95c2d 100644 --- a/sim/core/apl_actions_casting.go +++ b/sim/core/apl_actions_casting.go @@ -261,8 +261,9 @@ type APLActionCastAllStatBuffCooldowns struct { statTypesToMatch []stats.Stat - allSubactions []*APLActionCastSpell - readySubactions []*APLActionCastSpell + allSubactions []*APLActionCastSpell + allEquippedSubactions []*APLActionCastSpell + readySubactions []*APLActionCastSpell } func (rot *APLRotation) newActionCastAllStatBuffCooldowns(config *proto.APLActionCastAllStatBuffCooldowns) APLActionImpl { @@ -283,6 +284,7 @@ func (rot *APLRotation) newActionCastAllStatBuffCooldowns(config *proto.APLActio } func (action *APLActionCastAllStatBuffCooldowns) processMajorCooldowns() { matchingSpells := action.character.GetMatchingStatBuffSpells(action.statTypesToMatch) + action.allSubactions = MapSlice(matchingSpells, func(buffSpell *Spell) *APLActionCastSpell { return &APLActionCastSpell{ spell: buffSpell, @@ -300,15 +302,22 @@ func (action *APLActionCastAllStatBuffCooldowns) processMajorCooldowns() { } }) } +func (action *APLActionCastAllStatBuffCooldowns) getEquippedSubActions(actions []*APLActionCastSpell) []*APLActionCastSpell { + return FilterSlice(actions, func(subAction *APLActionCastSpell) bool { + return !subAction.spell.Flags.Matches(SpellFlagSwapped) + }) +} func (action *APLActionCastAllStatBuffCooldowns) IsReady(sim *Simulation) bool { - action.readySubactions = FilterSlice(action.allSubactions, func(subaction *APLActionCastSpell) bool { - return subaction.IsReady(sim) + action.allEquippedSubactions = action.getEquippedSubActions(action.allSubactions) + action.readySubactions = FilterSlice(action.allEquippedSubactions, func(subAction *APLActionCastSpell) bool { + return subAction.IsReady(sim) }) - return Ternary(action.character.Rotation.inSequence, len(action.readySubactions) == len(action.allSubactions), len(action.readySubactions) > 0) + return Ternary(action.character.Rotation.inSequence, len(action.readySubactions) == len(action.allEquippedSubactions), len(action.readySubactions) > 0) } func (action *APLActionCastAllStatBuffCooldowns) Execute(sim *Simulation) { - actionSetToUse := Ternary(sim.CurrentTime < 0, action.allSubactions, action.readySubactions) + action.allEquippedSubactions = action.getEquippedSubActions(action.allSubactions) + actionSetToUse := Ternary(sim.CurrentTime < 0, action.allEquippedSubactions, action.readySubactions) for _, subaction := range actionSetToUse { subaction.Execute(sim) diff --git a/sim/core/apl_value.go b/sim/core/apl_value.go index c9aed12439..bfd1dca4c4 100644 --- a/sim/core/apl_value.go +++ b/sim/core/apl_value.go @@ -208,6 +208,8 @@ func (rot *APLRotation) newAPLValue(config *proto.APLValue) APLValue { value = rot.newValueTrinketProcsMaxRemainingICD(config.GetTrinketProcsMaxRemainingIcd(), config.Uuid) case *proto.APLValue_NumEquippedStatProcTrinkets: value = rot.newValueNumEquippedStatProcTrinkets(config.GetNumEquippedStatProcTrinkets(), config.Uuid) + case *proto.APLValue_NumStatBuffCooldowns: + value = rot.newValueNumStatBuffCooldowns(config.GetNumStatBuffCooldowns(), config.Uuid) // Dots case *proto.APLValue_DotIsActive: diff --git a/sim/core/apl_values_aura_sets.go b/sim/core/apl_values_aura_sets.go index 5b1ece0a24..cf7b750486 100644 --- a/sim/core/apl_values_aura_sets.go +++ b/sim/core/apl_values_aura_sets.go @@ -190,19 +190,23 @@ func (value *APLValueNumEquippedStatProcTrinkets) GetInt(sim *Simulation) int32 type APLValueNumStatBuffCooldowns struct { DefaultAPLValueImpl - statTypesToMatch []stats.Stat - cachedCooldownCount int32 + statTypesToMatch []stats.Stat + matchingSpells []*Spell } -func (rot *APLRotation) newValueNumStatBuffCooldowns(config *proto.APLValueNumStatBuffCooldowns) APLValue { +func (rot *APLRotation) newValueNumStatBuffCooldowns(config *proto.APLValueNumStatBuffCooldowns, uuid *proto.UUID) APLValue { unit := rot.unit character := unit.Env.Raid.GetPlayerFromUnit(unit).GetCharacter() statTypesToMatch := stats.IntTupleToStatsList(config.StatType1, config.StatType2, config.StatType3) matchingSpells := character.GetMatchingStatBuffSpells(statTypesToMatch) + if len(matchingSpells) == 0 { + rot.ValidationMessageByUUID(uuid, proto.LogLevel_Warning, "No stat buff cooldowns found for: %s", StringFromStatTypes(statTypesToMatch)) + } + return &APLValueNumStatBuffCooldowns{ - statTypesToMatch: statTypesToMatch, - cachedCooldownCount: int32(len(matchingSpells)), + statTypesToMatch: statTypesToMatch, + matchingSpells: matchingSpells, } } func (value *APLValueNumStatBuffCooldowns) String() string { @@ -212,5 +216,18 @@ func (value *APLValueNumStatBuffCooldowns) Type() proto.APLValueType { return proto.APLValueType_ValueTypeInt } func (value *APLValueNumStatBuffCooldowns) GetInt(_ *Simulation) int32 { - return value.cachedCooldownCount + validSpellCount := int32(0) + for _, spell := range value.matchingSpells { + if !spell.Flags.Matches(SpellFlagSwapped) { + validSpellCount++ + } + } + return validSpellCount +} +func (value *APLValueNumStatBuffCooldowns) Finalize(rot *APLRotation) { + actionIDs := MapSlice(value.matchingSpells, func(spell *Spell) ActionID { + return spell.ActionID + }) + + rot.ValidationMessageByUUID(value.Uuid, proto.LogLevel_Information, "%s will check the following spell(s)/item(s): %s", value, StringFromActionIDs(actionIDs)) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 8d02dc7dce..b2b4f7e7b0 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -243,18 +243,36 @@ func (swap *ItemSwap) IsSwapped() bool { return swap.swapped } -func (swap *ItemSwap) GetUnequippedItem(slot proto.ItemSlot) *Item { +func (swap *ItemSwap) HasItemEquipped(itemID int32) bool { + for _, item := range swap.character.Equipment { + if item.ID == itemID { + return true + } + } + return false +} + +func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { if slot < 0 { panic("Not able to swap Item " + slot.String() + " not supported") } return &swap.unEquippedItems[slot] } +func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { + for _, item := range swap.unEquippedItems { + if item.ID == itemID { + return true + } + } + return false +} + func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { newStats := stats.Stats{} for _, slot := range slots { oldItemStats := swap.getItemStats(swap.character.Equipment[slot]) - newItemStats := swap.getItemStats(*swap.GetUnequippedItem(slot)) + newItemStats := swap.getItemStats(*swap.GetUnequippedItemBySlot(slot)) newStats = newStats.Add(newItemStats.Subtract(oldItemStats)) } @@ -270,7 +288,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset meleeWeaponSwapped := false newStats := stats.Stats{} - has2H := swap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand + has2H := swap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 for _, slot := range slots { if !isReset && !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotRanged) { @@ -293,7 +311,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset } if sim.Log != nil { - sim.Log("Item Swap Stats: %v", newStats.FlatString()) + sim.Log("Item Swap - New Stats: %v", newStats.FlatString()) } character.AddStatsDynamic(sim, newStats) @@ -318,7 +336,7 @@ func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (b if isReset { newItem = &swap.originalEquip[slot] } else { - newItem = swap.GetUnequippedItem(slot) + newItem = swap.GetUnequippedItemBySlot(slot) } swap.character.Equipment[slot] = *newItem diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 7349fb6e46..643cec2556 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -160,7 +160,7 @@ func (shaman *Shaman) ApplyFlametongueImbueToItem(item *core.Item) { return } - if shaman.ItemSwap.IsEnabled() && (shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand).TempEnchant == int32(enchantID) || shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotOffHand).TempEnchant == int32(enchantID)) { + if shaman.ItemSwap.IsEnabled() && (shaman.ItemSwap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand).TempEnchant == int32(enchantID) || shaman.ItemSwap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotOffHand).TempEnchant == int32(enchantID)) { item.TempEnchant = int32(enchantID) return } @@ -189,11 +189,11 @@ func (shaman *Shaman) ApplyFlametongueImbue(procMask core.ProcMask) { func (shaman *Shaman) ApplyFlametongueImbueSwap(procMask core.ProcMask) { if procMask.Matches(core.ProcMaskMeleeMH) && shaman.ItemSwap.IsEnabled() { - shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotMainHand)) + shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand)) } if procMask.Matches(core.ProcMaskMeleeOH) && shaman.ItemSwap.IsEnabled() { - shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItem(proto.ItemSlot_ItemSlotOffHand)) + shaman.ApplyFlametongueImbueToItem(shaman.ItemSwap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotOffHand)) } } diff --git a/ui/core/proto_utils/database.ts b/ui/core/proto_utils/database.ts index 3391f717b7..fbbad871cb 100644 --- a/ui/core/proto_utils/database.ts +++ b/ui/core/proto_utils/database.ts @@ -255,11 +255,12 @@ export class Database { } lookupItemSwap(itemSwap: ItemSwap): ItemSwapGear { - const gearMap = itemSwap.items.reduce>>((gearMap, itemSpec) => { + const gearMap = itemSwap.items.reduce>>((gearMap, itemSpec, slot) => { const item = this.lookupItemSpec(itemSpec); if (item) { - const itemSlots = getEligibleItemSlots(item.item); - const assignedSlot = itemSlots.find(slot => !gearMap[slot]); + const eligibleItemSlots = getEligibleItemSlots(item.item); + const isSwapSlotMatch = eligibleItemSlots.some(eligibleItemSlot => eligibleItemSlot === slot); + const assignedSlot = isSwapSlotMatch ? (slot as ItemSlot) : eligibleItemSlots[0]; if (typeof assignedSlot === 'number') gearMap[assignedSlot] = item; } return gearMap; diff --git a/ui/shaman/elemental/sim.ts b/ui/shaman/elemental/sim.ts index 6d14ea147c..b6e85741ec 100644 --- a/ui/shaman/elemental/sim.ts +++ b/ui/shaman/elemental/sim.ts @@ -117,7 +117,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecElementalShaman, { OtherInputs.DistanceFromTarget, ], }, - itemSwapSlots: [ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ItemSlot.ItemSlotBack, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], customSections: [ShamanInputs.TotemsSection], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. From f886ec402b8e273d4f3dc8ded9f00cc176a49fe9 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 11:51:46 +0100 Subject: [PATCH 015/127] Fix procs --- sim/common/cata/enchant_effects.go | 6 +++--- sim/core/item_swaps.go | 7 ++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 9cf7bc20b1..f338d3d666 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -394,7 +394,7 @@ func init() { character := agent.GetCharacter() statAura := character.NewTemporaryStatsAura( - "Darkglow Embroidery Cata", + "Darkglow Embroidery Proc", core.ActionID{SpellID: 75173}, stats.Stats{stats.Spirit: 580}, time.Second*15, @@ -423,14 +423,14 @@ func init() { character := agent.GetCharacter() statAura := character.NewTemporaryStatsAura( - "Swordguard Embroidery Cata", + "Swordguard Embroidery Proc", core.ActionID{SpellID: 75178}, stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, time.Second*15, ) aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Swordguard Embroidery Cataa", + Name: "Swordguard Embroidery Cata", ActionID: core.ActionID{SpellID: 75176}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskMeleeOrRanged, diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index b2b4f7e7b0..11d61ece51 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -186,7 +186,12 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aur if procMask == ProcMaskUnknown { aura.Deactivate(sim) } else { - aura.Activate(sim) + if !aura.IsActive() { + aura.Activate(sim) + if aura.Icd != nil { + aura.Icd.Use(sim) + } + } } }) } From 12e88af0caa74d66adf11439f3c425f94ea3d584 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 14:13:20 +0100 Subject: [PATCH 016/127] Update results --- sim/death_knight/unholy/TestUnholy.results | 2 +- .../retribution/TestRetribution.results | 1368 ++++++++--------- .../enhancement/TestEnhancement.results | 1260 +++++++-------- 3 files changed, 1315 insertions(+), 1315 deletions(-) diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 07a4206d3e..2b27b5fe84 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -304,7 +304,7 @@ dps_results: { value: { dps: 43120.17978 tps: 32013.58168 - hps: 601.25407 + hps: 601.25406 } } dps_results: { diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index d6755535f9..a25565fd12 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -38,2397 +38,2397 @@ character_stats_results: { dps_results: { key: "TestRetribution-AllItems-AgileShadowspiritDiamond" value: { - dps: 39227.41154 - tps: 39097.7941 + dps: 39232.4297 + tps: 39102.81226 } } dps_results: { key: "TestRetribution-AllItems-Althor'sAbacus-50366" value: { - dps: 36830.58455 - tps: 36700.42789 + dps: 36827.10125 + tps: 36696.94459 } } dps_results: { key: "TestRetribution-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37772.56457 - tps: 37637.60349 + dps: 37766.26905 + tps: 37631.30797 } } dps_results: { key: "TestRetribution-AllItems-Anhuur'sHymnal-55889" value: { - dps: 36653.10497 - tps: 36518.88787 + dps: 36650.47403 + tps: 36516.25692 } } dps_results: { key: "TestRetribution-AllItems-Anhuur'sHymnal-56407" value: { - dps: 36653.22681 - tps: 36519.0097 + dps: 36650.59586 + tps: 36516.37875 } } dps_results: { key: "TestRetribution-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 38445.23783 - tps: 38309.19333 + dps: 38435.20124 + tps: 38299.15673 } } dps_results: { key: "TestRetribution-AllItems-ArmorofRadiantGlory" value: { - dps: 29536.12549 - tps: 29441.77964 + dps: 29543.32595 + tps: 29448.98009 } } dps_results: { key: "TestRetribution-AllItems-ArrowofTime-72897" value: { - dps: 37722.74082 - tps: 37598.16168 + dps: 37723.64746 + tps: 37599.06831 } } dps_results: { key: "TestRetribution-AllItems-AustereShadowspiritDiamond" value: { - dps: 38619.694 - tps: 38489.68458 + dps: 38624.46438 + tps: 38494.45495 } } dps_results: { key: "TestRetribution-AllItems-BattlearmorofImmolation" value: { - dps: 31152.6381 - tps: 31063.22723 + dps: 31157.23155 + tps: 31067.82067 } } dps_results: { key: "TestRetribution-AllItems-BattleplateofImmolation" value: { - dps: 35180.9927 - tps: 35052.3207 + dps: 35181.835 + tps: 35053.163 } } dps_results: { key: "TestRetribution-AllItems-BattleplateofRadiantGlory" value: { - dps: 35328.53217 - tps: 35249.44882 + dps: 35326.7369 + tps: 35247.65356 } } dps_results: { key: "TestRetribution-AllItems-BaubleofTrueBlood-50726" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 hps: 127.67148 } } dps_results: { key: "TestRetribution-AllItems-BedrockTalisman-58182" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-BellofEnragingResonance-59326" value: { - dps: 37053.80559 - tps: 36924.33031 + dps: 37050.6719 + tps: 36921.19662 } } dps_results: { key: "TestRetribution-AllItems-BellofEnragingResonance-65053" value: { - dps: 37111.12064 - tps: 36981.64536 + dps: 37108.8093 + tps: 36979.33402 } } dps_results: { key: "TestRetribution-AllItems-BindingPromise-67037" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 37162.98485 - tps: 37029.57923 + dps: 37161.77664 + tps: 37028.37102 } } dps_results: { key: "TestRetribution-AllItems-BloodofIsiset-55995" value: { - dps: 37092.72056 - tps: 36958.50345 + dps: 37090.24424 + tps: 36956.02713 } } dps_results: { key: "TestRetribution-AllItems-BloodofIsiset-56414" value: { - dps: 37153.10139 - tps: 37018.88428 + dps: 37150.64393 + tps: 37016.42682 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36899.75053 - tps: 36766.38297 + dps: 36895.17769 + tps: 36761.81014 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 36714.77474 - tps: 36578.73024 + dps: 36706.0974 + tps: 36570.05289 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 37395.07513 - tps: 37259.03062 + dps: 37389.49683 + tps: 37253.45232 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 36932.26271 - tps: 36802.78743 + dps: 36928.7631 + tps: 36799.28782 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 37188.3013 - tps: 37054.3596 + dps: 37187.56407 + tps: 37053.62236 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 36693.17756 - tps: 36558.96045 + dps: 36691.02207 + tps: 36556.80496 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 37669.10186 - tps: 37534.88475 + dps: 37666.48151 + tps: 37532.2644 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-77210" value: { - dps: 39254.93381 - tps: 39121.45485 + dps: 39252.9959 + tps: 39119.51694 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-77982" value: { - dps: 39258.28046 - tps: 39127.58544 + dps: 39259.99394 + tps: 39129.29891 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-78002" value: { - dps: 39560.69981 - tps: 39431.13658 + dps: 39561.10209 + tps: 39431.53886 } } dps_results: { key: "TestRetribution-AllItems-BottledLightning-66879" value: { - dps: 36885.85783 - tps: 36756.23834 + dps: 36879.30404 + tps: 36749.68455 } } dps_results: { key: "TestRetribution-AllItems-BottledWishes-77114" value: { - dps: 36866.79182 - tps: 36734.00497 + dps: 36870.99165 + tps: 36738.2048 } } dps_results: { key: "TestRetribution-AllItems-BracingShadowspiritDiamond" value: { - dps: 38750.51078 - tps: 37850.18759 + dps: 38756.04108 + tps: 37855.60729 } } dps_results: { key: "TestRetribution-AllItems-Brawler'sTrophy-232015" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 39847.18194 - tps: 39717.17252 + dps: 39852.06623 + tps: 39722.05681 } } dps_results: { key: "TestRetribution-AllItems-BurningShadowspiritDiamond" value: { - dps: 39191.32518 - tps: 39058.84391 + dps: 39196.92533 + tps: 39064.44406 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37138.48934 - tps: 37002.44483 + dps: 37128.25335 + tps: 36992.20885 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 36753.35706 - tps: 36617.31255 + dps: 36744.67971 + tps: 36608.63521 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 37836.01932 - tps: 37699.97481 + dps: 37830.44102 + tps: 37694.39651 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 37406.62227 - tps: 37271.93069 + dps: 37402.58232 + tps: 37267.89074 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 36754.90001 - tps: 36620.6829 + dps: 36752.26906 + tps: 36618.05195 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 38191.72681 - tps: 38057.5097 + dps: 38189.09586 + tps: 38054.87876 } } dps_results: { key: "TestRetribution-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 39236.25161 - tps: 39106.63417 + dps: 39241.2721 + tps: 39111.65467 } } dps_results: { key: "TestRetribution-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 37459.3259 - tps: 37329.85062 + dps: 37455.90038 + tps: 37326.4251 } } dps_results: { key: "TestRetribution-AllItems-CoreofRipeness-58184" value: { - dps: 36888.76697 - tps: 36759.22319 + dps: 36868.06526 + tps: 36737.81121 } } dps_results: { key: "TestRetribution-AllItems-CorpseTongueCoin-50349" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 39300.79411 - tps: 39170.12665 + dps: 39303.15819 + tps: 39172.49073 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 39020.54232 - tps: 38889.27903 + dps: 39022.44249 + tps: 38891.1792 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 39795.21434 - tps: 39663.04416 + dps: 39796.34989 + tps: 39664.17971 } } dps_results: { key: "TestRetribution-AllItems-CrushingWeight-59506" value: { - dps: 37972.89238 - tps: 37834.15096 + dps: 37964.58897 + tps: 37825.84755 } } dps_results: { key: "TestRetribution-AllItems-CrushingWeight-65118" value: { - dps: 38358.35788 - tps: 38224.05814 + dps: 38355.22916 + tps: 38220.92943 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-77208" value: { - dps: 37799.04426 - tps: 37669.09742 + dps: 37794.9907 + tps: 37665.04385 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-77980" value: { - dps: 37554.75811 - tps: 37425.05229 + dps: 37552.22852 + tps: 37422.5227 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-78000" value: { - dps: 37802.71031 - tps: 37668.95925 + dps: 37798.62552 + tps: 37664.87445 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 38298.5515 - tps: 38162.95133 + dps: 38299.52686 + tps: 38163.92669 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 37784.82489 - tps: 37647.83098 + dps: 37787.65848 + tps: 37650.66457 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 36721.91685 - tps: 36588.81178 + dps: 36715.5807 + tps: 36582.47564 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 37516.43379 - tps: 37383.81645 + dps: 37513.70062 + tps: 37381.08327 } } dps_results: { key: "TestRetribution-AllItems-Deathbringer'sWill-50363" value: { - dps: 37091.46786 - tps: 36968.57315 + dps: 37090.02363 + tps: 36967.12892 } } dps_results: { key: "TestRetribution-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 38791.48998 - tps: 38661.87254 + dps: 38796.35448 + tps: 38666.73704 } } dps_results: { key: "TestRetribution-AllItems-DislodgedForeignObject-50348" value: { - dps: 37163.74424 - tps: 37031.89069 + dps: 37168.48555 + tps: 37036.632 } } dps_results: { key: "TestRetribution-AllItems-Dwyer'sCaber-70141" value: { - dps: 38599.7706 - tps: 38466.39609 + dps: 38597.75943 + tps: 38464.38493 } } dps_results: { key: "TestRetribution-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 38619.694 - tps: 38489.68458 + dps: 38624.46438 + tps: 38494.45495 } } dps_results: { key: "TestRetribution-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 36709.67337 - tps: 36576.71515 + dps: 36697.92044 + tps: 36564.96222 } } dps_results: { key: "TestRetribution-AllItems-EmberShadowspiritDiamond" value: { - dps: 38679.50472 - tps: 38547.72688 + dps: 38687.37496 + tps: 38555.59712 } } dps_results: { key: "TestRetribution-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 38791.48998 - tps: 38661.87254 + dps: 38796.35448 + tps: 38666.73704 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheCyclone-59473" value: { - dps: 37539.82328 - tps: 37406.99119 + dps: 37545.03319 + tps: 37412.2011 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheCyclone-65140" value: { - dps: 37798.59459 - tps: 37665.23476 + dps: 37800.76636 + tps: 37667.40653 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 38085.18505 - tps: 37958.17323 + dps: 38087.9131 + tps: 37960.90128 } } dps_results: { key: "TestRetribution-AllItems-EternalShadowspiritDiamond" value: { - dps: 38619.694 - tps: 38489.68458 + dps: 38624.46438 + tps: 38494.45495 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77200" value: { - dps: 39442.5324 - tps: 39308.31529 + dps: 39439.91204 + tps: 39305.69493 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77977" value: { - dps: 39123.11174 - tps: 38988.89463 + dps: 39120.49138 + tps: 38986.27427 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77997" value: { - dps: 39793.89512 - tps: 39659.67801 + dps: 39791.27477 + tps: 39657.05766 } } dps_results: { key: "TestRetribution-AllItems-FallofMortality-59500" value: { - dps: 36721.91685 - tps: 36588.81178 + dps: 36715.5807 + tps: 36582.47564 } } dps_results: { key: "TestRetribution-AllItems-FallofMortality-65124" value: { - dps: 36808.68046 - tps: 36679.09978 + dps: 36804.35427 + tps: 36674.77359 } } dps_results: { key: "TestRetribution-AllItems-FieryQuintessence-69000" value: { - dps: 36364.24148 - tps: 36231.29476 + dps: 36410.68962 + tps: 36277.20158 } } dps_results: { key: "TestRetribution-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36920.55336 - tps: 36784.50885 + dps: 36910.6322 + tps: 36774.58769 } } dps_results: { key: "TestRetribution-AllItems-Figurine-DreamOwl-52354" value: { - dps: 36841.32634 - tps: 36708.56379 + dps: 36832.87101 + tps: 36700.10846 } } dps_results: { key: "TestRetribution-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 36889.78509 - tps: 36757.23771 + dps: 36879.11236 + tps: 36746.56498 } } dps_results: { key: "TestRetribution-AllItems-Figurine-KingofBoars-52351" value: { - dps: 37878.17564 - tps: 37742.13113 + dps: 37872.70375 + tps: 37736.65924 } } dps_results: { key: "TestRetribution-AllItems-FireoftheDeep-77117" value: { - dps: 37469.6433 - tps: 37335.42619 + dps: 37467.28472 + tps: 37333.06762 } } dps_results: { key: "TestRetribution-AllItems-FleetShadowspiritDiamond" value: { - dps: 38723.83613 - tps: 38593.82671 + dps: 38728.63682 + tps: 38598.6274 } } dps_results: { key: "TestRetribution-AllItems-FluidDeath-58181" value: { - dps: 37161.224 - tps: 37027.38863 + dps: 37159.11555 + tps: 37025.28018 } } dps_results: { key: "TestRetribution-AllItems-ForlornShadowspiritDiamond" value: { - dps: 38750.51078 - tps: 38618.02951 + dps: 38756.04108 + tps: 38623.55981 } } dps_results: { key: "TestRetribution-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 37714.83875 - tps: 37585.29147 + dps: 37709.83899 + tps: 37580.29172 } } dps_results: { key: "TestRetribution-AllItems-FuryofAngerforge-59461" value: { - dps: 37923.88051 - tps: 37794.77773 + dps: 37922.21112 + tps: 37793.10835 } } dps_results: { key: "TestRetribution-AllItems-GaleofShadows-56138" value: { - dps: 37150.22183 - tps: 37019.43804 + dps: 37148.4297 + tps: 37017.64591 } } dps_results: { key: "TestRetribution-AllItems-GaleofShadows-56462" value: { - dps: 37130.17217 - tps: 36996.12177 + dps: 37129.99926 + tps: 36995.94885 } } dps_results: { key: "TestRetribution-AllItems-GearDetector-61462" value: { - dps: 37257.82358 - tps: 37128.89975 + dps: 37249.9887 + tps: 37121.06487 } } dps_results: { key: "TestRetribution-AllItems-Gladiator'sVindication" value: { - dps: 29451.66222 - tps: 29363.48518 + dps: 29458.10109 + tps: 29369.92405 } } dps_results: { key: "TestRetribution-AllItems-GlowingTwilightScale-54589" value: { - dps: 36832.23937 - tps: 36702.75446 + dps: 36829.27308 + tps: 36699.78816 } } dps_results: { key: "TestRetribution-AllItems-GraceoftheHerald-55266" value: { - dps: 37003.76733 - tps: 36870.56611 + dps: 37003.92596 + tps: 36870.72475 } } dps_results: { key: "TestRetribution-AllItems-GraceoftheHerald-56295" value: { - dps: 37289.12179 - tps: 37155.60531 + dps: 37290.39411 + tps: 37156.87764 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-77191" value: { - dps: 40938.66763 - tps: 40808.65821 + dps: 40943.55192 + tps: 40813.5425 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-78478" value: { - dps: 41160.94587 - tps: 41030.93645 + dps: 41165.83017 + tps: 41035.82074 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-78487" value: { - dps: 40742.93008 - tps: 40612.92065 + dps: 40747.81437 + tps: 40617.80495 } } dps_results: { key: "TestRetribution-AllItems-HarmlightToken-63839" value: { - dps: 36772.49604 - tps: 36639.79281 + dps: 36765.34544 + tps: 36632.6422 } } dps_results: { key: "TestRetribution-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 37807.77279 - tps: 37673.55568 + dps: 37805.53712 + tps: 37671.32002 } } dps_results: { key: "TestRetribution-AllItems-HeartofIgnacious-59514" value: { - dps: 37136.42305 - tps: 37003.40338 + dps: 37106.19921 + tps: 36973.77586 } } dps_results: { key: "TestRetribution-AllItems-HeartofIgnacious-65110" value: { - dps: 37279.40236 - tps: 37147.9195 + dps: 37270.70262 + tps: 37139.21976 } } dps_results: { key: "TestRetribution-AllItems-HeartofRage-59224" value: { - dps: 38746.86572 - tps: 38616.8563 + dps: 38751.66799 + tps: 38621.65857 } } dps_results: { key: "TestRetribution-AllItems-HeartofSolace-55868" value: { - dps: 38069.83148 - tps: 37939.04769 + dps: 38068.03934 + tps: 37937.25555 } } dps_results: { key: "TestRetribution-AllItems-HeartofSolace-56393" value: { - dps: 38187.54127 - tps: 38053.49087 + dps: 38187.36835 + tps: 38053.31795 } } dps_results: { key: "TestRetribution-AllItems-HeartofThunder-55845" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-HeartofThunder-56370" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-HeartoftheVile-66969" value: { - dps: 37047.48213 - tps: 36914.65598 + dps: 37045.24064 + tps: 36912.41449 } } dps_results: { key: "TestRetribution-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 38791.48998 - tps: 38661.87254 + dps: 38796.35448 + tps: 38666.73704 } } dps_results: { key: "TestRetribution-AllItems-ImpatienceofYouth-62464" value: { - dps: 38034.59423 - tps: 37898.54972 + dps: 38029.13578 + tps: 37893.09127 } } dps_results: { key: "TestRetribution-AllItems-ImpatienceofYouth-62469" value: { - dps: 38034.59423 - tps: 37898.54972 + dps: 38029.13578 + tps: 37893.09127 } } dps_results: { key: "TestRetribution-AllItems-ImpetuousQuery-55881" value: { - dps: 37092.72056 - tps: 36958.50345 + dps: 37090.24424 + tps: 36956.02713 } } dps_results: { key: "TestRetribution-AllItems-ImpetuousQuery-56406" value: { - dps: 37153.10139 - tps: 37018.88428 + dps: 37150.64393 + tps: 37016.42682 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-77211" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-77983" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-78003" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 37128.94913 - tps: 36989.78889 + dps: 37143.54288 + tps: 37004.38264 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 37286.13303 - tps: 37145.4915 + dps: 37282.44494 + tps: 37141.80341 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 37590.51632 - tps: 37455.28447 + dps: 37586.93665 + tps: 37451.70479 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 36872.75638 - tps: 36739.35077 + dps: 36870.91422 + tps: 36737.5086 } } dps_results: { key: "TestRetribution-AllItems-JarofAncientRemedies-59354" value: { - dps: 36794.91399 - tps: 36683.52804 + dps: 36789.75075 + tps: 36678.3648 } } dps_results: { key: "TestRetribution-AllItems-JarofAncientRemedies-65029" value: { - dps: 36812.25646 - tps: 36704.04673 + dps: 36809.30825 + tps: 36701.09852 } } dps_results: { key: "TestRetribution-AllItems-JawsofDefeat-68926" value: { - dps: 36931.61725 - tps: 36799.89688 + dps: 36912.38591 + tps: 36779.95527 } } dps_results: { key: "TestRetribution-AllItems-JawsofDefeat-69111" value: { - dps: 36861.93377 - tps: 36734.33532 + dps: 36843.0737 + tps: 36714.76499 } } dps_results: { key: "TestRetribution-AllItems-JujuofNimbleness-63840" value: { - dps: 37162.98485 - tps: 37029.57923 + dps: 37161.77664 + tps: 37028.37102 } } dps_results: { key: "TestRetribution-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 36950.9357 - tps: 36817.82011 + dps: 36948.76133 + tps: 36815.64574 } } dps_results: { key: "TestRetribution-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 37147.72842 - tps: 37012.46425 + dps: 37146.83282 + tps: 37011.56865 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-77194" value: { - dps: 40437.14052 - tps: 40306.98047 + dps: 40442.82626 + tps: 40312.66621 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-78473" value: { - dps: 40629.4157 - tps: 40499.32278 + dps: 40637.16118 + tps: 40507.06826 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-78482" value: { - dps: 40412.72771 - tps: 40283.54121 + dps: 40416.96468 + tps: 40287.77817 } } dps_results: { key: "TestRetribution-AllItems-KiroptyricSigil-77113" value: { - dps: 37350.73446 - tps: 37217.94761 + dps: 37353.96176 + tps: 37221.17491 } } dps_results: { key: "TestRetribution-AllItems-KvaldirBattleStandard-59685" value: { - dps: 37499.2654 - tps: 37367.67185 + dps: 37503.95461 + tps: 37372.36106 } } dps_results: { key: "TestRetribution-AllItems-KvaldirBattleStandard-59689" value: { - dps: 37499.2654 - tps: 37367.67185 + dps: 37503.95461 + tps: 37372.36106 } } dps_results: { key: "TestRetribution-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 36884.99402 - tps: 36751.61794 + dps: 36891.5273 + tps: 36758.15122 } } dps_results: { key: "TestRetribution-AllItems-LeadenDespair-55816" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-LeadenDespair-56347" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-LeftEyeofRajh-56102" value: { - dps: 37879.30795 - tps: 37749.93135 + dps: 37887.01056 + tps: 37757.63396 } } dps_results: { key: "TestRetribution-AllItems-LeftEyeofRajh-56427" value: { - dps: 37886.5325 - tps: 37757.1559 + dps: 37895.38271 + tps: 37766.00611 } } dps_results: { key: "TestRetribution-AllItems-LicensetoSlay-58180" value: { - dps: 37854.26386 - tps: 37720.04675 + dps: 37851.64351 + tps: 37717.4264 } } dps_results: { key: "TestRetribution-AllItems-MagnetiteMirror-55814" value: { - dps: 37740.17316 - tps: 37612.38932 + dps: 37746.02683 + tps: 37618.243 } } dps_results: { key: "TestRetribution-AllItems-MagnetiteMirror-56345" value: { - dps: 37964.23448 - tps: 37834.88934 + dps: 37968.68396 + tps: 37839.33883 } } dps_results: { key: "TestRetribution-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-MarkofKhardros-56132" value: { - dps: 37698.41103 - tps: 37565.00542 + dps: 37696.83133 + tps: 37563.42571 } } dps_results: { key: "TestRetribution-AllItems-MarkofKhardros-56458" value: { - dps: 37859.01652 - tps: 37725.6109 + dps: 37857.48643 + tps: 37724.08082 } } dps_results: { key: "TestRetribution-AllItems-MatrixRestabilizer-68994" value: { - dps: 38254.10935 - tps: 38120.27398 + dps: 38251.96684 + tps: 38118.13147 } } dps_results: { key: "TestRetribution-AllItems-MatrixRestabilizer-69150" value: { - dps: 38615.64537 - tps: 38481.65888 + dps: 38615.54565 + tps: 38481.55915 } } dps_results: { key: "TestRetribution-AllItems-MightoftheOcean-55251" value: { - dps: 36870.68396 - tps: 36737.27835 + dps: 36868.72538 + tps: 36735.31976 } } dps_results: { key: "TestRetribution-AllItems-MightoftheOcean-56285" value: { - dps: 37206.97991 - tps: 37073.57429 + dps: 37205.02132 + tps: 37071.61571 } } dps_results: { key: "TestRetribution-AllItems-MirrorofBrokenImages-62466" value: { - dps: 37218.97138 - tps: 37084.75427 + dps: 37216.5345 + tps: 37082.31739 } } dps_results: { key: "TestRetribution-AllItems-MirrorofBrokenImages-62471" value: { - dps: 37218.97138 - tps: 37084.75427 + dps: 37216.5345 + tps: 37082.31739 } } dps_results: { key: "TestRetribution-AllItems-MithrilStopwatch-232013" value: { - dps: 37004.85984 - tps: 36875.38456 + dps: 37001.43432 + tps: 36871.95904 } } dps_results: { key: "TestRetribution-AllItems-MoonwellChalice-70142" value: { - dps: 37196.15551 - tps: 37063.54309 + dps: 37189.07335 + tps: 37056.46093 } } dps_results: { key: "TestRetribution-AllItems-MoonwellPhial-70143" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-NecromanticFocus-68982" value: { - dps: 37581.41567 - tps: 37451.8684 + dps: 37576.13366 + tps: 37446.58638 } } dps_results: { key: "TestRetribution-AllItems-NecromanticFocus-69139" value: { - dps: 37700.65904 - tps: 37571.2958 + dps: 37697.50224 + tps: 37568.139 } } dps_results: { key: "TestRetribution-AllItems-Oremantle'sFavor-61448" value: { - dps: 37490.12884 - tps: 37354.08434 + dps: 37480.84212 + tps: 37344.79761 } } dps_results: { key: "TestRetribution-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 36766.31098 - tps: 36632.90392 + dps: 36757.58599 + tps: 36624.17894 } } dps_results: { key: "TestRetribution-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 36812.24143 - tps: 36682.76615 + dps: 36809.1769 + tps: 36679.70162 } } dps_results: { key: "TestRetribution-AllItems-PorcelainCrab-55237" value: { - dps: 37045.03784 - tps: 36910.82073 + dps: 37043.28148 + tps: 36909.06437 } } dps_results: { key: "TestRetribution-AllItems-PorcelainCrab-56280" value: { - dps: 37416.16545 - tps: 37281.94834 + dps: 37413.01792 + tps: 37278.80081 } } dps_results: { key: "TestRetribution-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 38619.694 - tps: 38489.68458 + dps: 38624.46438 + tps: 38494.45495 } } dps_results: { key: "TestRetribution-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 37293.62261 - tps: 37161.55289 + dps: 37285.55784 + tps: 37153.48812 } } dps_results: { key: "TestRetribution-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 37688.29338 - tps: 37553.8058 + dps: 37672.71132 + tps: 37538.22374 } } dps_results: { key: "TestRetribution-AllItems-Rainsong-55854" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Rainsong-56377" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ReflectionoftheLight-77115" value: { - dps: 36564.36342 - tps: 36430.95781 + dps: 36562.40484 + tps: 36428.99923 } } dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattlearmor" value: { - dps: 30779.04389 - tps: 30680.36024 + dps: 30783.49855 + tps: 30684.8149 } } dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattleplate" value: { - dps: 33313.27973 - tps: 33230.32389 + dps: 33311.34306 + tps: 33228.38722 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77201" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77978" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77998" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 39233.42859 - tps: 39103.41917 + dps: 39238.31288 + tps: 39108.30346 } } dps_results: { key: "TestRetribution-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 39054.27896 - tps: 38924.26954 + dps: 39059.16325 + tps: 38929.15383 } } dps_results: { key: "TestRetribution-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37520.63806 - tps: 37385.06911 + dps: 37511.50283 + tps: 37375.93388 } } dps_results: { key: "TestRetribution-AllItems-RightEyeofRajh-56100" value: { - dps: 37431.64448 - tps: 37297.42737 + dps: 37429.01353 + tps: 37294.79642 } } dps_results: { key: "TestRetribution-AllItems-RightEyeofRajh-56431" value: { - dps: 37521.81291 - tps: 37387.5958 + dps: 37519.19256 + tps: 37384.97545 } } dps_results: { key: "TestRetribution-AllItems-RosaryofLight-72901" value: { - dps: 38712.54039 - tps: 38580.95983 + dps: 38711.97748 + tps: 38580.39692 } } dps_results: { key: "TestRetribution-AllItems-RottingSkull-77116" value: { - dps: 38227.83491 - tps: 38097.79988 + dps: 38227.38323 + tps: 38097.34819 } } dps_results: { key: "TestRetribution-AllItems-RuneofZeth-68998" value: { - dps: 37070.70158 - tps: 36944.67421 + dps: 37069.08644 + tps: 36943.05907 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 37064.52987 - tps: 36928.48537 + dps: 37054.32126 + tps: 36918.27676 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 37087.26146 - tps: 36951.21695 + dps: 37077.10881 + tps: 36941.0643 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 36736.61946 - tps: 36600.57495 + dps: 36727.94211 + tps: 36591.8976 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 36741.55491 - tps: 36605.5104 + dps: 36732.87756 + tps: 36596.83305 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 37644.73096 - tps: 37508.68645 + dps: 37639.15266 + tps: 37503.10816 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 37701.1365 - tps: 37565.09199 + dps: 37695.55821 + tps: 37559.5137 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 37219.5562 - tps: 37086.56196 + dps: 37216.50234 + tps: 37083.50811 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 37299.02211 - tps: 37164.27219 + dps: 37296.96306 + tps: 37162.21314 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 36732.62518 - tps: 36598.40807 + dps: 36729.99423 + tps: 36595.77712 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 36735.50526 - tps: 36601.28815 + dps: 36732.87431 + tps: 36598.6572 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 37949.61128 - tps: 37815.39417 + dps: 37946.99093 + tps: 37812.77382 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 38038.06806 - tps: 37903.85095 + dps: 38035.44771 + tps: 37901.2306 } } dps_results: { key: "TestRetribution-AllItems-ScalesofLife-68915" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 hps: 414.80163 } } dps_results: { key: "TestRetribution-AllItems-ScalesofLife-69109" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 hps: 467.89235 } } dps_results: { key: "TestRetribution-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 37361.38891 - tps: 37227.64736 + dps: 37358.81855 + tps: 37225.07699 } } dps_results: { key: "TestRetribution-AllItems-SeaStar-55256" value: { - dps: 36682.37246 - tps: 36546.32796 + dps: 36673.69512 + tps: 36537.65061 } } dps_results: { key: "TestRetribution-AllItems-SeaStar-56290" value: { - dps: 36710.69764 - tps: 36574.65313 + dps: 36702.02029 + tps: 36565.97578 } } dps_results: { key: "TestRetribution-AllItems-Shadowmourne-49623" value: { - dps: 41094.84947 - tps: 40963.48251 + dps: 41097.54016 + tps: 40966.17319 } } dps_results: { key: "TestRetribution-AllItems-ShardofWoe-60233" value: { - dps: 37423.6512 - tps: 37280.32336 + dps: 37419.55118 + tps: 37276.22333 } } dps_results: { key: "TestRetribution-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 37907.96106 - tps: 37780.58813 + dps: 37908.35324 + tps: 37780.98031 } } dps_results: { key: "TestRetribution-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Skardyn'sGrace-56115" value: { - dps: 37304.47579 - tps: 37168.90683 + dps: 37294.75945 + tps: 37159.19049 } } dps_results: { key: "TestRetribution-AllItems-Skardyn'sGrace-56440" value: { - dps: 37375.14247 - tps: 37239.57352 + dps: 37365.7263 + tps: 37230.15735 } } dps_results: { key: "TestRetribution-AllItems-Sorrowsong-55879" value: { - dps: 37146.12712 - tps: 37011.91001 + dps: 37143.65079 + tps: 37009.43368 } } dps_results: { key: "TestRetribution-AllItems-Sorrowsong-56400" value: { - dps: 37213.50166 - tps: 37079.28455 + dps: 37211.0442 + tps: 37076.82709 } } dps_results: { key: "TestRetribution-AllItems-Soul'sAnguish-66994" value: { - dps: 36870.68396 - tps: 36737.27835 + dps: 36868.72538 + tps: 36735.31976 } } dps_results: { key: "TestRetribution-AllItems-SoulCasket-58183" value: { - dps: 37319.1252 - tps: 37183.0807 + dps: 37310.50331 + tps: 37174.4588 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77206" value: { - dps: 37803.65309 - tps: 37669.43598 + dps: 37801.93538 + tps: 37667.71827 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77970" value: { - dps: 37688.89506 - tps: 37554.67795 + dps: 37685.07815 + tps: 37550.86104 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77990" value: { - dps: 38027.96179 - tps: 37893.74468 + dps: 38025.77716 + tps: 37891.56005 } } dps_results: { key: "TestRetribution-AllItems-SpidersilkSpindle-68981" value: { - dps: 37332.41415 - tps: 37198.19704 + dps: 37330.0127 + tps: 37195.79559 } } dps_results: { key: "TestRetribution-AllItems-SpidersilkSpindle-69138" value: { - dps: 37423.90025 - tps: 37289.68314 + dps: 37421.52738 + tps: 37287.31027 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77202" value: { - dps: 37984.18391 - tps: 37848.08141 + dps: 37995.29544 + tps: 37859.19295 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77973" value: { - dps: 37404.69582 - tps: 37260.35233 + dps: 37412.42299 + tps: 37268.0795 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77993" value: { - dps: 38148.24294 - tps: 38010.98999 + dps: 38157.94703 + tps: 38020.69408 } } dps_results: { key: "TestRetribution-AllItems-StayofExecution-68996" value: { - dps: 36649.2968 - tps: 36513.25229 + dps: 36640.63004 + tps: 36504.58553 } } dps_results: { key: "TestRetribution-AllItems-Stonemother'sKiss-61411" value: { - dps: 36873.11792 - tps: 36739.4437 + dps: 36870.33905 + tps: 36736.66483 } } dps_results: { key: "TestRetribution-AllItems-StumpofTime-62465" value: { - dps: 36697.89247 - tps: 36563.67536 + dps: 36694.29039 + tps: 36560.07328 } } dps_results: { key: "TestRetribution-AllItems-StumpofTime-62470" value: { - dps: 36700.42197 - tps: 36566.20486 + dps: 36697.80162 + tps: 36563.58451 } } dps_results: { key: "TestRetribution-AllItems-SymbioticWorm-59332" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-SymbioticWorm-65048" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 37168.01838 - tps: 37035.88438 + dps: 37160.7918 + tps: 37028.65779 } } dps_results: { key: "TestRetribution-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 37852.94647 - tps: 37723.5607 + dps: 37853.2513 + tps: 37723.86554 } } dps_results: { key: "TestRetribution-AllItems-TearofBlood-55819" value: { - dps: 36781.98774 - tps: 36647.71458 + dps: 36780.48484 + tps: 36646.21168 } } dps_results: { key: "TestRetribution-AllItems-TearofBlood-56351" value: { - dps: 36796.78665 - tps: 36665.44025 + dps: 36789.26846 + tps: 36657.92206 } } dps_results: { key: "TestRetribution-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 37047.30679 - tps: 36913.08968 + dps: 37044.80932 + tps: 36910.59221 } } dps_results: { key: "TestRetribution-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 37185.7917 - tps: 37051.57459 + dps: 37183.33424 + tps: 37049.11713 } } dps_results: { key: "TestRetribution-AllItems-TheHungerer-68927" value: { - dps: 37688.07195 - tps: 37546.90112 + dps: 37686.39255 + tps: 37545.22173 } } dps_results: { key: "TestRetribution-AllItems-TheHungerer-69112" value: { - dps: 37883.62652 - tps: 37739.29238 + dps: 37882.15141 + tps: 37737.81728 } } dps_results: { key: "TestRetribution-AllItems-Theralion'sMirror-59519" value: { - dps: 37020.89075 - tps: 36887.78568 + dps: 37014.55113 + tps: 36881.44607 } } dps_results: { key: "TestRetribution-AllItems-Theralion'sMirror-65105" value: { - dps: 37171.96153 - tps: 37042.38085 + dps: 37168.38192 + tps: 37038.80124 } } dps_results: { key: "TestRetribution-AllItems-Throngus'sFinger-56121" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Throngus'sFinger-56449" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-Tia'sGrace-55874" value: { - dps: 37460.84728 - tps: 37327.10573 + dps: 37458.35371 + tps: 37324.61216 } } dps_results: { key: "TestRetribution-AllItems-Tia'sGrace-56394" value: { - dps: 37591.24585 - tps: 37457.5043 + dps: 37589.30384 + tps: 37455.56228 } } dps_results: { key: "TestRetribution-AllItems-TinyAbominationinaJar-50706" value: { - dps: 37942.55818 - tps: 37820.11854 + dps: 37941.80539 + tps: 37819.36575 } } dps_results: { key: "TestRetribution-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 35869.56807 - tps: 35764.54315 + dps: 35869.19488 + tps: 35764.16995 } } dps_results: { key: "TestRetribution-AllItems-UnheededWarning-59520" value: { - dps: 37491.6478 - tps: 37357.90624 + dps: 37489.18747 + tps: 37355.44591 } } dps_results: { key: "TestRetribution-AllItems-UnquenchableFlame-67101" value: { - dps: 36584.9738 - tps: 36449.06605 + dps: 36571.58538 + tps: 36435.67762 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-62463" value: { - dps: 37558.69686 - tps: 37422.65236 + dps: 37548.5651 + tps: 37412.5206 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-62468" value: { - dps: 37558.69686 - tps: 37422.65236 + dps: 37548.5651 + tps: 37412.5206 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-68709" value: { - dps: 37558.69686 - tps: 37422.65236 + dps: 37548.5651 + tps: 37412.5206 } } dps_results: { key: "TestRetribution-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 37295.59311 - tps: 37165.8873 + dps: 37293.87763 + tps: 37164.17182 } } dps_results: { key: "TestRetribution-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 37437.25599 - tps: 37307.30915 + dps: 37434.25959 + tps: 37304.31275 } } dps_results: { key: "TestRetribution-AllItems-Varo'then'sBrooch-72899" value: { - dps: 38765.00399 - tps: 38630.78688 + dps: 38762.68699 + tps: 38628.46988 } } dps_results: { key: "TestRetribution-AllItems-VeilofLies-72900" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-VesselofAcceleration-68995" value: { - dps: 38451.76841 - tps: 38323.20445 + dps: 38449.6924 + tps: 38321.12844 } } dps_results: { key: "TestRetribution-AllItems-VesselofAcceleration-69167" value: { - dps: 38681.1871 - tps: 38552.62314 + dps: 38678.97447 + tps: 38550.41051 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77207" value: { - dps: 38280.04188 - tps: 38145.54719 + dps: 38275.49138 + tps: 38140.99668 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77979" value: { - dps: 38043.92358 - tps: 37909.28595 + dps: 38044.2505 + tps: 37909.61286 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77999" value: { - dps: 38406.84801 - tps: 38272.02907 + dps: 38409.04741 + tps: 38274.22847 } } dps_results: { key: "TestRetribution-AllItems-VialofStolenMemories-59515" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-VialofStolenMemories-65109" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36966.73135 - tps: 36830.68684 + dps: 36956.55872 + tps: 36820.51422 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 37026.84769 - tps: 36890.80318 + dps: 37016.76948 + tps: 36880.72497 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 36718.42268 - tps: 36582.37818 + dps: 36709.74534 + tps: 36573.70083 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 36726.53398 - tps: 36590.48947 + dps: 36717.85663 + tps: 36581.81213 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 37436.76618 - tps: 37300.72167 + dps: 37431.18788 + tps: 37295.14338 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 37529.46746 - tps: 37393.42295 + dps: 37523.88917 + tps: 37387.84466 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37011.17584 - tps: 36879.92726 + dps: 37017.03499 + tps: 36885.78641 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 36984.01135 - tps: 36854.53607 + dps: 36981.396 + tps: 36851.92072 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 37454.9842 - tps: 37324.97478 + dps: 37459.78647 + tps: 37329.77705 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 37253.7361 - tps: 37119.51899 + dps: 37251.31008 + tps: 37117.09297 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 36631.6306 - tps: 36497.41349 + dps: 36629.01025 + tps: 36494.79314 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 37110.42267 - tps: 36977.34681 + dps: 37109.49795 + tps: 36976.42209 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 37302.30682 - tps: 37167.77784 + dps: 37303.85329 + tps: 37169.32431 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 36710.52225 - tps: 36576.30514 + dps: 36707.8913 + tps: 36573.67419 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 36720.3873 - tps: 36586.17019 + dps: 36717.76695 + tps: 36583.54984 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 37662.2989 - tps: 37528.08179 + dps: 37659.67855 + tps: 37525.46144 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 37787.10224 - tps: 37652.88513 + dps: 37784.47129 + tps: 37650.25418 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77198" value: { - dps: 36737.80337 - tps: 36603.69162 + dps: 36732.85076 + tps: 36598.73901 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77975" value: { - dps: 36769.18136 - tps: 36634.9734 + dps: 36763.77028 + tps: 36629.56232 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77995" value: { - dps: 36780.28773 - tps: 36645.90347 + dps: 36777.43628 + tps: 36643.05202 } } dps_results: { key: "TestRetribution-AllItems-WitchingHourglass-55787" value: { - dps: 37002.72488 - tps: 36871.8971 + dps: 36999.30258 + tps: 36868.4748 } } dps_results: { key: "TestRetribution-AllItems-WitchingHourglass-56320" value: { - dps: 37079.60331 - tps: 36946.54106 + dps: 37076.52209 + tps: 36943.45985 } } dps_results: { key: "TestRetribution-AllItems-World-QuellerFocus-63842" value: { - dps: 37049.9567 - tps: 36913.91219 + dps: 37041.32778 + tps: 36905.28327 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77197" value: { - dps: 37838.77445 - tps: 37705.6864 + dps: 37836.83977 + tps: 37703.75172 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77974" value: { - dps: 37710.99703 - tps: 37577.90898 + dps: 37708.50434 + tps: 37575.41629 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77994" value: { - dps: 37981.89922 - tps: 37848.81117 + dps: 37979.73885 + tps: 37846.6508 } } dps_results: { key: "TestRetribution-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 36826.26924 - tps: 36692.86363 + dps: 36824.63993 + tps: 36691.23431 } } dps_results: { key: "TestRetribution-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 36826.26924 - tps: 36692.86363 + dps: 36824.63993 + tps: 36691.23431 } } dps_results: { key: "TestRetribution-Average-Default" value: { - dps: 39154.62771 - tps: 39011.88962 + dps: 39155.04828 + tps: 39012.31019 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36703.54172 - tps: 40954.13653 + dps: 36705.39268 + tps: 40955.98748 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32032.47887 - tps: 31918.88419 + dps: 32036.99834 + tps: 31923.40365 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44635.33733 - tps: 43082.13414 + dps: 44634.27709 + tps: 43081.07391 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21045.94963 - tps: 25196.92278 + dps: 21038.01961 + tps: 25188.99276 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19288.47413 - tps: 19194.79046 + dps: 19290.53212 + tps: 19196.84845 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24846.98165 - tps: 23448.41715 + dps: 24839.73797 + tps: 23441.17347 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37278.49999 - tps: 41555.38119 + dps: 37274.6296 + tps: 41551.5108 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32448.41599 - tps: 32339.51705 + dps: 32449.52438 + tps: 32340.62544 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43775.1446 - tps: 42242.65428 + dps: 43780.24692 + tps: 42247.7566 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21057.47396 - tps: 25179.133 + dps: 21050.16347 + tps: 25171.82251 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19341.62994 - tps: 19248.41803 + dps: 19338.21397 + tps: 19245.00207 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24190.3424 - tps: 22794.55969 + dps: 24182.53713 + tps: 22786.75442 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36083.78615 - tps: 40403.27284 + dps: 36091.04307 + tps: 40410.52976 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31583.34616 - tps: 31475.76585 + dps: 31580.81117 + tps: 31473.23086 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44169.00253 - tps: 42628.10621 + dps: 44168.91318 + tps: 42628.01686 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21236.4917 - tps: 25690.2405 + dps: 21226.62877 + tps: 25680.37758 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18737.51968 - tps: 18656.89777 + dps: 18736.78033 + tps: 18656.15843 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24228.79599 - tps: 22833.58659 + dps: 24220.92272 + tps: 22825.71333 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43621.43057 - tps: 47405.11995 + dps: 43633.17123 + tps: 47416.86061 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39233.42859 - tps: 39103.41917 + dps: 39238.31288 + tps: 39108.30346 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54185.58165 - tps: 52563.42106 + dps: 54180.27596 + tps: 52558.11537 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25926.39047 - tps: 29736.78444 + dps: 25936.37096 + tps: 29746.76493 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23821.89895 - tps: 23707.63504 + dps: 23824.32947 + tps: 23710.06556 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30443.18248 - tps: 29009.35893 + dps: 30444.60314 + tps: 29010.77959 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43020.16775 - tps: 46892.3466 + dps: 43021.75449 + tps: 46893.93335 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38529.73263 - tps: 38397.88417 + dps: 38531.87305 + tps: 38400.02459 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54154.8529 - tps: 52528.28536 + dps: 54162.49471 + tps: 52535.92717 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25656.26452 - tps: 29403.47895 + dps: 25665.55724 + tps: 29412.77168 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23546.86538 - tps: 23437.14498 + dps: 23554.28742 + tps: 23444.56703 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30708.67323 - tps: 29282.85495 + dps: 30710.57761 + tps: 29284.75933 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43020.16775 - tps: 46892.3466 + dps: 43021.75449 + tps: 46893.93335 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38529.73263 - tps: 38397.88417 + dps: 38531.87305 + tps: 38400.02459 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54154.8529 - tps: 52528.28536 + dps: 54162.49471 + tps: 52535.92717 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25656.26452 - tps: 29403.47895 + dps: 25665.55724 + tps: 29412.77168 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23546.86538 - tps: 23437.14498 + dps: 23554.28742 + tps: 23444.56703 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30708.67323 - tps: 29282.85495 + dps: 30710.57761 + tps: 29284.75933 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57525.93504 - tps: 59542.66412 + dps: 57499.24171 + tps: 59515.97079 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51241.40532 - tps: 48576.00194 + dps: 51249.22448 + tps: 48583.8211 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 67472.80896 - tps: 63780.75762 + dps: 67472.92644 + tps: 63780.87509 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35889.01919 - tps: 38193.22469 + dps: 35888.67048 + tps: 38192.87599 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32450.25502 - tps: 30195.14497 + dps: 32447.88756 + tps: 30192.77751 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39168.56306 - tps: 36347.21815 + dps: 39166.72939 + tps: 36345.38448 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 56885.46914 - tps: 58904.45859 + dps: 56867.44811 + tps: 58886.43757 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50854.26567 - tps: 48179.15099 + dps: 50864.75633 + tps: 48189.64166 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 67621.77899 - tps: 63922.58447 + dps: 67614.35071 + tps: 63915.15619 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35496.60785 - tps: 37789.7835 + dps: 35498.01655 + tps: 37791.19219 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32132.03523 - tps: 29849.19499 + dps: 32129.36503 + tps: 29846.52479 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38438.32179 - tps: 35603.74877 + dps: 38438.01954 + tps: 35603.44652 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57047.41449 - tps: 59111.84896 + dps: 57028.3543 + tps: 59092.78876 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51022.97722 - tps: 48369.58685 + dps: 51033.15783 + tps: 48379.76745 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 69012.65654 - tps: 65320.6052 + dps: 69010.03043 + tps: 65317.97908 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35693.14514 - tps: 37977.72895 + dps: 35692.4668 + tps: 37977.05062 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32400.88463 - tps: 30125.05055 + dps: 32398.85025 + tps: 30123.01616 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39989.38594 - tps: 37161.42698 + dps: 39986.17815 + tps: 37158.21918 } } dps_results: { key: "TestRetribution-SwitchInFrontOfTarget-Default" value: { - dps: 36427.60186 - tps: 36334.11397 + dps: 36430.74691 + tps: 36337.25902 } } diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 762410f0f7..789f6c93e5 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -38,2208 +38,2208 @@ character_stats_results: { dps_results: { key: "TestEnhancement-AllItems-AgileShadowspiritDiamond" value: { - dps: 37018.9871 - tps: 23668.60345 + dps: 37015.87332 + tps: 23667.20769 } } dps_results: { key: "TestEnhancement-AllItems-AgonyandTorment" value: { - dps: 33474.00742 - tps: 20841.11077 + dps: 33477.68507 + tps: 20844.86681 } } dps_results: { key: "TestEnhancement-AllItems-Althor'sAbacus-50366" value: { - dps: 34715.74772 - tps: 22340.70477 + dps: 34713.08628 + tps: 22339.524 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-55889" value: { - dps: 34952.36321 - tps: 22613.51249 + dps: 34944.72474 + tps: 22607.75867 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-56407" value: { - dps: 35026.42096 - tps: 22645.15915 + dps: 35020.00182 + tps: 22642.52998 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 36053.86361 - tps: 23080.54338 + dps: 36052.37566 + tps: 23080.11249 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 36234.7668 - tps: 23179.56679 + dps: 36233.43387 + tps: 23179.23252 } } dps_results: { key: "TestEnhancement-AllItems-ArrowofTime-72897" value: { - dps: 36795.90975 - tps: 23620.63052 + dps: 36795.99957 + tps: 23624.52251 } } dps_results: { key: "TestEnhancement-AllItems-AustereShadowspiritDiamond" value: { - dps: 36286.28376 - tps: 23182.07359 + dps: 36282.48429 + tps: 23180.46336 } } dps_results: { key: "TestEnhancement-AllItems-BattlegearoftheRagingElements" value: { - dps: 31310.9671 - tps: 20514.67863 + dps: 31311.95317 + tps: 20517.11315 } } dps_results: { key: "TestEnhancement-AllItems-BaubleofTrueBlood-50726" value: { - dps: 34690.43447 - tps: 22332.67613 + dps: 34687.77112 + tps: 22331.51265 hps: 95.48563 } } dps_results: { key: "TestEnhancement-AllItems-BedrockTalisman-58182" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-59326" value: { - dps: 35112.15 - tps: 22593.47748 + dps: 35111.27876 + tps: 22593.42709 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-65053" value: { - dps: 35181.45021 - tps: 22646.22457 + dps: 35179.39159 + tps: 22644.47658 } } dps_results: { key: "TestEnhancement-AllItems-BindingPromise-67037" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-BlackBruise-50692" value: { - dps: 34080.05897 - tps: 21639.12758 + dps: 34074.82755 + tps: 21637.17574 } } dps_results: { key: "TestEnhancement-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 36045.98857 - tps: 23124.87668 + dps: 36042.33898 + tps: 23122.31157 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-55995" value: { - dps: 35167.20039 - tps: 22566.07559 + dps: 35164.52777 + tps: 22564.94366 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-56414" value: { - dps: 35229.65231 - tps: 22596.63712 + dps: 35226.97848 + tps: 22595.50932 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36462.7039 - tps: 23476.62116 + dps: 36458.7523 + tps: 23474.56578 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 35282.14833 - tps: 22680.14844 + dps: 35279.48499 + tps: 22678.98496 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 35066.57546 - tps: 22570.91903 + dps: 35064.76543 + tps: 22569.89868 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 34690.29481 - tps: 22332.63485 + dps: 34687.63147 + tps: 22331.47137 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 36001.05077 - tps: 23124.85431 + dps: 35997.70923 + tps: 23124.08714 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 35231.09163 - tps: 22649.13721 + dps: 35228.42829 + tps: 22647.97374 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77210" value: { - dps: 36396.07058 - tps: 23822.43844 + dps: 36393.379 + tps: 23823.52923 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77982" value: { - dps: 36278.10023 - tps: 23718.7657 + dps: 36274.02221 + tps: 23719.42602 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-78002" value: { - dps: 36682.21836 - tps: 24026.96157 + dps: 36679.61575 + tps: 24028.75086 } } dps_results: { key: "TestEnhancement-AllItems-BottledLightning-66879" value: { - dps: 34906.16691 - tps: 22472.14864 + dps: 34901.97283 + tps: 22469.51478 } } dps_results: { key: "TestEnhancement-AllItems-BottledWishes-77114" value: { - dps: 35301.89343 - tps: 22781.43266 + dps: 35299.5151 + tps: 22781.30309 } } dps_results: { key: "TestEnhancement-AllItems-BracingShadowspiritDiamond" value: { - dps: 36294.72686 - tps: 22725.61255 + dps: 36290.873 + tps: 22723.98122 } } dps_results: { key: "TestEnhancement-AllItems-Brawler'sTrophy-232015" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-BurningShadowspiritDiamond" value: { - dps: 36807.68852 - tps: 23533.6858 + dps: 36803.73756 + tps: 23531.89403 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37052.03365 - tps: 23829.54727 + dps: 37048.47621 + tps: 23827.16795 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 35632.19854 - tps: 22885.64786 + dps: 35629.5352 + tps: 22884.48439 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 36894.97519 - tps: 23740.32762 + dps: 36892.05005 + tps: 23739.59261 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 35582.12287 - tps: 22863.19226 + dps: 35579.45953 + tps: 22862.02878 } } dps_results: { key: "TestEnhancement-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 36056.76156 - tps: 23160.74854 + dps: 36054.74164 + tps: 23159.56639 } } dps_results: { key: "TestEnhancement-AllItems-CoreofRipeness-58184" value: { - dps: 34733.45405 - tps: 22345.85904 + dps: 34730.98678 + tps: 22344.71581 } } dps_results: { key: "TestEnhancement-AllItems-CorpseTongueCoin-50349" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 36063.86579 - tps: 23322.10314 + dps: 36064.40581 + tps: 23324.19793 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 35880.82195 - tps: 23233.37047 + dps: 35883.37941 + tps: 23235.00898 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 36303.18466 - tps: 23473.70669 + dps: 36304.43392 + tps: 23477.16627 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-59506" value: { - dps: 35614.0689 - tps: 22921.87406 + dps: 35613.14249 + tps: 22927.68912 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-65118" value: { - dps: 35855.91 - tps: 23084.0132 + dps: 35856.28878 + tps: 23086.68481 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77208" value: { - dps: 35415.02578 - tps: 23012.87343 + dps: 35416.48198 + tps: 23015.02033 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77980" value: { - dps: 35352.85022 - tps: 22912.93275 + dps: 35354.67499 + tps: 22916.15804 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-78000" value: { - dps: 35565.01771 - tps: 23174.78764 + dps: 35564.86072 + tps: 23174.17127 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 35656.33943 - tps: 23146.21215 + dps: 35655.4409 + tps: 23150.90164 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 36373.83414 - tps: 23618.71328 + dps: 36374.54082 + tps: 23624.40581 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 34733.45405 - tps: 22345.85904 + dps: 34730.98678 + tps: 22344.71581 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 35408.39519 - tps: 22718.90235 + dps: 35407.03559 + tps: 22717.64739 } } dps_results: { key: "TestEnhancement-AllItems-Deathbringer'sWill-50363" value: { - dps: 35464.55798 - tps: 22730.8213 + dps: 35461.55765 + tps: 22727.93267 } } dps_results: { key: "TestEnhancement-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 36358.83419 - tps: 23232.08949 + dps: 36355.99268 + tps: 23231.02099 } } dps_results: { key: "TestEnhancement-AllItems-DislodgedForeignObject-50348" value: { - dps: 34776.92481 - tps: 22340.38168 + dps: 34779.53903 + tps: 22345.29258 } } dps_results: { key: "TestEnhancement-AllItems-Dragonwrath,Tarecgosa'sRest-71086" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Dwyer'sCaber-70141" value: { - dps: 35790.74407 - tps: 23010.11856 + dps: 35784.58698 + tps: 23005.49428 } } dps_results: { key: "TestEnhancement-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 36286.28376 - tps: 23182.07359 + dps: 36282.48429 + tps: 23180.46336 } } dps_results: { key: "TestEnhancement-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 34701.08914 - tps: 22366.8801 + dps: 34698.48377 + tps: 22365.73681 } } dps_results: { key: "TestEnhancement-AllItems-EmberShadowspiritDiamond" value: { - dps: 36294.72686 - tps: 23184.86184 + dps: 36290.873 + tps: 23183.19722 } } dps_results: { key: "TestEnhancement-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 36358.83419 - tps: 23232.08949 + dps: 36355.99268 + tps: 23231.02099 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-59473" value: { - dps: 36272.69653 - tps: 23448.39345 + dps: 36269.58741 + tps: 23447.82273 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-65140" value: { - dps: 36456.55483 - tps: 23590.93667 + dps: 36454.61692 + tps: 23589.12971 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 36009.06329 - tps: 23028.057 + dps: 36006.38584 + tps: 23026.94147 } } dps_results: { key: "TestEnhancement-AllItems-EternalShadowspiritDiamond" value: { - dps: 36286.28376 - tps: 23182.07359 + dps: 36282.48429 + tps: 23180.46336 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77200" value: { - dps: 36159.10129 - tps: 23211.69039 + dps: 36156.43795 + tps: 23210.52691 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77977" value: { - dps: 35992.19146 - tps: 23111.80474 + dps: 35989.52812 + tps: 23110.64126 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77997" value: { - dps: 36342.7021 - tps: 23321.56461 + dps: 36340.03876 + tps: 23320.40113 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-59500" value: { - dps: 34733.45405 - tps: 22345.85904 + dps: 34730.98678 + tps: 22344.71581 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-65124" value: { - dps: 34741.56948 - tps: 22348.45955 + dps: 34739.20418 + tps: 22347.31631 } } dps_results: { key: "TestEnhancement-AllItems-FieryQuintessence-69000" value: { - dps: 34740.89237 - tps: 22395.00903 + dps: 34738.32918 + tps: 22393.18208 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36471.18172 - tps: 23570.82034 + dps: 36463.32815 + tps: 23568.4094 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DreamOwl-52354" value: { - dps: 34727.4235 - tps: 22344.56963 + dps: 34724.91122 + tps: 22343.4264 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 34727.4235 - tps: 22344.56963 + dps: 34724.91122 + tps: 22343.4264 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-KingofBoars-52351" value: { - dps: 35792.98342 - tps: 22926.3328 + dps: 35790.30958 + tps: 22925.205 } } dps_results: { key: "TestEnhancement-AllItems-FireoftheDeep-77117" value: { - dps: 35557.05178 - tps: 22756.85359 + dps: 35554.37157 + tps: 22755.74745 } } dps_results: { key: "TestEnhancement-AllItems-FleetShadowspiritDiamond" value: { - dps: 36391.15015 - tps: 23233.32694 + dps: 36387.34704 + tps: 23231.72507 } } dps_results: { key: "TestEnhancement-AllItems-FluidDeath-58181" value: { - dps: 36523.2674 - tps: 23572.21051 + dps: 36516.92951 + tps: 23567.78438 } } dps_results: { key: "TestEnhancement-AllItems-ForlornShadowspiritDiamond" value: { - dps: 36294.72686 - tps: 23184.96654 + dps: 36290.873 + tps: 23183.30191 } } dps_results: { key: "TestEnhancement-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 35545.54892 - tps: 22745.44346 + dps: 35543.38678 + tps: 22744.4631 } } dps_results: { key: "TestEnhancement-AllItems-FuryofAngerforge-59461" value: { - dps: 35769.93344 - tps: 22985.2702 + dps: 35769.0622 + tps: 22985.21982 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56138" value: { - dps: 34903.4869 - tps: 22431.68154 + dps: 34905.38948 + tps: 22439.66383 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56462" value: { - dps: 34969.8323 - tps: 22474.5263 + dps: 34966.61514 + tps: 22476.61644 } } dps_results: { key: "TestEnhancement-AllItems-GearDetector-61462" value: { - dps: 35502.0223 - tps: 22793.97418 + dps: 35504.90174 + tps: 22796.44196 } } dps_results: { key: "TestEnhancement-AllItems-GlowingTwilightScale-54589" value: { - dps: 34716.13476 - tps: 22341.05676 + dps: 34713.45314 + tps: 22339.85582 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-55266" value: { - dps: 35604.79194 - tps: 22894.11459 + dps: 35599.17773 + tps: 22890.64849 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-56295" value: { - dps: 35792.46481 - tps: 23169.69104 + dps: 35794.30196 + tps: 23171.8014 } } dps_results: { key: "TestEnhancement-AllItems-HarmlightToken-63839" value: { - dps: 34937.58666 - tps: 22557.25144 + dps: 34934.91865 + tps: 22555.87402 } } dps_results: { key: "TestEnhancement-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 35454.85763 - tps: 22752.51928 + dps: 35452.1706 + tps: 22751.37524 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-59514" value: { - dps: 34921.90269 - tps: 22516.80377 + dps: 34922.50577 + tps: 22520.83447 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-65110" value: { - dps: 35061.63684 - tps: 22612.99225 + dps: 35065.10823 + tps: 22618.18358 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-59224" value: { - dps: 35615.06566 - tps: 22900.55296 + dps: 35619.65434 + tps: 22903.24626 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-65072" value: { - dps: 35718.03489 - tps: 22957.46682 + dps: 35722.62357 + tps: 22960.16012 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-55868" value: { - dps: 35451.75112 - tps: 22751.15924 + dps: 35453.6537 + tps: 22759.14153 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-56393" value: { - dps: 35600.22473 - tps: 22845.3605 + dps: 35597.00757 + tps: 22847.45064 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-55845" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-56370" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-HeartoftheVile-66969" value: { - dps: 35710.41858 - tps: 22980.54786 + dps: 35704.72481 + tps: 22978.04877 } } dps_results: { key: "TestEnhancement-AllItems-Heartpierce-50641" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 36358.83419 - tps: 23232.08949 + dps: 36355.99268 + tps: 23231.02099 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62464" value: { - dps: 35933.47521 - tps: 23001.88176 + dps: 35930.80005 + tps: 23000.75847 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62469" value: { - dps: 35933.47521 - tps: 23001.88176 + dps: 35930.80005 + tps: 23000.75847 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-55881" value: { - dps: 35167.20039 - tps: 22566.07559 + dps: 35164.52777 + tps: 22564.94366 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-56406" value: { - dps: 35229.65231 - tps: 22596.63712 + dps: 35226.97848 + tps: 22595.50932 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77211" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77983" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-78003" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 35312.62015 - tps: 22836.53453 + dps: 35310.49326 + tps: 22836.36365 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 35325.40831 - tps: 22741.78452 + dps: 35325.02953 + tps: 22744.07756 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 35402.54624 - tps: 22768.95436 + dps: 35407.89778 + tps: 22772.6402 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 35057.43641 - tps: 22512.3614 + dps: 35054.76592 + tps: 22511.22221 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-59354" value: { - dps: 34690.29481 - tps: 22337.03722 + dps: 34687.63147 + tps: 22335.87374 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-65029" value: { - dps: 34690.29481 - tps: 22337.10283 + dps: 34687.63147 + tps: 22335.93935 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-68926" value: { - dps: 34743.30428 - tps: 22346.63412 + dps: 34740.93898 + tps: 22345.49089 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-69111" value: { - dps: 34747.91694 - tps: 22347.4587 + dps: 34745.53928 + tps: 22346.31547 } } dps_results: { key: "TestEnhancement-AllItems-JujuofNimbleness-63840" value: { - dps: 36045.98857 - tps: 23124.87668 + dps: 36042.33898 + tps: 23122.31157 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 35940.60463 - tps: 23184.10986 + dps: 35941.78001 + tps: 23184.76122 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36438.5958 - tps: 23527.45611 + dps: 36432.6278 + tps: 23526.5179 } } dps_results: { key: "TestEnhancement-AllItems-KiroptyricSigil-77113" value: { - dps: 37293.52669 - tps: 23953.5707 + dps: 37288.3824 + tps: 23950.14603 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59685" value: { - dps: 35133.84258 - tps: 22561.97008 + dps: 35135.42125 + tps: 22565.09739 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59689" value: { - dps: 35133.84258 - tps: 22561.97008 + dps: 35135.42125 + tps: 22565.09739 } } dps_results: { key: "TestEnhancement-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 34834.14614 - tps: 22376.25595 + dps: 34831.61208 + tps: 22376.32469 } } dps_results: { key: "TestEnhancement-AllItems-LastWord-50708" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-55816" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-56347" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56102" value: { - dps: 36108.55538 - tps: 23253.08763 + dps: 36110.41859 + tps: 23254.29253 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56427" value: { - dps: 36250.15742 - tps: 23338.88146 + dps: 36255.29122 + tps: 23343.15852 } } dps_results: { key: "TestEnhancement-AllItems-LicensetoSlay-58180" value: { - dps: 35631.00555 - tps: 22969.37794 + dps: 35629.18494 + tps: 22969.4027 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-55814" value: { - dps: 35281.59051 - tps: 22702.39667 + dps: 35286.17919 + tps: 22705.08997 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-56345" value: { - dps: 35401.44861 - tps: 22773.52508 + dps: 35406.03729 + tps: 22776.21838 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 34690.29481 - tps: 22332.6311 + dps: 34687.63147 + tps: 22331.46762 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 34690.29481 - tps: 22332.6311 + dps: 34687.63147 + tps: 22331.46762 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56132" value: { - dps: 35608.35748 - tps: 22822.47641 + dps: 35605.47949 + tps: 22821.16031 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56458" value: { - dps: 35729.52061 - tps: 22887.03965 + dps: 35726.61451 + tps: 22885.70357 } } dps_results: { key: "TestEnhancement-AllItems-MatrixRestabilizer-68994" value: { - dps: 37380.77448 - tps: 23876.13801 + dps: 37377.74155 + tps: 23874.43591 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-55251" value: { - dps: 35238.00589 - tps: 22730.53863 + dps: 35236.96756 + tps: 22729.64629 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-56285" value: { - dps: 35521.23475 - tps: 22937.5158 + dps: 35514.81561 + tps: 22934.88663 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62466" value: { - dps: 35297.78168 - tps: 22629.97696 + dps: 35295.10652 + tps: 22628.85367 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62471" value: { - dps: 35297.78168 - tps: 22629.97696 + dps: 35295.10652 + tps: 22628.85367 } } dps_results: { key: "TestEnhancement-AllItems-MithrilStopwatch-232013" value: { - dps: 35072.36242 - tps: 22575.17771 + dps: 35070.3425 + tps: 22573.99556 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellChalice-70142" value: { - dps: 35470.98463 - tps: 22712.31305 + dps: 35469.00408 + tps: 22711.63348 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellPhial-70143" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-68982" value: { - dps: 35404.525 - tps: 22673.45067 + dps: 35401.95936 + tps: 22672.23511 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-69139" value: { - dps: 35494.08044 - tps: 22716.04175 + dps: 35491.47627 + tps: 22714.81692 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Oremantle'sFavor-61448" value: { - dps: 35326.56289 - tps: 22751.78802 + dps: 35322.7088 + tps: 22749.36367 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 34729.06508 - tps: 22344.51498 + dps: 34726.5528 + tps: 22343.37174 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 34873.50879 - tps: 22418.78991 + dps: 34871.78718 + tps: 22418.73732 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-55237" value: { - dps: 35057.55478 - tps: 22511.31549 + dps: 35055.03224 + tps: 22510.23329 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-56280" value: { - dps: 35372.76828 - tps: 22667.8994 + dps: 35370.57706 + tps: 22667.06483 } } dps_results: { key: "TestEnhancement-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 36286.28376 - tps: 23182.07359 + dps: 36282.48429 + tps: 23180.46336 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 36268.27747 - tps: 23333.40522 + dps: 36271.07051 + tps: 23336.30093 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 36608.20536 - tps: 23510.03773 + dps: 36608.50795 + tps: 23511.1544 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-55854" value: { - dps: 34690.29481 - tps: 22332.65095 + dps: 34687.63147 + tps: 22331.48747 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-56377" value: { - dps: 34690.29481 - tps: 22332.63784 + dps: 34687.63147 + tps: 22331.47436 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 32430.44787 - tps: 21612.64868 + dps: 32443.37201 + tps: 21622.63079 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 32826.44962 - tps: 22004.41832 + dps: 32833.80735 + tps: 22010.65957 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 32158.71374 - tps: 21389.00256 + dps: 32165.95822 + tps: 21394.39861 } } dps_results: { key: "TestEnhancement-AllItems-ReflectionoftheLight-77115" value: { - dps: 34690.29481 - tps: 22332.60544 + dps: 34687.63147 + tps: 22331.44196 } } dps_results: { key: "TestEnhancement-AllItems-RegaliaoftheRagingElements" value: { - dps: 24279.65751 - tps: 15823.72307 + dps: 24281.44606 + tps: 15827.11054 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77201" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77978" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77998" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 36891.60795 - tps: 23585.91222 + dps: 36887.71628 + tps: 23584.17974 } } dps_results: { key: "TestEnhancement-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 36798.48554 - tps: 23530.50627 + dps: 36794.59387 + tps: 23528.7738 } } dps_results: { key: "TestEnhancement-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 36240.89277 - tps: 23524.94772 + dps: 36243.39938 + tps: 23527.59282 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56100" value: { - dps: 35463.82686 - tps: 22926.48841 + dps: 35456.18839 + tps: 22920.7346 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56431" value: { - dps: 35594.17553 - tps: 22984.71163 + dps: 35587.75639 + tps: 22982.08246 } } dps_results: { key: "TestEnhancement-AllItems-RosaryofLight-72901" value: { - dps: 35961.22345 - tps: 23165.35964 + dps: 35955.64689 + tps: 23162.04349 } } dps_results: { key: "TestEnhancement-AllItems-RottingSkull-77116" value: { - dps: 36099.67958 - tps: 23257.8202 + dps: 36096.36119 + tps: 23256.73081 } } dps_results: { key: "TestEnhancement-AllItems-RuneofZeth-68998" value: { - dps: 35263.05058 - tps: 22812.19243 + dps: 35260.93077 + tps: 22811.60345 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 36678.20543 - tps: 23587.56582 + dps: 36674.53713 + tps: 23585.38737 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 36783.737 - tps: 23656.29226 + dps: 36780.62496 + tps: 23654.30646 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 35480.34139 - tps: 22796.49906 + dps: 35477.67805 + tps: 22795.33558 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 35525.11978 - tps: 22822.78653 + dps: 35522.45644 + tps: 22821.62305 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 36514.57159 - tps: 23474.06208 + dps: 36512.29841 + tps: 23473.66163 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 36648.8659 - tps: 23581.62338 + dps: 36646.28603 + tps: 23580.93697 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 35431.56179 - tps: 22773.21545 + dps: 35428.89845 + tps: 22772.05197 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 35487.38366 - tps: 22809.93323 + dps: 35484.72031 + tps: 22808.76975 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-68915" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 hps: 311.3142 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-69109" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 hps: 351.1595 } } dps_results: { key: "TestEnhancement-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 35970.95215 - tps: 23065.41585 + dps: 35967.27887 + tps: 23064.56426 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-55256" value: { - dps: 34690.29481 - tps: 22332.65376 + dps: 34687.63147 + tps: 22331.49028 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-56290" value: { - dps: 34690.29481 - tps: 22332.63784 + dps: 34687.63147 + tps: 22331.47436 } } dps_results: { key: "TestEnhancement-AllItems-Shadowmourne-49623" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-ShardofWoe-60233" value: { - dps: 34969.73405 - tps: 22547.92171 + dps: 34967.69594 + tps: 22546.06379 } } dps_results: { key: "TestEnhancement-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 35350.69104 - tps: 22764.08113 + dps: 35347.55475 + tps: 22763.37867 } } dps_results: { key: "TestEnhancement-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56115" value: { - dps: 36240.08072 - tps: 23195.00315 + dps: 36238.33756 + tps: 23195.33218 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56440" value: { - dps: 36443.10834 - tps: 23312.74932 + dps: 36441.43911 + tps: 23313.15161 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-55879" value: { - dps: 35167.20039 - tps: 22566.07559 + dps: 35164.52777 + tps: 22564.94366 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-56400" value: { - dps: 35229.65231 - tps: 22596.63712 + dps: 35226.97848 + tps: 22595.50932 } } dps_results: { key: "TestEnhancement-AllItems-Soul'sAnguish-66994" value: { - dps: 35214.39315 - tps: 22768.07763 + dps: 35206.75468 + tps: 22762.32381 } } dps_results: { key: "TestEnhancement-AllItems-SoulCasket-58183" value: { - dps: 35297.78168 - tps: 22629.97696 + dps: 35295.10652 + tps: 22628.85367 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77206" value: { - dps: 35904.14736 - tps: 22932.80831 + dps: 35902.87153 + tps: 22932.86483 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77970" value: { - dps: 35768.57538 - tps: 22862.6839 + dps: 35766.61345 + tps: 22862.39019 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77990" value: { - dps: 36042.96251 - tps: 22995.69917 + dps: 36041.34408 + tps: 22995.40847 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-68981" value: { - dps: 35415.1156 - tps: 22687.39558 + dps: 35412.43815 + tps: 22686.28005 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-69138" value: { - dps: 35509.73972 - tps: 22733.70092 + dps: 35507.06043 + tps: 22732.59165 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sBattlegear" value: { - dps: 32546.58817 - tps: 20490.42613 + dps: 32548.17638 + tps: 20490.7531 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sRegalia" value: { - dps: 24506.92028 - tps: 15786.88811 + dps: 24502.508 + tps: 15783.302 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77202" value: { - dps: 37224.24303 - tps: 24075.30365 + dps: 37223.99648 + tps: 24076.01746 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77973" value: { - dps: 36846.59107 - tps: 23799.16429 + dps: 36846.72478 + tps: 23800.73188 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77993" value: { - dps: 37662.56274 - tps: 24234.73882 + dps: 37661.34079 + tps: 24236.00233 } } dps_results: { key: "TestEnhancement-AllItems-StayofExecution-68996" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Stonemother'sKiss-61411" value: { - dps: 35011.38575 - tps: 22559.89223 + dps: 35009.6602 + tps: 22561.32978 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62465" value: { - dps: 34992.0497 - tps: 22585.77301 + dps: 34990.22908 + tps: 22585.79776 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62470" value: { - dps: 34992.0497 - tps: 22585.77301 + dps: 34990.22908 + tps: 22585.79776 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-59332" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-65048" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 35081.09151 - tps: 22519.63283 + dps: 35078.35764 + tps: 22518.46756 } } dps_results: { key: "TestEnhancement-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 35260.96616 - tps: 22665.04692 + dps: 35256.42158 + tps: 22664.0624 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-55819" value: { - dps: 34723.22313 - tps: 22342.10698 + dps: 34720.67333 + tps: 22340.92621 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-56351" value: { - dps: 34727.4235 - tps: 22344.56963 + dps: 34724.91122 + tps: 22343.4264 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 35097.17854 - tps: 22531.80964 + dps: 35094.50728 + tps: 22530.67308 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 35229.65231 - tps: 22596.63712 + dps: 35226.97848 + tps: 22595.50932 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-68927" value: { - dps: 36690.53571 - tps: 23578.17062 + dps: 36690.40227 + tps: 23581.18498 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-69112" value: { - dps: 36808.38163 - tps: 23731.42231 + dps: 36811.1053 + tps: 23736.08402 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-59519" value: { - dps: 35419.37857 - tps: 22692.26361 + dps: 35415.78761 + tps: 22690.62948 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-65105" value: { - dps: 35553.22649 - tps: 22750.56375 + dps: 35552.04156 + tps: 22750.22606 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56121" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56449" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-55874" value: { - dps: 36354.50019 - tps: 23274.83148 + dps: 36352.10277 + tps: 23274.56534 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-56394" value: { - dps: 36578.83557 - tps: 23408.15985 + dps: 36576.36074 + tps: 23407.82336 } } dps_results: { key: "TestEnhancement-AllItems-TidefuryRaiment" value: { - dps: 22161.03567 - tps: 14688.40276 + dps: 22160.88852 + tps: 14691.89337 } } dps_results: { key: "TestEnhancement-AllItems-TinyAbominationinaJar-50706" value: { - dps: 35711.62212 - tps: 23226.51529 + dps: 35710.97265 + tps: 23227.31828 } } dps_results: { key: "TestEnhancement-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 34773.45041 - tps: 22400.59885 + dps: 34773.03001 + tps: 22399.35625 } } dps_results: { key: "TestEnhancement-AllItems-UnheededWarning-59520" value: { - dps: 36594.3405 - tps: 23497.50445 + dps: 36591.77802 + tps: 23496.01357 } } dps_results: { key: "TestEnhancement-AllItems-UnquenchableFlame-67101" value: { - dps: 34690.29481 - tps: 22332.65951 + dps: 34687.63147 + tps: 22331.49603 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62463" value: { - dps: 36868.27336 - tps: 23610.72843 + dps: 36864.6032 + tps: 23608.64826 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62468" value: { - dps: 36868.27336 - tps: 23610.72843 + dps: 36864.6032 + tps: 23608.64826 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-68709" value: { - dps: 36868.27336 - tps: 23610.72843 + dps: 36864.6032 + tps: 23608.64826 } } dps_results: { key: "TestEnhancement-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 31317.76412 - tps: 19960.99338 + dps: 31327.16143 + tps: 19971.34635 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 35727.04614 - tps: 23301.9984 + dps: 35724.77958 + tps: 23300.72449 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 35848.67311 - tps: 23441.47602 + dps: 35845.28544 + tps: 23440.51352 } } dps_results: { key: "TestEnhancement-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36225.39855 - tps: 23153.6329 + dps: 36222.35777 + tps: 23152.31025 } } dps_results: { key: "TestEnhancement-AllItems-VeilofLies-72900" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-68995" value: { - dps: 35935.11639 - tps: 23156.88789 + dps: 35930.66161 + tps: 23155.75095 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-69167" value: { - dps: 36089.01984 - tps: 23252.39083 + dps: 36084.80416 + tps: 23251.40988 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77207" value: { - dps: 36940.99105 - tps: 23941.88121 + dps: 36940.48574 + tps: 23944.43225 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77979" value: { - dps: 36726.05609 - tps: 23793.64458 + dps: 36718.18545 + tps: 23792.22251 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77999" value: { - dps: 37282.66297 - tps: 24194.77987 + dps: 37276.19265 + tps: 24193.9512 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-59515" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-65109" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36236.1644 - tps: 23301.52051 + dps: 36232.53456 + tps: 23299.41268 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 36461.72861 - tps: 23451.41121 + dps: 36458.16637 + tps: 23449.33881 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 35315.24541 - tps: 22699.5783 + dps: 35312.58206 + tps: 22698.41483 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 35388.83772 - tps: 22742.78119 + dps: 35386.17438 + tps: 22741.61771 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 34973.69367 - tps: 22577.37397 + dps: 34972.80538 + tps: 22576.79764 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 35005.69892 - tps: 22486.06416 + dps: 35009.71254 + tps: 22489.65803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 35153.84976 - tps: 22623.28312 + dps: 35152.06835 + tps: 22621.68428 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 34913.45489 - tps: 22483.93085 + dps: 34918.04357 + tps: 22486.62414 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 35333.73885 - tps: 22647.57299 + dps: 35331.06299 + tps: 22646.45208 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 36138.49846 - tps: 23242.73112 + dps: 36135.2384 + tps: 23239.73896 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 36337.2059 - tps: 23371.8599 + dps: 36335.39414 + tps: 23372.12112 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 34690.29481 - tps: 22332.69668 + dps: 34687.63147 + tps: 22331.5332 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 35284.17039 - tps: 22687.52757 + dps: 35281.50705 + tps: 22686.36409 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 35354.06973 - tps: 22728.11614 + dps: 35351.40638 + tps: 22726.95267 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicBattlegear" value: { - dps: 33504.72956 - tps: 21595.03336 + dps: 33511.06683 + tps: 21601.64282 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicRegalia" value: { - dps: 24485.88956 - tps: 16074.13507 + dps: 24478.26802 + tps: 16071.35985 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77198" value: { - dps: 34802.77504 - tps: 22369.42853 + dps: 34800.54505 + tps: 22367.68369 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77975" value: { - dps: 34787.47742 - tps: 22379.72636 + dps: 34785.32638 + tps: 22378.75009 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77995" value: { - dps: 34811.37277 - tps: 22373.05753 + dps: 34809.14277 + tps: 22371.31269 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-55787" value: { - dps: 34890.6899 - tps: 22523.19026 + dps: 34887.15051 + tps: 22522.36402 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-56320" value: { - dps: 34926.73779 - tps: 22462.2424 + dps: 34930.18956 + tps: 22465.97277 } } dps_results: { key: "TestEnhancement-AllItems-World-QuellerFocus-63842" value: { - dps: 35104.74847 - tps: 22535.51407 + dps: 35102.07706 + tps: 22534.378 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77197" value: { - dps: 38211.24167 - tps: 24603.39172 + dps: 38206.63342 + tps: 24602.6765 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77974" value: { - dps: 37843.07069 - tps: 24367.10936 + dps: 37837.62081 + tps: 24365.48103 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77994" value: { - dps: 38658.61126 - tps: 24891.27539 + dps: 38654.09942 + tps: 24890.70914 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 35114.0178 - tps: 22535.70089 + dps: 35111.16791 + tps: 22534.40478 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 35114.0178 - tps: 22535.70089 + dps: 35111.16791 + tps: 22534.40478 } } dps_results: { key: "TestEnhancement-Average-Default" value: { - dps: 36995.20833 - tps: 23673.98587 + dps: 36995.14046 + tps: 23673.90265 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37421.10449 - tps: 28259.06587 + dps: 37418.55455 + tps: 28258.17068 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 36876.62996 - tps: 23584.44726 + dps: 36873.72092 + tps: 23583.28187 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42533.28877 - tps: 26141.74517 + dps: 42541.45081 + tps: 26150.35923 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28734.18754 - tps: 22980.01265 + dps: 28732.54896 + tps: 22979.49663 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28273.67858 - tps: 18280.78901 + dps: 28272.30208 + tps: 18280.47389 } } dps_results: { key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31392.63726 - tps: 19488.15216 + dps: 31401.66533 + tps: 19494.93683 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37712.29041 - tps: 28440.55697 + dps: 37717.08364 + tps: 28445.59652 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37158.00711 - tps: 23739.98698 + dps: 37163.61024 + tps: 23745.56833 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42895.52197 - tps: 26366.27166 + dps: 42900.6381 + tps: 26370.81037 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 29122.36094 - tps: 23207.41998 + dps: 29121.36704 + tps: 23204.6786 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28653.91075 - tps: 18491.63361 + dps: 28653.06966 + tps: 18488.90669 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32186.91994 - tps: 19941.58278 + dps: 32200.79264 + tps: 19949.92009 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37490.06152 - tps: 28272.61074 + dps: 37493.97995 + tps: 28276.87014 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37003.62855 - tps: 23600.1847 + dps: 37008.19915 + tps: 23604.07612 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43090.61759 - tps: 26505.93202 + dps: 43100.60544 + tps: 26513.6274 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28945.85005 - tps: 23037.96319 + dps: 28947.10962 + tps: 23038.95748 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28481.90641 - tps: 18408.46587 + dps: 28483.12507 + tps: 18409.45984 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32121.93096 - tps: 20168.60132 + dps: 32141.48105 + tps: 20184.82185 } } dps_results: { key: "TestEnhancement-SwitchInFrontOfTarget-Default" value: { - dps: 34437.8262 - tps: 21513.79859 + dps: 34434.34311 + tps: 21510.38811 } } From 87b147b57f18dfc2342b89ab6e0f1c7f35dfeff3 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 17:15:07 +0100 Subject: [PATCH 017/127] Missed enchant aura ICD --- sim/core/item_swaps.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 11d61ece51..b2b4f7e7b0 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -186,12 +186,7 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aur if procMask == ProcMaskUnknown { aura.Deactivate(sim) } else { - if !aura.IsActive() { - aura.Activate(sim) - if aura.Icd != nil { - aura.Icd.Use(sim) - } - } + aura.Activate(sim) } }) } From 257a3637a7b5da0ac1460b00ee946f5b7b433cdd Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 20:03:37 +0100 Subject: [PATCH 018/127] Fix missing trinket procs --- sim/common/cata/damage_procs.go | 9 +++++++-- sim/common/cata/enchant_effects.go | 2 ++ sim/common/cata/gurthalak.go | 5 ++++- sim/core/apl_actions_misc.go | 12 +++++++++--- sim/core/item_swaps.go | 14 +++++++------- ui/paladin/retribution/sim.ts | 7 +++++++ 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index 67ba84ad86..99990c4a2e 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -5,6 +5,7 @@ import ( "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" ) func init() { @@ -74,7 +75,7 @@ func init() { }, }) - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Electrical Charge Aura", ActionID: core.ActionID{ItemID: 68925}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, @@ -92,6 +93,8 @@ func init() { } }, })) + + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -124,7 +127,7 @@ func init() { }, }) - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Electrical Charge Aura", ActionID: core.ActionID{ItemID: 69110}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, @@ -142,6 +145,8 @@ func init() { } }, })) + + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) }) } diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index f338d3d666..2e727f6ffc 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -472,6 +472,8 @@ func init() { }) statAura.Icd = aura.Icd + + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(95712, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}) }) // Enchant: 4176, Item: 59595 - R19 Threatfinder diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index dd3b00c828..e75256c369 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -4,6 +4,7 @@ import ( "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -63,7 +64,7 @@ func init() { }) procMask := character.GetProcMaskForItem(gurthalakItemID) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Gurthalak Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: gurthalakItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -86,6 +87,8 @@ func init() { summonSpell.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(gurthalakItemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) } } diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index 2de56475fd..91dd9db6c3 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -152,11 +152,17 @@ func (action *APLActionItemSwap) IsReady(sim *Simulation) bool { return (action.swapSet == proto.APLActionItemSwap_Main) == action.character.ItemSwap.IsSwapped() } func (action *APLActionItemSwap) Execute(sim *Simulation) { - if sim.Log != nil { - action.character.Log(sim, "Item Swap to set %s", action.swapSet) + if action.character.ItemSwap.swapSet == action.swapSet { + if sim.Log != nil { + action.character.Log(sim, "Item Swap already set to %s", action.swapSet) + } + } else { + if sim.Log != nil { + action.character.Log(sim, "Item Swap to set %s", action.swapSet) + } } - action.character.ItemSwap.SwapItems(sim, action.character.ItemSwap.slots, false) + action.character.ItemSwap.SwapItems(sim, action.swapSet, action.character.ItemSwap.slots, false) } func (action *APLActionItemSwap) String() string { return fmt.Sprintf("Item Swap(%s)", action.swapSet) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index b2b4f7e7b0..944d8813ac 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -28,7 +28,7 @@ type ItemSwap struct { swapEquip Equipment // Holds items that are currently not equipped unEquippedItems Equipment - swapped bool + swapSet proto.APLActionItemSwap_SwapSet initialized bool } @@ -115,7 +115,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti originalEquip: character.Equipment, swapEquip: swapItems, unEquippedItems: swapItems, - swapped: false, + swapSet: proto.APLActionItemSwap_Unknown, initialized: false, } } @@ -240,7 +240,7 @@ func (swap *ItemSwap) IsEnabled() bool { } func (swap *ItemSwap) IsSwapped() bool { - return swap.swapped + return swap.swapSet == proto.APLActionItemSwap_Swap1 } func (swap *ItemSwap) HasItemEquipped(itemID int32) bool { @@ -279,8 +279,8 @@ func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { return newStats } -func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset bool) { - if !swap.IsEnabled() { +func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, slots []proto.ItemSlot, isReset bool) { + if !swap.IsEnabled() || swap.swapSet == swapSet { return } @@ -327,7 +327,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, slots []proto.ItemSlot, isReset } } - swap.swapped = !swap.swapped + swap.swapSet = swapSet } func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (bool, stats.Stats) { @@ -388,7 +388,7 @@ func (swap *ItemSwap) reset(sim *Simulation) { return } - swap.SwapItems(sim, swap.slots, true) + swap.SwapItems(sim, proto.APLActionItemSwap_Main, swap.slots, true) if !swap.initialized || swap.IsSwapped() { for _, slot := range swap.slots { diff --git a/ui/paladin/retribution/sim.ts b/ui/paladin/retribution/sim.ts index d514d6452d..943a3ae6a8 100644 --- a/ui/paladin/retribution/sim.ts +++ b/ui/paladin/retribution/sim.ts @@ -179,6 +179,13 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, { OtherInputs.InFrontOfTarget, ], }, + itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotLegs, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, From 8368bad659d503e0577a4b49f66b1b53ff8fd7a4 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 21:58:38 +0100 Subject: [PATCH 019/127] Add item swap presets --- sim/core/item_sets.go | 12 + sim/paladin/ancient_guardian_pet.go | 18 - sim/paladin/guardian_of_ancient_kings.go | 56 +- sim/paladin/paladin.go | 2 - sim/paladin/retribution/retribution_test.go | 5 +- .../preset_configuration_picker.tsx | 11 +- ui/core/individual_sim_ui.tsx | 9 + ui/core/player.ts | 8 +- ui/core/preset_utils.tsx | 25 +- ui/paladin/retribution/apls/default.apl.json | 700 +----------------- .../gear_sets/item_swap_4p_t11.gear.json | 36 + ui/paladin/retribution/inputs.ts | 8 - ui/paladin/retribution/presets.ts | 14 +- ui/paladin/retribution/sim.ts | 18 +- 14 files changed, 175 insertions(+), 747 deletions(-) create mode 100644 ui/paladin/retribution/gear_sets/item_swap_4p_t11.gear.json diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 0e73978663..2547497c67 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -151,6 +151,18 @@ func (character *Character) GetActiveSetBonuses() []ActiveSetBonus { return activeBonuses } +func (character *Character) HasActiveSetBonus(name string, count int32) bool { + activeSetBonuses := character.GetActiveSetBonuses() + + for _, activeSetBonus := range activeSetBonuses { + if activeSetBonus.Name == name && activeSetBonus.NumPieces >= count { + return true + } + } + + return false +} + // Apply effects from item set bonuses. func (character *Character) applyItemSetBonusEffects(agent Agent) { activeSetBonuses := character.GetActiveSetBonuses() diff --git a/sim/paladin/ancient_guardian_pet.go b/sim/paladin/ancient_guardian_pet.go index 6eb2c4023b..c6db69c595 100644 --- a/sim/paladin/ancient_guardian_pet.go +++ b/sim/paladin/ancient_guardian_pet.go @@ -90,28 +90,10 @@ func (ancientGuardian *AncientGuardianPet) registerRetributionVariant() { AutoSwingMelee: true, }) - percentHitToExpertiseRating := 1 * core.PhysicalHitRatingPerHitPercent * PetExpertiseScale - draeneiPrepull := false ancientGuardian.OnPetEnable = func(sim *core.Simulation) { - // Since Draenei racial doesn't apply to guardian, any Draenei who uses the T11 prot prepull set - // should make sure it's reforged/enchanted to 9% hit to avoid misses and dodges. - // Having a separate input for prepull set hit rating is too much of a hassle, so we just assume it's always 9%. - if sim.CurrentTime < 0 && ancientGuardian.paladinOwner.Race == proto.Race_RaceDraenei && ancientGuardian.paladinOwner.SnapshotGuardian { - ancientGuardian.AddStatDynamic(sim, stats.PhysicalHitPercent, 1.0) - ancientGuardian.AddStatDynamic(sim, stats.ExpertiseRating, percentHitToExpertiseRating) - draeneiPrepull = true - } else { - draeneiPrepull = false - } - ancientPowerAura.Activate(sim) } ancientGuardian.OnPetDisable = func(sim *core.Simulation) { - if draeneiPrepull { - ancientGuardian.AddStatDynamic(sim, stats.PhysicalHitPercent, -1.0) - ancientGuardian.AddStatDynamic(sim, stats.ExpertiseRating, -percentHitToExpertiseRating) - } - ancientPowerAura.Deactivate(sim) } } diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index 094148d64f..00edfa9a68 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -11,9 +11,11 @@ import ( func applyT11Prot4pcBonus(duration time.Duration) time.Duration { return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) } +func (paladin *Paladin) hasT11Prot4pc() bool { + return paladin.HasActiveSetBonus(ItemSetReinforcedSapphiriumBattlearmor.Name, 4) +} func (paladin *Paladin) registerGuardianOfAncientKings() { - hasT11Prot4pc := paladin.HasSetBonus(ItemSetReinforcedSapphiriumBattlearmor, 4) var duration time.Duration if paladin.Spec == proto.Spec_SpecProtectionPaladin { @@ -22,10 +24,6 @@ func (paladin *Paladin) registerGuardianOfAncientKings() { duration = time.Second * 30 } - if hasT11Prot4pc { - duration = applyT11Prot4pcBonus(duration) - } - var spell *core.Spell switch paladin.Spec { case proto.Spec_SpecHolyPaladin: @@ -34,7 +32,7 @@ func (paladin *Paladin) registerGuardianOfAncientKings() { spell = paladin.registerProtectionGuardian(duration) default: case proto.Spec_SpecRetributionPaladin: - spell = paladin.registerRetributionGuardian(duration, paladin.SnapshotGuardian && !hasT11Prot4pc) + spell = paladin.registerRetributionGuardian(duration) } paladin.AddMajorCooldown(core.MajorCooldown{ @@ -46,6 +44,10 @@ func (paladin *Paladin) registerGuardianOfAncientKings() { func (paladin *Paladin) registerHolyGuardian(duration time.Duration) *core.Spell { actionID := core.ActionID{SpellID: 86150} + if paladin.hasT11Prot4pc() { + duration = applyT11Prot4pcBonus(duration) + } + goakAura := paladin.RegisterAura(core.Aura{ Label: "Guardian of Ancient Kings" + paladin.Label, ActionID: actionID, @@ -85,6 +87,11 @@ func (paladin *Paladin) registerHolyGuardian(duration time.Duration) *core.Spell func (paladin *Paladin) registerProtectionGuardian(duration time.Duration) *core.Spell { actionID := core.ActionID{SpellID: 86150} + hasT11Prot4pc := paladin.hasT11Prot4pc() + if hasT11Prot4pc { + duration = applyT11Prot4pcBonus(duration) + } + goakAura := paladin.RegisterAura(core.Aura{ Label: "Guardian of Ancient Kings" + paladin.Label, ActionID: actionID, @@ -120,13 +127,15 @@ func (paladin *Paladin) registerProtectionGuardian(duration time.Duration) *core }) } -func (paladin *Paladin) registerRetributionGuardian(duration time.Duration, snapshotGuardian bool) *core.Spell { +func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *core.Spell { var strDepByStackCount = map[int32]*stats.StatDependency{} for i := 1; i <= 20; i++ { strDepByStackCount[int32(i)] = paladin.NewDynamicMultiplyStat(stats.Strength, 1.0+0.01*float64(i)) } + hasT11Prot4pc := paladin.hasT11Prot4pc() + ancientPowerDuration := duration + time.Second*1 ancientPower := paladin.RegisterAura(core.Aura{ Label: "Ancient Power" + paladin.Label, @@ -210,15 +219,30 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration, snap paladin.AncientGuardian.Pet.Disable(sim) ancientFury.Cast(sim, paladin.CurrentTarget) ancientPower.Deactivate(sim) - - // Deactivate T11 Prot 4pc bonus if configured and activated during prepull - if snapshotGuardian && (aura.Duration != duration || ancientPower.Duration != ancientPowerDuration) { - aura.Duration = duration - ancientPower.Duration = ancientPowerDuration - } }, }) + if paladin.ItemSwap.IsEnabled() { + paladin.RegisterOnItemSwap([]proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotLegs, + }, + func(sim *core.Simulation, _ proto.ItemSlot) { + hasT11Prot4pc := paladin.hasT11Prot4pc() + + if hasT11Prot4pc { + goakAura.Duration = applyT11Prot4pcBonus(duration) + ancientPower.Duration = applyT11Prot4pcBonus(ancientPowerDuration) + } else { + goakAura.Duration = duration + ancientPower.Duration = ancientPowerDuration + } + }) + } + return paladin.RegisterSpell(core.SpellConfig{ ActionID: actionID, Flags: core.SpellFlagAPL, @@ -236,12 +260,6 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration, snap }, ApplyEffects: func(sim *core.Simulation, unit *core.Unit, spell *core.Spell) { - // Activate T11 Prot 4pc bonus if configured and activated during prepull - if sim.CurrentTime < 0 && snapshotGuardian { - goakAura.Duration = applyT11Prot4pcBonus(duration) - ancientPower.Duration = applyT11Prot4pcBonus(ancientPowerDuration) - } - goakAura.Activate(sim) paladin.AncientGuardian.Enable(sim, paladin.AncientGuardian) paladin.AncientGuardian.CancelGCDTimer(sim) diff --git a/sim/paladin/paladin.go b/sim/paladin/paladin.go index 58c7c1f1bf..9cb26911db 100644 --- a/sim/paladin/paladin.go +++ b/sim/paladin/paladin.go @@ -139,7 +139,6 @@ type Paladin struct { CurrentSeal *core.Aura CurrentJudgement *core.Spell - SnapshotGuardian bool StartingHolyPower int32 // Pets @@ -294,7 +293,6 @@ func NewPaladin(character *core.Character, talentsStr string, options *proto.Pal Talents: &proto.PaladinTalents{}, Seal: options.Seal, PaladinAura: options.Aura, - SnapshotGuardian: options.SnapshotGuardian, sharedBuilderBaseCD: time.Millisecond * core.TernaryDuration(character.Spec == proto.Spec_SpecProtectionPaladin, 3000, 4500), } diff --git a/sim/paladin/retribution/retribution_test.go b/sim/paladin/retribution/retribution_test.go index f60277d77f..645042c5fa 100644 --- a/sim/paladin/retribution/retribution_test.go +++ b/sim/paladin/retribution/retribution_test.go @@ -100,9 +100,8 @@ var DefaultOptions = &proto.Player_RetributionPaladin{ RetributionPaladin: &proto.RetributionPaladin{ Options: &proto.RetributionPaladin_Options{ ClassOptions: &proto.PaladinOptions{ - Seal: proto.PaladinSeal_Truth, - Aura: proto.PaladinAura_Retribution, - SnapshotGuardian: true, + Seal: proto.PaladinSeal_Truth, + Aura: proto.PaladinAura_Retribution, }, }, }, diff --git a/ui/core/components/individual_sim_ui/preset_configuration_picker.tsx b/ui/core/components/individual_sim_ui/preset_configuration_picker.tsx index 880c10e89c..7971a5461c 100644 --- a/ui/core/components/individual_sim_ui/preset_configuration_picker.tsx +++ b/ui/core/components/individual_sim_ui/preset_configuration_picker.tsx @@ -6,6 +6,7 @@ import { PresetBuild } from '../../preset_utils'; import { APLRotation, APLRotation_Type } from '../../proto/apl'; import { Encounter, EquipmentSpec, HealingModel, Spec } from '../../proto/common'; import { SavedTalents } from '../../proto/ui'; +import { ItemSwapGear } from '../../proto_utils/gear'; import { TypedEvent } from '../../typed_event'; import { Component } from '../component'; import { ContentBlock } from '../content_block'; @@ -83,11 +84,17 @@ export class PresetConfigurationPicker extends Component { }); } - private applyBuild({ gear, rotation, rotationType, talents, epWeights, encounter, race }: PresetBuild) { + private applyBuild({ gear, itemSwap, rotation, rotationType, talents, epWeights, encounter, race }: PresetBuild) { const eventID = TypedEvent.nextEventID(); TypedEvent.freezeAllAndDo(() => { if (gear) this.simUI.player.setGear(eventID, this.simUI.sim.db.lookupEquipmentSpec(gear.gear)); if (race) this.simUI.player.setRace(eventID, race); + if (itemSwap) { + this.simUI.player.setItemSwapGear(eventID, this.simUI.sim.db.lookupItemSwap(itemSwap.itemSwap)); + this.simUI.player.setEnableItemSwap(eventID, true); + } else { + this.simUI.player.setEnableItemSwap(eventID, false); + } if (talents) { this.simUI.player.setTalentsString(eventID, talents.data.talentsString); if (talents.data.glyphs) this.simUI.player.setGlyphs(eventID, talents.data.glyphs); @@ -95,7 +102,7 @@ export class PresetConfigurationPicker extends Component { if (rotationType) { this.simUI.player.aplRotation.type = rotationType; this.simUI.player.rotationChangeEmitter.emit(eventID); - } else if (rotation?.rotation.rotation) { + } else if (rotation?.rotation.rotation) { this.simUI.player.setAplRotation(eventID, rotation.rotation.rotation); } if (epWeights) this.simUI.player.setEpWeights(eventID, epWeights.epWeights); diff --git a/ui/core/individual_sim_ui.tsx b/ui/core/individual_sim_ui.tsx index d6ef5b5b7c..25ea4d458d 100644 --- a/ui/core/individual_sim_ui.tsx +++ b/ui/core/individual_sim_ui.tsx @@ -34,6 +34,7 @@ import { HandType, IndividualBuffs, ItemSlot, + ItemSwap, PartyBuffs, Profession, PseudoStat, @@ -43,6 +44,7 @@ import { Stat, } from './proto/common'; import { IndividualSimSettings, SavedTalents } from './proto/ui'; +import { ItemSwapGear } from './proto_utils/gear'; import { getMetaGemConditionDescription } from './proto_utils/gems'; import { armorTypeNames, professionNames } from './proto_utils/names'; import { pseudoStatIsCapped, StatCap, Stats, UnitStat } from './proto_utils/stats'; @@ -145,6 +147,8 @@ export interface IndividualSimUIConfig extends PlayerConf simpleRotation?: SpecRotation; other?: OtherDefaults; + + itemSwap?: ItemSwap; }; playerInputs?: InputSection; @@ -510,6 +514,11 @@ export abstract class IndividualSimUI extends SimUI { this.player.getParty()!.setBuffs(eventID, this.individualConfig.defaults.partyBuffs); this.player.getRaid()!.setBuffs(eventID, this.individualConfig.defaults.raidBuffs); this.player.setEpWeights(eventID, this.individualConfig.defaults.epWeights); + if (this.individualConfig.defaults.itemSwap) { + this.player.setEnableItemSwap(eventID, true); + this.player.setItemSwapGear(eventID, this.sim.db.lookupItemSwap(this.individualConfig.defaults.itemSwap || ItemSwap.create())); + } + const defaultRatios = this.player.getDefaultEpRatios(tankSpec, healingSpec); this.player.setEpRatios(eventID, defaultRatios); if (this.individualConfig.defaults.statCaps) this.player.setStatCaps(eventID, this.individualConfig.defaults.statCaps); diff --git a/ui/core/player.ts b/ui/core/player.ts index f77fc1101b..a205d2e04c 100644 --- a/ui/core/player.ts +++ b/ui/core/player.ts @@ -315,10 +315,8 @@ export class Player { this.specTypeFunctions = specTypeFunctions[this.getSpec()] as SpecTypeFunctions; this.specOptions = this.specTypeFunctions.optionsCreate(); - const specConfig = SPEC_CONFIGS[this.getSpec()] as PlayerConfig; - if (!specConfig) { - throw new Error(`Could not find spec config for spec: ${spec.friendlyName}`); - } + const specConfig = getSpecConfig(this.getSpec()); + this.autoRotationGenerator = specConfig.autoRotation; if (specConfig.simpleRotation) { this.simpleRotationGenerator = specConfig.simpleRotation; @@ -1570,8 +1568,6 @@ export class Player { applySharedDefaults(eventID: EventID) { TypedEvent.freezeAllAndDo(() => { - this.setEnableItemSwap(eventID, false); - this.setItemSwapGear(eventID, new ItemSwapGear({})); this.setReactionTime(eventID, 100); this.setInFrontOfTarget(eventID, this.playerSpec.isTankSpec); this.setHealingModel( diff --git a/ui/core/preset_utils.tsx b/ui/core/preset_utils.tsx index 6c5224fd5f..bc6c207f8e 100644 --- a/ui/core/preset_utils.tsx +++ b/ui/core/preset_utils.tsx @@ -13,6 +13,7 @@ import { Faction, HealingModel, IndividualBuffs, + ItemSwap, Race, RaidBuffs, Spec, @@ -64,6 +65,10 @@ export interface PresetEpWeights extends PresetBase { } export interface PresetEpWeightsOptions extends PresetOptionsBase {} +export interface PresetItemSwap extends PresetBase { + itemSwap: ItemSwap; +} + export interface PresetEncounter extends PresetBase { encounter?: EncounterProto; healingModel?: HealingModel; @@ -83,6 +88,7 @@ export interface PresetBuild { rotationType?: APLRotationType; epWeights?: PresetEpWeights; encounter?: PresetEncounter; + itemSwap?: PresetItemSwap; race?: Race; } @@ -225,8 +231,23 @@ export const makePresetEncounter = (name: string, encounter?: PresetEncounter['e }; }; -export const makePresetBuild = (name: string, { gear, talents, rotation, rotationType, epWeights, encounter, race }: PresetBuildOptions): PresetBuild => { - return { name, gear, talents, rotation, rotationType, epWeights, encounter, race }; +export const makePresetItemSwapGear = (name: string, itemSwapJson: any): PresetItemSwap => { + const itemSwap = ItemSwap.fromJson(itemSwapJson); + return makePresetItemSwapGearHelper(name, itemSwap); +}; + +export const makePresetItemSwapGearHelper = (name: string, itemSwap: ItemSwap): PresetItemSwap => { + return { + name, + itemSwap, + }; +}; + +export const makePresetBuild = ( + name: string, + { gear, itemSwap, talents, rotation, rotationType, epWeights, encounter, race }: PresetBuildOptions, +): PresetBuild => { + return { name, itemSwap, gear, talents, rotation, rotationType, epWeights, encounter, race }; }; export type SpecCheckWarning = { diff --git a/ui/paladin/retribution/apls/default.apl.json b/ui/paladin/retribution/apls/default.apl.json index 4e84a50388..b50222b6ce 100644 --- a/ui/paladin/retribution/apls/default.apl.json +++ b/ui/paladin/retribution/apls/default.apl.json @@ -1,675 +1,39 @@ { "type": "TypeAPL", "prepullActions": [ - { "action": { "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } }, "doAtValue": { "const": { "val": "-0.1s" } } }, - { "action": { "castSpell": { "spellId": { "spellId": 86150 } } }, "doAtValue": { "const": { "val": "-0.1s" } } } + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-10s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":86150}}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-0.1s"}}} ], "priorityList": [ - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "currentTime": {} }, "rhs": { "const": { "val": "0s" } } } }, - { "cmp": { "op": "OpEq", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 20271 } } - } - }, - { - "action": { - "condition": { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 31801 } } } } }, - "castSpell": { "spellId": { "spellId": 31801 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 2825, "tag": -1 } } } }, - { "action": { "castSpell": { "spellId": { "spellId": 57933, "tag": -1 } } } }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 31884 } } }, - { - "cmp": { - "op": "OpGe", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 31884 } } }, - "rhs": { "const": { "val": "55s" } } - } - } - ] - } - }, - "castSpell": { "spellId": { "itemId": 69002 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "not": { "val": { "spellIsKnown": { "spellId": { "itemId": 68972 } } } } }, - { "not": { "val": { "spellIsKnown": { "spellId": { "itemId": 69113 } } } } }, - { "auraIsActive": { "auraId": { "spellId": 31884 } } } - ] - } - }, - "autocastOtherCooldowns": {} - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "or": { "vals": [{ "auraIsKnown": { "auraId": { "itemId": 68972 } } }, { "auraIsKnown": { "auraId": { "itemId": 69113 } } }] } }, - { "not": { "val": { "spellIsReady": { "spellId": { "spellId": 85696 } } } } }, - { - "cmp": { - "op": "OpLt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "116s" } } - } - }, - { - "or": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99116 } } } } }, - { - "cmp": { - "op": "OpEq", - "lhs": { "auraNumStacks": { "auraId": { "spellId": 96923 } } }, - "rhs": { "const": { "val": "5" } } - } - }, - { - "cmp": { - "op": "OpLt", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "16s" } } - } - } - ] - } - }, - { - "or": { - "vals": [ - { - "and": { - "vals": [ - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } }, - { "spellCanCast": { "spellId": { "spellId": 35395 } } } - ] - } - }, - { - "or": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } }, - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 90174 } } } - ] - } - } - ] - } - } - ] - } - }, - "autocastOtherCooldowns": {} - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { - "and": { - "vals": [ - { - "cmp": { - "op": "OpGe", - "lhs": { "numStatBuffCooldowns": { "statType2": -1, "statType3": -1 } }, - "rhs": { "const": { "val": "1" } } - } - }, - { - "or": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 31884 } } }, - { - "and": { - "vals": [ - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 85696 } } } } }, - { - "cmp": { - "op": "OpGt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "35s" } } - } - } - ] - } - }, - { - "and": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 85696 } } }, - { - "cmp": { - "op": "OpLt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "116s" } } - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "and": { - "vals": [ - { - "cmp": { - "op": "OpEq", - "lhs": { "numStatBuffCooldowns": { "statType2": -1, "statType3": -1 } }, - "rhs": { "const": { "val": "0" } } - } - }, - { - "or": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 31884 } } }, - { - "and": { - "vals": [ - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 85696 } } } } }, - { - "cmp": { - "op": "OpGt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "55s" } } - } - } - ] - } - } - ] - } - }, - { "not": { "val": { "spellIsKnown": { "spellId": { "itemId": 68972 } } } } }, - { "not": { "val": { "spellIsKnown": { "spellId": { "itemId": 69113 } } } } } - ] - } - }, - { - "and": { - "vals": [ - { - "or": { - "vals": [ - { "spellIsKnown": { "spellId": { "itemId": 68972 } } }, - { "spellIsKnown": { "spellId": { "itemId": 69113 } } } - ] - } - }, - { - "or": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 85696 } } }, - { - "cmp": { - "op": "OpGt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "55s" } } - } - }, - { - "and": { - "vals": [ - { - "or": { - "vals": [ - { "spellIsReady": { "spellId": { "spellId": 85696 } } }, - { - "cmp": { - "op": "OpLe", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "5s" } } - } - } - ] - } - }, - { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { - "cmp": { - "op": "OpGe", - "lhs": { "currentHolyPower": {} }, - "rhs": { "const": { "val": "2" } } - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 82174 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 85696 } } } } }, - { "spellIsReady": { "spellId": { "spellId": 85696 } } }, - { - "or": { - "vals": [ - { - "and": { - "vals": [ - { "auraIsInactiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "2" } } } } - ] - } - }, - { - "and": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { "cmp": { "op": "OpEq", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "2" } } } } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 35395 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 53657 } } } } }, - { - "or": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 105767 } } } } }, - { - "and": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 105767 } } }, - { "auraIsInactiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 20271 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpLt", "lhs": { "currentMana": {} }, "rhs": { "const": { "val": "16000" } } } }, - "castSpell": { "spellId": { "spellId": 28730 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { - "and": { - "vals": [ - { - "cmp": { - "op": "OpLt", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "34s" } } - } - }, - { "auraIsKnown": { "auraId": { "spellId": 99116 } } } - ] - } - }, - { - "and": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99116 } } } } }, - { - "or": { - "vals": [ - { - "cmp": { - "op": "OpLe", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "10s" } } - } - }, - { - "cmp": { - "op": "OpGe", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 85696 } } }, - "rhs": { "remainingTime": {} } - } - } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 86150 } } - } - }, - { - "action": { - "condition": { - "and": { "vals": [{ "auraIsActive": { "auraId": { "spellId": 31884 } } }, { "auraIsActive": { "auraId": { "spellId": 85696 } } }] } - }, - "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99116 } } } } }, - { - "cmp": { - "op": "OpGe", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 84963 } } }, - "rhs": { "const": { "val": "20s" } } - } - } - ] - } - }, - "strictSequence": { "actions": [{ "castSpell": { "spellId": { "spellId": 85696 } } }, { "castSpell": { "spellId": { "spellId": 31884 } } }] } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { - "or": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 99116 } } }, - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 84963 } } } } }, - { - "cmp": { - "op": "OpLt", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 84963 } } }, - "rhs": { "const": { "val": "20s" } } - } - } - ] - } - } - ] - } - }, - "strictSequence": { "actions": [{ "castSpell": { "spellId": { "spellId": 85696 } } }, { "castSpell": { "spellId": { "spellId": 84963 } } }] } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 85696 } } }, - { - "or": { - "vals": [ - { - "and": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 99116 } } }, - { - "cmp": { - "op": "OpLt", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "34s" } } - } - } - ] - } - }, - { - "and": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99116 } } } } }, - { - "cmp": { - "op": "OpLt", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 85696 } } }, - "rhs": { "const": { "val": "19s" } } - } - } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 31884 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } }, - "castSpell": { "spellId": { "spellId": 35395 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "not": { "val": { "spellIsReady": { "spellId": { "spellId": 85696 } } } } }, - { "not": { "val": { "spellCanCast": { "spellId": { "spellId": 85696 } } } } }, - { "cmp": { "op": "OpGt", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "6s" } } } }, - { - "or": { - "vals": [ - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 84963 } } } } }, - { - "cmp": { - "op": "OpLe", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 84963 } } }, - "rhs": { "const": { "val": "1s" } } - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 84963 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 105767 } } }, - { "auraIsInactiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 85696 } } } } }, - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 20271 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 90174 } } }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } }, - { - "or": { - "vals": [ - { - "and": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 54934 } } } } }, - { "auraIsActive": { "auraId": { "spellId": 85696 } } } - ] - } - }, - { - "cmp": { - "op": "OpLe", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 35395 } } }, - "rhs": { "const": { "val": "1.25s" } } - } - }, - { "auraIsActive": { "auraId": { "spellId": 96929 } } } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 85256 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 105767 } } }, - { "not": { "val": { "auraIsActive": { "auraId": { "spellId": 85696 } } } } }, - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 20271 } } - } - }, - { "action": { "condition": { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 59578 } } }, "castSpell": { "spellId": { "spellId": 879 } } } }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } }, - { - "cmp": { - "op": "OpGt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 35395 } } }, - "rhs": { "const": { "val": "1.25s" } } - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 85256 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 24275 } } } }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 105767 } } } } }, - { - "and": { - "vals": [ - { "auraIsKnown": { "auraId": { "spellId": 105767 } } }, - { "auraIsActive": { "auraId": { "spellId": 85696 } } }, - { "cmp": { "op": "OpLt", "lhs": { "currentHolyPower": {} }, "rhs": { "const": { "val": "3" } } } } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 20271 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { - "cmp": { - "op": "OpLt", - "lhs": { "spellTimeToReady": { "spellId": { "spellId": 35395 } } }, - "rhs": { "const": { "val": "0.4s" } } - } - }, - { "cmp": { "op": "OpGt", "lhs": { "spellTimeToReady": { "spellId": { "spellId": 35395 } } }, "rhs": { "const": { "val": "0s" } } } } - ] - } - }, - "wait": { "duration": { "const": { "val": "0.1s" } } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 2812 } } } }, - { - "action": { - "condition": { "cmp": { "op": "OpGt", "lhs": { "currentMana": {} }, "rhs": { "const": { "val": "16000" } } } }, - "castSpell": { "spellId": { "spellId": 26573 } } - } - } + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentTime":{}},"rhs":{"const":{"val":"0s"}}}},{"cmp":{"op":"OpEq","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":20271}}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"auraId":{"spellId":31801}}}}},"castSpell":{"spellId":{"spellId":31801}}}}, + {"action":{"castSpell":{"spellId":{"spellId":2825,"tag":-1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":57933,"tag":-1}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":31884}}},{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":31884}}},"rhs":{"const":{"val":"55s"}}}}]}},"castSpell":{"spellId":{"itemId":69002}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"spellIsKnown":{"spellId":{"itemId":68972}}}}},{"not":{"val":{"spellIsKnown":{"spellId":{"itemId":69113}}}}},{"auraIsActive":{"auraId":{"spellId":31884}}}]}},"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"auraIsKnown":{"auraId":{"itemId":68972}}},{"auraIsKnown":{"auraId":{"itemId":69113}}}]}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":85696}}}}},{"cmp":{"op":"OpLt","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"116s"}}}},{"or":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99116}}}}},{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":96923}}},"rhs":{"const":{"val":"5"}}}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":85696}}},"rhs":{"const":{"val":"16s"}}}}]}},{"or":{"vals":[{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}},{"spellCanCast":{"spellId":{"spellId":35395}}}]}},{"or":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}},{"auraIsActiveWithReactionTime":{"auraId":{"spellId":90174}}}]}}]}}]}},"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"or":{"vals":[{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"numStatBuffCooldowns":{"statType2":-1,"statType3":-1}},"rhs":{"const":{"val":"1"}}}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":31884}}},{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":85696}}}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"35s"}}}}]}},{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":85696}}},{"cmp":{"op":"OpLt","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"116s"}}}}]}}]}}]}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numStatBuffCooldowns":{"statType2":-1,"statType3":-1}},"rhs":{"const":{"val":"0"}}}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":31884}}},{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":85696}}}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"55s"}}}}]}}]}},{"not":{"val":{"spellIsKnown":{"spellId":{"itemId":68972}}}}},{"not":{"val":{"spellIsKnown":{"spellId":{"itemId":69113}}}}}]}},{"and":{"vals":[{"or":{"vals":[{"spellIsKnown":{"spellId":{"itemId":68972}}},{"spellIsKnown":{"spellId":{"itemId":69113}}}]}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":85696}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"55s"}}}},{"and":{"vals":[{"or":{"vals":[{"spellIsReady":{"spellId":{"spellId":85696}}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"5s"}}}}]}},{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":90174}}},{"cmp":{"op":"OpGe","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"2"}}}}]}}]}}]}}]}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":85696}}}}},{"spellIsReady":{"spellId":{"spellId":85696}}},{"or":{"vals":[{"and":{"vals":[{"auraIsInactiveWithReactionTime":{"auraId":{"spellId":90174}}},{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"2"}}}}]}},{"and":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":90174}}},{"cmp":{"op":"OpEq","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"2"}}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":35395}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":53657}}}}},{"or":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":105767}}}}},{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":105767}}},{"auraIsInactiveWithReactionTime":{"auraId":{"spellId":90174}}},{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":20271}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentMana":{}},"rhs":{"const":{"val":"16000"}}}},"castSpell":{"spellId":{"spellId":28730}}}}, + {"action":{"condition":{"or":{"vals":[{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":85696}}},"rhs":{"const":{"val":"34s"}}}},{"auraIsKnown":{"auraId":{"spellId":99116}}}]}},{"and":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99116}}}}},{"or":{"vals":[{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"const":{"val":"10s"}}}},{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":85696}}},"rhs":{"remainingTime":{}}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":86150}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":31884}}},{"auraIsActive":{"auraId":{"spellId":85696}}}]}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99116}}}}},{"cmp":{"op":"OpGe","lhs":{"auraRemainingTime":{"auraId":{"spellId":84963}}},"rhs":{"const":{"val":"20s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":85696}}},{"castSpell":{"spellId":{"spellId":31884}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"auraIsKnown":{"auraId":{"spellId":99116}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":84963}}}}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":84963}}},"rhs":{"const":{"val":"20s"}}}}]}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":85696}}},{"castSpell":{"spellId":{"spellId":84963}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":85696}}},{"or":{"vals":[{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":99116}}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":85696}}},"rhs":{"const":{"val":"34s"}}}}]}},{"and":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99116}}}}},{"cmp":{"op":"OpLt","lhs":{"auraRemainingTime":{"auraId":{"spellId":85696}}},"rhs":{"const":{"val":"19s"}}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":31884}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}},"castSpell":{"spellId":{"spellId":35395}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"spellIsReady":{"spellId":{"spellId":85696}}}}},{"not":{"val":{"spellCanCast":{"spellId":{"spellId":85696}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"6s"}}}},{"or":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":84963}}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":84963}}},"rhs":{"const":{"val":"1s"}}}}]}}]}},"castSpell":{"spellId":{"spellId":84963}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":105767}}},{"auraIsInactiveWithReactionTime":{"auraId":{"spellId":90174}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":85696}}}}},{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":20271}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":90174}}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}},{"or":{"vals":[{"and":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":54934}}}}},{"auraIsActive":{"auraId":{"spellId":85696}}}]}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"1.25s"}}}},{"auraIsActive":{"auraId":{"spellId":96929}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":85256}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":105767}}},{"not":{"val":{"auraIsActive":{"auraId":{"spellId":85696}}}}},{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":20271}}}}, + {"action":{"condition":{"auraIsActiveWithReactionTime":{"auraId":{"spellId":59578}}},"castSpell":{"spellId":{"spellId":879}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"1.25s"}}}}]}},"castSpell":{"spellId":{"spellId":85256}}}}, + {"action":{"castSpell":{"spellId":{"spellId":24275}}}}, + {"action":{"condition":{"or":{"vals":[{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":105767}}}}},{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":105767}}},{"auraIsActive":{"auraId":{"spellId":85696}}},{"cmp":{"op":"OpLt","lhs":{"currentHolyPower":{}},"rhs":{"const":{"val":"3"}}}}]}}]}},"castSpell":{"spellId":{"spellId":20271}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"0.4s"}}}},{"cmp":{"op":"OpGt","lhs":{"spellTimeToReady":{"spellId":{"spellId":35395}}},"rhs":{"const":{"val":"0s"}}}}]}},"wait":{"duration":{"const":{"val":"0.1s"}}}}}, + {"action":{"castSpell":{"spellId":{"spellId":2812}}}}, + {"action":{"condition":{"cmp":{"op":"OpGt","lhs":{"currentMana":{}},"rhs":{"const":{"val":"16000"}}}},"castSpell":{"spellId":{"spellId":26573}}}} ] } diff --git a/ui/paladin/retribution/gear_sets/item_swap_4p_t11.gear.json b/ui/paladin/retribution/gear_sets/item_swap_4p_t11.gear.json new file mode 100644 index 0000000000..dfdc5b7559 --- /dev/null +++ b/ui/paladin/retribution/gear_sets/item_swap_4p_t11.gear.json @@ -0,0 +1,36 @@ +{ + "items": [ + { + "id": 65226, + "gems": [0, 52235] + }, + {}, + { + "id": 65228, + "gems": [52235] + }, + {}, + { + "id": 65224, + "enchant": 4102, + "gems": [52235, 52235], + "reforging": 129 + }, + {}, + {}, + {}, + { + "id": 65227, + "gems": [52235, 52235], + "reforging": 129 + }, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {} + ] +} diff --git a/ui/paladin/retribution/inputs.ts b/ui/paladin/retribution/inputs.ts index 297eacc1b5..08b30a1c54 100644 --- a/ui/paladin/retribution/inputs.ts +++ b/ui/paladin/retribution/inputs.ts @@ -1,17 +1,9 @@ import * as InputHelpers from "../../core/components/input_helpers"; import { Spec } from "../../core/proto/common"; -import {PaladinSpecs} from "../../core/proto_utils/utils"; // Configuration for spec-specific UI elements on the settings tab. // These don't need to be in a separate file but it keeps things cleaner. -export const SnapshotGuardian = () => - InputHelpers.makeClassOptionsBooleanInput({ - fieldName: 'snapshotGuardian', - label: 'Snapshot T11 Protection 4pc set bonus', - labelTooltip: "Enable this to make the first Guardian of Ancient Kings cast during pre-pull snapshot the T11 Protection 4pc set bonus (50% increased duration).", - }); - export const StartingHolyPower = () => InputHelpers.makeSpecOptionsNumberInput({ fieldName: 'startingHolyPower', diff --git a/ui/paladin/retribution/presets.ts b/ui/paladin/retribution/presets.ts index 9721f81834..39a93c7eec 100644 --- a/ui/paladin/retribution/presets.ts +++ b/ui/paladin/retribution/presets.ts @@ -12,6 +12,7 @@ import { import { SavedTalents } from '../../core/proto/ui.js'; import { Stats } from '../../core/proto_utils/stats'; import DefaultApl from './apls/default.apl.json'; +import ItemSwap4PT11Gear from './gear_sets/item_swap_4p_t11.gear.json'; import P2_BisRetGear from './gear_sets/p2_bis.gear.json'; import P3_BisRetGear from './gear_sets/p3_bis.gear.json'; import P4_BisRetGear from './gear_sets/p4_bis.gear.json'; @@ -26,6 +27,8 @@ export const P2_BIS_RET_PRESET = PresetUtils.makePresetGear('P2', P2_BisRetGear) export const P3_BIS_RET_PRESET = PresetUtils.makePresetGear('P3', P3_BisRetGear); export const P4_BIS_RET_PRESET = PresetUtils.makePresetGear('P4', P4_BisRetGear); +export const ITEM_SWAP_4P_T11 = PresetUtils.makePresetItemSwapGear('Item Swap - T11 4P ', ItemSwap4PT11Gear); + export const ROTATION_PRESET_DEFAULT = PresetUtils.makePresetAPLRotation('Default', DefaultApl); // Preset options for EP weights @@ -36,8 +39,8 @@ export const P2_EP_PRESET = PresetUtils.makePresetEpWeights( [Stat.StatAttackPower]: 1, [Stat.StatStrength]: 2.28, - [Stat.StatCritRating]: 1.10, - [Stat.StatHasteRating]: 1.00, + [Stat.StatCritRating]: 1.1, + [Stat.StatHasteRating]: 1.0, [Stat.StatMasteryRating]: 1.23, [Stat.StatHitRating]: 2.33, @@ -64,7 +67,7 @@ export const P3_EP_PRESET = PresetUtils.makePresetEpWeights( [Stat.StatExpertiseRating]: 2.21, }, { - [PseudoStat.PseudoStatMainHandDps]: 8.40, + [PseudoStat.PseudoStatMainHandDps]: 8.4, }, ), ); @@ -76,7 +79,7 @@ export const P4_EP_PRESET = PresetUtils.makePresetEpWeights( [Stat.StatAttackPower]: 1, [Stat.StatStrength]: 2.28, - [Stat.StatCritRating]: 1.50, + [Stat.StatCritRating]: 1.5, [Stat.StatHasteRating]: 1.15, [Stat.StatMasteryRating]: 1.68, @@ -121,6 +124,7 @@ export const P3_PRESET = PresetUtils.makePresetBuild('P3', { epWeights: P3_EP_PRESET, talents: DefaultTalents, rotationType: APLRotationType.TypeAuto, + itemSwap: ITEM_SWAP_4P_T11, }); export const P4_PRESET = PresetUtils.makePresetBuild('P4', { @@ -134,7 +138,6 @@ export const DefaultOptions = RetributionPaladinOptions.create({ classOptions: { aura: PaladinAura.Retribution, seal: PaladinSeal.Truth, - snapshotGuardian: true, }, }); @@ -152,3 +155,4 @@ export const OtherDefaults = { distanceFromTarget: 5, iterationCount: 25000, }; + diff --git a/ui/paladin/retribution/sim.ts b/ui/paladin/retribution/sim.ts index 943a3ae6a8..08c3425ce9 100644 --- a/ui/paladin/retribution/sim.ts +++ b/ui/paladin/retribution/sim.ts @@ -115,6 +115,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, { defaults: { // Default equipped gear. gear: Presets.P3_BIS_RET_PRESET.gear, + // Default item swap set. + itemSwap: Presets.ITEM_SWAP_4P_T11.itemSwap, // Default EP weights for sorting gear in the gear picker. epWeights: Presets.P3_EP_PRESET.epWeights, // Default stat caps for the Reforge Optimizer @@ -171,21 +173,9 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, { excludeBuffDebuffInputs: [BuffDebuffInputs.BleedDebuff, BuffDebuffInputs.DamagePercentBuff], // Inputs to include in the 'Other' section on the settings tab. otherInputs: { - inputs: [ - RetributionInputs.SnapshotGuardian(), - RetributionInputs.StartingHolyPower(), - OtherInputs.InputDelay, - OtherInputs.TankAssignment, - OtherInputs.InFrontOfTarget, - ], + inputs: [RetributionInputs.StartingHolyPower(), OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget], }, - itemSwapSlots: [ - ItemSlot.ItemSlotHead, - ItemSlot.ItemSlotShoulder, - ItemSlot.ItemSlotChest, - ItemSlot.ItemSlotHands, - ItemSlot.ItemSlotLegs, - ], + itemSwapSlots: [ItemSlot.ItemSlotHead, ItemSlot.ItemSlotShoulder, ItemSlot.ItemSlotChest, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotLegs], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, From 3c0794951bfbe60dd303b268aea7b0c6fedbaaed Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 22:03:15 +0100 Subject: [PATCH 020/127] Fix compile error --- sim/paladin/guardian_of_ancient_kings.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index 00edfa9a68..50256610b4 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -134,8 +134,6 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor strDepByStackCount[int32(i)] = paladin.NewDynamicMultiplyStat(stats.Strength, 1.0+0.01*float64(i)) } - hasT11Prot4pc := paladin.hasT11Prot4pc() - ancientPowerDuration := duration + time.Second*1 ancientPower := paladin.RegisterAura(core.Aura{ Label: "Ancient Power" + paladin.Label, From add4008c83d6873b0142c0092076557829fe5552 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 23:04:52 +0100 Subject: [PATCH 021/127] Add item swap to tests --- sim/core/character.go | 2 +- sim/core/test_generators.go | 36 +++++++++++++++++---- sim/core/test_utils.go | 10 ++++++ sim/paladin/retribution/retribution_test.go | 4 ++- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/sim/core/character.go b/sim/core/character.go index 1fb1be516c..5b55fb548b 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -810,7 +810,7 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta processArmorSpecialization(sim) }, OnExpire: func(aura *Aura, sim *Simulation) { - disableArmorSpecialization(sim) + processArmorSpecialization(sim) }, OnReset: func(aura *Aura, sim *Simulation) { aura.Activate(sim) diff --git a/sim/core/test_generators.go b/sim/core/test_generators.go index 25786b0d37..fc25c95c27 100644 --- a/sim/core/test_generators.go +++ b/sim/core/test_generators.go @@ -77,6 +77,10 @@ type GearSetCombo struct { Label string GearSet *proto.EquipmentSpec } +type ItemSwapSetCombo struct { + Label string + ItemSwap *proto.ItemSwap +} type TalentsCombo struct { Label string Talents string @@ -111,6 +115,7 @@ type SettingsCombos struct { Rotations []RotationCombo Buffs []BuffsCombo Encounters []EncounterCombo + ItemSwapSets []ItemSwapSetCombo SimOptions *proto.SimOptions IsHealer bool StartingDistances []float64 @@ -118,7 +123,7 @@ type SettingsCombos struct { } func (combos *SettingsCombos) NumTests() int { - return len(combos.Races) * len(combos.GearSets) * len(combos.TalentSets) * len(combos.SpecOptions) * len(combos.Buffs) * len(combos.Encounters) * max(1, len(combos.Rotations)) * len(combos.StartingDistances) + return len(combos.Races) * len(combos.GearSets) * len(combos.TalentSets) * len(combos.SpecOptions) * len(combos.Buffs) * len(combos.Encounters) * max(1, len(combos.Rotations)) * max(1, len(combos.ItemSwapSets)) * len(combos.StartingDistances) } func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsRequest, *proto.StatWeightsRequest, *proto.RaidSimRequest) { @@ -155,6 +160,16 @@ func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsR testNameParts = append(testNameParts, rotationsCombo.Label) } + itemSwapSetCombo := ItemSwapSetCombo{Label: "None", ItemSwap: &proto.ItemSwap{}} + enableItemSwap := false + if len(combos.ItemSwapSets) > 0 { + itemSwapSetIdx := testIdx % len(combos.ItemSwapSets) + testIdx /= len(combos.ItemSwapSets) + itemSwapSetCombo = combos.ItemSwapSets[itemSwapSetIdx] + enableItemSwap = true + testNameParts = append(testNameParts, itemSwapSetCombo.Label) + } + buffsIdx := testIdx % len(combos.Buffs) testIdx /= len(combos.Buffs) buffsCombo := combos.Buffs[buffsIdx] @@ -182,6 +197,8 @@ func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsR Profession1: proto.Profession_Engineering, Cooldowns: combos.Cooldowns, Rotation: rotationsCombo.Rotation, + ItemSwap: itemSwapSetCombo.ItemSwap, + EnableItemSwap: enableItemSwap, DistanceFromTarget: startingDistance, ReactionTimeMs: 100, ChannelClipDelayMs: 50, @@ -437,6 +454,7 @@ type CharacterSuiteConfig struct { Glyphs *proto.Glyphs Talents string Rotation RotationCombo + ItemSwapSet ItemSwapSetCombo StartingDistance float64 Consumes *proto.Consumes @@ -450,6 +468,7 @@ type CharacterSuiteConfig struct { OtherTalentSets []TalentsCombo OtherSpecOptions []SpecOptionsCombo OtherRotations []RotationCombo + OtherItemSwapSets []ItemSwapSetCombo OtherStartingDistances []float64 ItemFilter ItemFilter @@ -471,6 +490,7 @@ func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator }) allSpecOptions := append(config.OtherSpecOptions, config.SpecOptions) allRotations := append(config.OtherRotations, config.Rotation) + allItemSwapSets := append(config.OtherItemSwapSets, config.ItemSwapSet) allStartingDistances := append(config.OtherStartingDistances, config.StartingDistance) defaultPlayer := WithSpec( @@ -484,6 +504,7 @@ func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator Glyphs: config.Glyphs, Profession1: proto.Profession_Engineering, Rotation: config.Rotation.Rotation, + ItemSwap: config.ItemSwapSet.ItemSwap, Cooldowns: config.Cooldowns, InFrontOfTarget: config.InFrontOfTarget, @@ -515,12 +536,13 @@ func FullCharacterTestSuiteGenerator(config CharacterSuiteConfig) TestGenerator { name: "Settings", generator: &SettingsCombos{ - Class: config.Class, - Races: allRaces, - GearSets: allGearSets, - TalentSets: allTalentSets, - SpecOptions: allSpecOptions, - Rotations: allRotations, + Class: config.Class, + Races: allRaces, + GearSets: allGearSets, + TalentSets: allTalentSets, + SpecOptions: allSpecOptions, + Rotations: allRotations, + ItemSwapSets: allItemSwapSets, Buffs: []BuffsCombo{ { Label: "NoBuffs", diff --git a/sim/core/test_utils.go b/sim/core/test_utils.go index 332ba5936b..fad01b4a76 100644 --- a/sim/core/test_utils.go +++ b/sim/core/test_utils.go @@ -204,3 +204,13 @@ func GetGearSet(dir string, file string) GearSetCombo { return GearSetCombo{Label: file, GearSet: EquipmentSpecFromJsonString(string(data))} } + +func GetItemSwapGearSet(dir string, file string) ItemSwapSetCombo { + filePath := dir + "/" + file + ".gear.json" + data, err := os.ReadFile(filePath) + if err != nil { + log.Fatalf("failed to load gear json file: %s, %s", filePath, err) + } + + return ItemSwapSetCombo{Label: file, ItemSwap: &proto.ItemSwap{Items: EquipmentSpecFromJsonString(string(data)).Items}} +} diff --git a/sim/paladin/retribution/retribution_test.go b/sim/paladin/retribution/retribution_test.go index 645042c5fa..a842c06923 100644 --- a/sim/paladin/retribution/retribution_test.go +++ b/sim/paladin/retribution/retribution_test.go @@ -33,6 +33,7 @@ func TestRetribution(t *testing.T) { Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Basic", SpecOptions: DefaultOptions}, Rotation: core.GetAplRotation("../../../ui/paladin/retribution/apls", "default"), + ItemSwapSet: core.GetItemSwapGearSet("../../../ui/paladin/retribution/gear_sets", "item_swap_4p_t11"), ItemFilter: core.ItemFilter{ WeaponTypes: []proto.WeaponType{ @@ -58,7 +59,7 @@ func BenchmarkSimulate(b *testing.B) { &proto.Player{ Race: proto.Race_RaceBloodElf, Class: proto.Class_ClassPaladin, - Equipment: core.GetGearSet("../../../ui/retribution_paladin/gear_sets", "p3_bis").GearSet, + Equipment: core.GetGearSet("../../../ui/paladin/retribution/gear_sets", "p3_bis").GearSet, Consumes: FullConsumes, Spec: DefaultOptions, Glyphs: StandardGlyphs, @@ -66,6 +67,7 @@ func BenchmarkSimulate(b *testing.B) { Buffs: core.FullIndividualBuffs, ReactionTimeMs: 100, Rotation: core.GetAplRotation("../../../ui/paladin/retribution/apls", "default").Rotation, + ItemSwap: core.GetItemSwapGearSet("../../../ui/paladin/retribution/gear_sets", "item_swap_4p_t11").ItemSwap, }, core.FullPartyBuffs, core.FullRaidBuffs, From 9121d906dfd5379fdc9a8a1bd88fd01b6102833f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 12 Dec 2024 23:17:51 +0100 Subject: [PATCH 022/127] Update tests --- sim/death_knight/blood/TestBlood.results | 48 +- sim/death_knight/frost/TestFrost.results | 72 +- sim/death_knight/unholy/TestUnholy.results | 24 +- sim/druid/balance/TestBalance.results | 48 +- sim/druid/feral/TestFeral.results | 288 ++-- sim/druid/guardian/TestGuardian.results | 24 +- sim/hunter/beast_mastery/TestBM.results | 48 +- sim/hunter/marksmanship/TestMM.results | 24 +- sim/hunter/survival/TestSV.results | 48 +- sim/mage/arcane/TestArcane.results | 12 +- sim/mage/fire/TestFire.results | 24 +- sim/paladin/protection/TestProtection.results | 24 +- .../retribution/TestRetribution.results | 1440 ++++++++--------- sim/priest/shadow/TestShadow.results | 36 +- .../assassination/TestAssassination.results | 288 ++-- sim/rogue/combat/TestCombat.results | 288 ++-- sim/rogue/subtlety/TestSubtlety.results | 288 ++-- sim/shaman/elemental/TestElemental.results | 216 +-- .../enhancement/TestEnhancement.results | 36 +- sim/warlock/affliction/TestAffliction.results | 48 +- sim/warlock/demonology/TestDemonology.results | 192 +-- .../destruction/TestDestruction.results | 48 +- sim/warrior/arms/TestArms.results | 48 +- sim/warrior/fury/TestFury.results | 384 ++--- .../protection/TestProtectionWarrior.results | 72 +- ui/druid/balance/sim.ts | 3 +- 26 files changed, 2036 insertions(+), 2035 deletions(-) diff --git a/sim/death_knight/blood/TestBlood.results b/sim/death_knight/blood/TestBlood.results index 9e8860c33a..655c1dd3d8 100644 --- a/sim/death_knight/blood/TestBlood.results +++ b/sim/death_knight/blood/TestBlood.results @@ -2293,7 +2293,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24669.85523 tps: 120643.56874 @@ -2301,7 +2301,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 19505.877 tps: 95924.98705 @@ -2309,7 +2309,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 26132.02139 tps: 118365.59295 @@ -2317,7 +2317,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19154.14953 tps: 93195.9648 @@ -2325,7 +2325,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15069.29914 tps: 73750.28449 @@ -2333,7 +2333,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18672.63407 tps: 82987.33494 @@ -2341,7 +2341,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28660.19622 tps: 140958.48133 @@ -2349,7 +2349,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23217.93007 tps: 115632.32683 @@ -2357,7 +2357,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29683.00038 tps: 139281.23777 @@ -2365,7 +2365,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22478.78068 tps: 109939.54051 @@ -2373,7 +2373,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17966.08172 tps: 88880.86551 @@ -2381,7 +2381,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21208.05933 tps: 97602.19451 @@ -2389,7 +2389,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24547.23525 tps: 120980.30688 @@ -2397,7 +2397,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 19379.42536 tps: 96063.81141 @@ -2405,7 +2405,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 25750.72802 tps: 117377.23303 @@ -2413,7 +2413,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19043.36736 tps: 93479.17461 @@ -2421,7 +2421,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14973.94396 tps: 73871.71197 @@ -2429,7 +2429,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18370.65141 tps: 82020.75562 @@ -2437,7 +2437,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28559.46187 tps: 141535.1594 @@ -2445,7 +2445,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23105.86989 tps: 116023.44281 @@ -2453,7 +2453,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29366.16779 tps: 138656.3931 @@ -2461,7 +2461,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22348.36641 tps: 110172.54885 @@ -2469,7 +2469,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17875.78122 tps: 89159.12178 @@ -2477,7 +2477,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20955.23537 tps: 97032.37878 diff --git a/sim/death_knight/frost/TestFrost.results b/sim/death_knight/frost/TestFrost.results index e174e0fa58..b9dbbffedc 100644 --- a/sim/death_knight/frost/TestFrost.results +++ b/sim/death_knight/frost/TestFrost.results @@ -2356,7 +2356,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 137721.33838 tps: 135182.56896 @@ -2364,7 +2364,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40728.43781 tps: 38217.19253 @@ -2372,7 +2372,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50528.20297 tps: 44368.01304 @@ -2380,7 +2380,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 91005.76327 tps: 89207.51451 @@ -2388,7 +2388,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27186.03875 tps: 25424.62637 @@ -2396,7 +2396,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31712.56899 tps: 27222.6271 @@ -2404,7 +2404,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 131634.45728 tps: 129092.96936 @@ -2412,7 +2412,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40142.58753 tps: 37674.18284 @@ -2420,7 +2420,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49970.06375 tps: 43827.96731 @@ -2428,7 +2428,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 87361.11696 tps: 85586.8902 @@ -2436,7 +2436,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27002.45946 tps: 25255.54418 @@ -2444,7 +2444,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31505.08336 tps: 26986.62098 @@ -2452,7 +2452,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 122767.5033 tps: 120345.57298 @@ -2460,7 +2460,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30553.16477 tps: 28106.04307 @@ -2468,7 +2468,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38835.93118 tps: 32747.02713 @@ -2476,7 +2476,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80683.31556 tps: 78981.71336 @@ -2484,7 +2484,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 20151.55211 tps: 18448.08132 @@ -2492,7 +2492,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 23929.81508 tps: 19436.86871 @@ -2500,7 +2500,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 138356.07867 tps: 135876.49837 @@ -2508,7 +2508,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40388.36613 tps: 37956.53571 @@ -2516,7 +2516,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50111.0823 tps: 44112.02541 @@ -2524,7 +2524,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 90558.62791 tps: 88820.87306 @@ -2532,7 +2532,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27037.26977 tps: 25324.42741 @@ -2540,7 +2540,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31461.53397 tps: 27060.24209 @@ -2548,7 +2548,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 132109.842 tps: 129640.43576 @@ -2556,7 +2556,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40204.49601 tps: 37768.96736 @@ -2564,7 +2564,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49320.11947 tps: 43312.14648 @@ -2572,7 +2572,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 86798.38196 tps: 85090.43778 @@ -2580,7 +2580,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26837.90326 tps: 25128.15421 @@ -2588,7 +2588,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31325.83897 tps: 26893.18841 @@ -2596,7 +2596,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 122551.09528 tps: 120229.85276 @@ -2604,7 +2604,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30300.37543 tps: 27935.4463 @@ -2612,7 +2612,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38366.37359 tps: 32412.13267 @@ -2620,7 +2620,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80034.1915 tps: 78378.67504 @@ -2628,7 +2628,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 20055.40831 tps: 18402.23803 @@ -2636,7 +2636,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 23817.1829 tps: 19389.9972 diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 2b27b5fe84..9cd3f6a15c 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -2292,7 +2292,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 74276.71771 tps: 88202.02112 @@ -2300,7 +2300,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42032.12841 tps: 31192.40381 @@ -2308,7 +2308,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 55251.6112 tps: 35507.81174 @@ -2316,7 +2316,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 47136.68691 tps: 55693.50917 @@ -2324,7 +2324,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26785.48412 tps: 20231.50952 @@ -2332,7 +2332,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31978.40811 tps: 21924.5209 @@ -2340,7 +2340,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 73897.48002 tps: 88441.98205 @@ -2348,7 +2348,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41582.23045 tps: 31241.51489 @@ -2356,7 +2356,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54271.66732 tps: 35416.34748 @@ -2364,7 +2364,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 47002.09355 tps: 56003.19612 @@ -2372,7 +2372,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26615.1603 tps: 20322.05493 @@ -2380,7 +2380,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31593.31655 tps: 21851.88132 diff --git a/sim/druid/balance/TestBalance.results b/sim/druid/balance/TestBalance.results index ab065d9eb1..53efc19b02 100644 --- a/sim/druid/balance/TestBalance.results +++ b/sim/druid/balance/TestBalance.results @@ -2076,168 +2076,168 @@ dps_results: { } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 34242.97212 tps: 42646.49644 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29087.53113 tps: 29109.91469 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37864.75401 tps: 37117.04129 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23052.41762 tps: 31102.27381 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19371.9344 tps: 19524.06328 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20169.69037 tps: 20026.31941 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 34254.61251 tps: 42702.03228 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29069.49744 tps: 29095.08398 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37935.3411 tps: 37190.20525 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23120.36448 tps: 31194.68044 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19405.9333 tps: 19559.16505 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20168.8907 tps: 20027.48307 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52158.10466 tps: 51010.03837 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38693.42443 tps: 35530.49664 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47482.88079 tps: 42986.92394 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35336.17272 tps: 37806.66736 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26347.90242 tps: 24203.42655 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26896.28273 tps: 24391.07684 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52195.59824 tps: 51760.63211 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38920.06884 tps: 35897.99273 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47541.13119 tps: 43399.18718 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35743.70826 tps: 38241.79304 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26352.92629 tps: 24304.8779 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26958.63748 tps: 24633.07138 diff --git a/sim/druid/feral/TestFeral.results b/sim/druid/feral/TestFeral.results index 4c2226a13c..3770a95778 100644 --- a/sim/druid/feral/TestFeral.results +++ b/sim/druid/feral/TestFeral.results @@ -2076,1008 +2076,1008 @@ dps_results: { } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 86234.83332 tps: 118475.79316 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20915.45051 tps: 37073.34817 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24700.24888 tps: 34095.49087 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58764.58945 tps: 82454.96193 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12899.44545 tps: 23106.8782 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13221.22223 tps: 22599.59466 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41727.35725 tps: 56119.65493 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38723.32213 tps: 49095.64475 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50233.98497 tps: 44159.0619 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26425.57665 tps: 35432.00064 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25114.06356 tps: 32608.05496 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28051.50279 tps: 25608.59264 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38378.62616 tps: 27251.08521 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38082.34667 tps: 27038.46614 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50054.68352 tps: 35538.8253 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24083.32183 tps: 17101.52138 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24239.64175 tps: 17210.3558 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27774.74336 tps: 19720.63579 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 86094.30431 tps: 118190.04864 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20745.94677 tps: 36099.44576 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24327.8427 tps: 32251.26307 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58481.84671 tps: 82157.73726 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12895.11512 tps: 23279.32899 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13291.39053 tps: 22953.35918 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 40837.54896 tps: 55624.29524 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37955.62149 tps: 48008.00256 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49050.82217 tps: 42739.38483 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25821.12899 tps: 35387.50873 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24434.42371 tps: 31892.38853 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27132.2619 tps: 23399.30285 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 37469.5314 tps: 26605.62793 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37063.89143 tps: 26315.36291 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48876.13959 tps: 34702.05911 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23539.64765 tps: 16715.51271 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 23633.03482 tps: 16779.66488 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26856.66253 tps: 19068.7984 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 78183.12186 tps: 108204.50357 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17988.84074 tps: 30915.1449 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 21353.04329 tps: 27001.62243 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52465.60346 tps: 74989.09933 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 11004.75558 tps: 19538.78221 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11366.46693 tps: 18598.73425 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 36208.00646 tps: 52493.0076 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 32751.94722 tps: 43472.31467 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 41273.90308 tps: 39230.36868 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23322.768 tps: 36628.57159 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20863.95814 tps: 29638.07599 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22970.09221 tps: 24070.70668 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32358.38142 tps: 22976.71145 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31860.69954 tps: 22621.09667 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40608.47655 tps: 28832.01835 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19913.89514 tps: 14141.22843 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19979.22851 tps: 14185.4624 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22512.78571 tps: 15984.64586 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 77959.97062 tps: 110211.3202 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17757.59121 tps: 30372.71949 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 21043.73918 tps: 25942.55655 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52126.95402 tps: 73171.64705 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10875.61011 tps: 19116.81398 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11186.20811 tps: 18318.89524 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 35243.51201 tps: 51331.03946 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 32010.23011 tps: 41825.63546 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40361.05517 tps: 37001.92913 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 22561.41165 tps: 33589.18449 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20258.09152 tps: 28433.54508 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22198.68503 tps: 24268.74512 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 31603.566 tps: 22440.7925 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31142.29578 tps: 22111.03 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39741.60909 tps: 28216.54246 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19496.895 tps: 13845.15833 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19432.51539 tps: 13797.29609 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 21878.25067 tps: 15534.12597 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 85925.91773 tps: 118298.1786 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20905.51202 tps: 36907.60437 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24483.81466 tps: 34401.8812 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58882.25381 tps: 84222.21896 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12910.74447 tps: 23695.53719 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13038.94097 tps: 23232.6255 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41890.88673 tps: 56954.32118 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38719.56706 tps: 49836.13559 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49671.97157 tps: 44701.91324 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26760.02751 tps: 36902.30261 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24951.07237 tps: 32822.00838 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27314.79688 tps: 24607.57637 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38342.33694 tps: 27225.31987 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37892.89516 tps: 26903.95557 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49576.18805 tps: 35199.09351 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23998.62124 tps: 17041.38396 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24228.44439 tps: 17202.40568 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27141.34992 tps: 19270.92644 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 85352.54288 tps: 119648.751 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20774.13221 tps: 36244.60755 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24215.55586 tps: 32077.19171 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58782.85544 tps: 84516.91162 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12911.66584 tps: 23094.33041 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13062.03927 tps: 23427.85312 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 40941.65057 tps: 55680.5158 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37833.94812 tps: 48014.36177 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48466.15948 tps: 43950.42609 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25636.17115 tps: 34817.42447 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24375.41111 tps: 31973.5814 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26694.56009 tps: 24174.95963 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 37539.52825 tps: 26655.3257 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37059.15039 tps: 26311.99678 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48015.37372 tps: 34090.91534 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23329.66779 tps: 16566.42701 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 23594.16796 tps: 16752.06941 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26408.7808 tps: 18750.80236 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 77919.83168 tps: 109062.35509 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17965.47616 tps: 31465.04937 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 20852.36275 tps: 27389.18271 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52980.94488 tps: 76961.65787 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10966.96606 tps: 19914.57223 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11125.36376 tps: 19140.107 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 36060.20018 tps: 53237.78684 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 32729.3344 tps: 44115.26496 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40778.43038 tps: 39322.73834 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 22831.97988 tps: 34401.41026 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20765.53364 tps: 30419.61423 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22622.04726 tps: 25386.62066 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32326.58603 tps: 22954.13672 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31753.39831 tps: 22544.9128 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40185.46212 tps: 28531.67811 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19921.7333 tps: 14146.79353 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19977.6253 tps: 14184.32412 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22309.30517 tps: 15840.17467 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 77283.39432 tps: 108584.35409 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17822.57249 tps: 30562.54526 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 20646.47557 tps: 26154.86989 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52612.60696 tps: 76429.74178 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10924.3815 tps: 20025.91838 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11049.04811 tps: 20356.22891 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 35173.05779 tps: 51878.25421 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31865.57593 tps: 42101.00297 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39787.37543 tps: 38169.39694 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 22457.78122 tps: 33912.02962 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20305.03522 tps: 29276.48749 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 21920.80528 tps: 24795.51075 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 31438.54652 tps: 22323.62867 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31017.50758 tps: 22022.43038 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 38924.68628 tps: 27636.52726 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19329.71478 tps: 13726.46037 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19456.52728 tps: 13814.34453 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 21628.9525 tps: 15357.12428 diff --git a/sim/druid/guardian/TestGuardian.results b/sim/druid/guardian/TestGuardian.results index 935fce971b..b12734503b 100644 --- a/sim/druid/guardian/TestGuardian.results +++ b/sim/druid/guardian/TestGuardian.results @@ -2365,7 +2365,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29403.35693 tps: 147863.97881 @@ -2373,7 +2373,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 12818.07747 tps: 64164.11358 @@ -2381,7 +2381,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 14854.11787 tps: 74350.4081 @@ -2389,7 +2389,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 20235.5556 tps: 102408.6405 @@ -2397,7 +2397,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 8500.69959 tps: 42584.4238 @@ -2405,7 +2405,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 8745.58682 tps: 43816.70078 @@ -2413,7 +2413,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26137.59873 tps: 131478.83696 @@ -2421,7 +2421,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 10927.10046 tps: 54703.99314 @@ -2429,7 +2429,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12716.35061 tps: 63657.51139 @@ -2437,7 +2437,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17897.2269 tps: 90651.56115 @@ -2445,7 +2445,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7367.8858 tps: 36916.19732 @@ -2453,7 +2453,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7460.07698 tps: 37383.25992 diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index cf69f34b53..5cfe035684 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -2191,168 +2191,168 @@ dps_results: { } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30726.06928 tps: 19671.02786 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18466.81112 tps: 11362.90752 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30726.06928 tps: 19671.02786 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18466.81112 tps: 11362.90752 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31653.06666 tps: 19823.34671 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19122.56502 tps: 11487.28282 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31653.06666 tps: 19823.34671 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19122.56502 tps: 11487.28282 diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index 5fc4ea4fe9..2f02eeb327 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -2191,84 +2191,84 @@ dps_results: { } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25234.67259 tps: 22939.59865 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 23926.16484 tps: 21620.21352 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30602.78207 tps: 27550.4884 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17078.18121 tps: 15441.49219 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16140.95943 tps: 14529.4337 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18686.74121 tps: 16847.20962 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25499.34834 tps: 23061.2516 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24101.199 tps: 21653.78721 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31187.00626 tps: 27927.49919 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17237.49841 tps: 15504.65828 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16265.91268 tps: 14556.98283 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19007.11435 tps: 17038.34883 diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 2cf33f5c9d..0c39e41f82 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -2191,168 +2191,168 @@ dps_results: { } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 141350.48112 tps: 114532.75506 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 23838.18081 tps: 21134.21672 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 28606.75417 tps: 25061.00716 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 101432.61349 tps: 82041.63252 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16908.69529 tps: 15060.59128 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18082.37819 tps: 15996.81466 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 32695.80736 tps: 29931.06022 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 29950.60203 tps: 27197.95645 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 35957.46745 tps: 32517.93922 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 22889.25171 tps: 20965.75785 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 21138.21538 tps: 19221.97155 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 23133.41368 tps: 20987.39868 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 141988.12159 tps: 115062.45123 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24029.05099 tps: 21177.25416 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 28992.65963 tps: 25218.25242 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 101929.59512 tps: 82477.88376 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17046.36052 tps: 15078.90179 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18390.66544 tps: 16166.60864 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongMultiTarget" value: { dps: 33031.54048 tps: 30102.03081 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongSingleTarget" value: { dps: 30154.19972 tps: 27237.63164 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 36434.92152 tps: 32771.89303 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongMultiTarget" value: { dps: 23119.03409 tps: 21079.14836 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongSingleTarget" value: { dps: 21276.27813 tps: 19244.58352 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 23447.13315 tps: 21159.45718 diff --git a/sim/mage/arcane/TestArcane.results b/sim/mage/arcane/TestArcane.results index 619d7f470f..fd3963d458 100644 --- a/sim/mage/arcane/TestArcane.results +++ b/sim/mage/arcane/TestArcane.results @@ -2058,42 +2058,42 @@ dps_results: { } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-LongMultiTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39369.26986 tps: 52234.00664 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-LongSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39387.35327 tps: 36087.42152 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58246.22784 tps: 54148.68182 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-LongMultiTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25161.59514 tps: 38550.61187 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-LongSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25161.59514 tps: 22996.26214 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31962.09909 tps: 29595.29282 diff --git a/sim/mage/fire/TestFire.results b/sim/mage/fire/TestFire.results index 80153672ab..5d11c87495 100644 --- a/sim/mage/fire/TestFire.results +++ b/sim/mage/fire/TestFire.results @@ -2058,84 +2058,84 @@ dps_results: { } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 97578.28393 tps: 62069.46862 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39234.46869 tps: 34964.17853 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50200.88547 tps: 45055.37509 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 68170.16139 tps: 45334.71048 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27446.2762 tps: 24335.30703 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30223.26691 tps: 26647.08263 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 92850.97693 tps: 60029.84011 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37884.23584 tps: 33670.35537 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45202.68398 tps: 40046.9221 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 68585.37495 tps: 45378.81765 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26414.36298 tps: 23393.68201 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 27767.59615 tps: 24433.67382 diff --git a/sim/paladin/protection/TestProtection.results b/sim/paladin/protection/TestProtection.results index 223c1d6c2c..c95300ebb8 100644 --- a/sim/paladin/protection/TestProtection.results +++ b/sim/paladin/protection/TestProtection.results @@ -2047,84 +2047,84 @@ dps_results: { } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 50806.89786 tps: 260888.77446 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 11278.21562 tps: 56693.81531 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12987.66802 tps: 65259.3785 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 29057.0603 tps: 151459.28518 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7076.26055 tps: 35675.0222 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7729.57184 tps: 38919.35605 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 50499.47065 tps: 259173.95323 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 11289.17862 tps: 56744.36519 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12992.2414 tps: 65276.178 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28687.61387 tps: 149466.34101 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7019.45558 tps: 35382.92059 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7707.0907 tps: 38795.39057 diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index a25565fd12..6cadb98aa7 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -38,2397 +38,2397 @@ character_stats_results: { dps_results: { key: "TestRetribution-AllItems-AgileShadowspiritDiamond" value: { - dps: 39232.4297 - tps: 39102.81226 + dps: 38884.82625 + tps: 38877.25438 } } dps_results: { key: "TestRetribution-AllItems-Althor'sAbacus-50366" value: { - dps: 36827.10125 - tps: 36696.94459 + dps: 36265.73991 + tps: 36257.00466 } } dps_results: { key: "TestRetribution-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37766.26905 - tps: 37631.30797 + dps: 37157.30256 + tps: 37149.61428 } } dps_results: { key: "TestRetribution-AllItems-Anhuur'sHymnal-55889" value: { - dps: 36650.47403 - tps: 36516.25692 + dps: 36153.10143 + tps: 36144.82715 } } dps_results: { key: "TestRetribution-AllItems-Anhuur'sHymnal-56407" value: { - dps: 36650.59586 - tps: 36516.37875 + dps: 36152.21897 + tps: 36143.94469 } } dps_results: { key: "TestRetribution-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 38435.20124 - tps: 38299.15673 + dps: 37783.51032 + tps: 37775.82204 } } dps_results: { key: "TestRetribution-AllItems-ArmorofRadiantGlory" value: { - dps: 29543.32595 - tps: 29448.98009 + dps: 29156.44707 + tps: 29177.46831 } } dps_results: { key: "TestRetribution-AllItems-ArrowofTime-72897" value: { - dps: 37723.64746 - tps: 37599.06831 + dps: 37431.07842 + tps: 37417.47766 } } dps_results: { key: "TestRetribution-AllItems-AustereShadowspiritDiamond" value: { - dps: 38624.46438 - tps: 38494.45495 + dps: 38265.03761 + tps: 38257.46575 } } dps_results: { key: "TestRetribution-AllItems-BattlearmorofImmolation" value: { - dps: 31157.23155 - tps: 31067.82067 + dps: 30422.17468 + tps: 30445.97393 } } dps_results: { key: "TestRetribution-AllItems-BattleplateofImmolation" value: { - dps: 35181.835 - tps: 35053.163 + dps: 34902.12327 + tps: 34894.01244 } } dps_results: { key: "TestRetribution-AllItems-BattleplateofRadiantGlory" value: { - dps: 35326.7369 - tps: 35247.65356 + dps: 34952.36837 + tps: 34990.15012 } } dps_results: { key: "TestRetribution-AllItems-BaubleofTrueBlood-50726" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 hps: 127.67148 } } dps_results: { key: "TestRetribution-AllItems-BedrockTalisman-58182" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-BellofEnragingResonance-59326" value: { - dps: 37050.6719 - tps: 36921.19662 + dps: 36771.26742 + tps: 36756.25416 } } dps_results: { key: "TestRetribution-AllItems-BellofEnragingResonance-65053" value: { - dps: 37108.8093 - tps: 36979.33402 + dps: 36838.48424 + tps: 36823.47098 } } dps_results: { key: "TestRetribution-AllItems-BindingPromise-67037" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 37161.77664 - tps: 37028.37102 + dps: 36551.17172 + tps: 36541.94785 } } dps_results: { key: "TestRetribution-AllItems-BloodofIsiset-55995" value: { - dps: 37090.24424 - tps: 36956.02713 + dps: 36584.97878 + tps: 36576.7045 } } dps_results: { key: "TestRetribution-AllItems-BloodofIsiset-56414" value: { - dps: 37150.64393 - tps: 37016.42682 + dps: 36644.66903 + tps: 36636.39476 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36895.17769 - tps: 36761.81014 + dps: 36262.28817 + tps: 36255.63424 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 36706.0974 - tps: 36570.05289 + dps: 36121.67103 + tps: 36113.39675 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 37389.49683 - tps: 37253.45232 + dps: 36778.48885 + tps: 36770.21457 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 36928.7631 - tps: 36799.28782 + dps: 36644.08776 + tps: 36629.07451 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 37187.56407 - tps: 37053.62236 + dps: 36658.86006 + tps: 36650.19254 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 36691.02207 - tps: 36556.80496 + dps: 36192.22756 + tps: 36183.95328 } } dps_results: { key: "TestRetribution-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 37666.48151 - tps: 37532.2644 + dps: 37178.46149 + tps: 37170.18721 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-77210" value: { - dps: 39252.9959 - tps: 39119.51694 + dps: 38701.21159 + tps: 38689.69025 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-77982" value: { - dps: 39259.99394 - tps: 39129.29891 + dps: 38391.04376 + tps: 38383.48724 } } dps_results: { key: "TestRetribution-AllItems-Bone-LinkFetish-78002" value: { - dps: 39561.10209 - tps: 39431.53886 + dps: 39095.06523 + tps: 39086.61544 } } dps_results: { key: "TestRetribution-AllItems-BottledLightning-66879" value: { - dps: 36879.30404 - tps: 36749.68455 + dps: 36372.68603 + tps: 36366.7871 } } dps_results: { key: "TestRetribution-AllItems-BottledWishes-77114" value: { - dps: 36870.99165 - tps: 36738.2048 + dps: 36905.18887 + tps: 36890.3115 } } dps_results: { key: "TestRetribution-AllItems-BracingShadowspiritDiamond" value: { - dps: 38756.04108 - tps: 37855.60729 + dps: 38340.96726 + tps: 37568.23539 } } dps_results: { key: "TestRetribution-AllItems-Brawler'sTrophy-232015" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 39852.06623 - tps: 39722.05681 + dps: 39483.02698 + tps: 39475.45512 } } dps_results: { key: "TestRetribution-AllItems-BurningShadowspiritDiamond" value: { - dps: 39196.92533 - tps: 39064.44406 + dps: 38777.94547 + tps: 38767.29953 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37128.25335 - tps: 36992.20885 + dps: 36566.23032 + tps: 36557.95604 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 36744.67971 - tps: 36608.63521 + dps: 36157.11553 + tps: 36148.84125 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 37830.44102 - tps: 37694.39651 + dps: 37200.83941 + tps: 37192.56513 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 37402.58232 - tps: 37267.89074 + dps: 37032.8863 + tps: 37024.19265 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 36752.26906 - tps: 36618.05195 + dps: 36249.46627 + tps: 36241.19199 } } dps_results: { key: "TestRetribution-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 38189.09586 - tps: 38054.87876 + dps: 37687.43822 + tps: 37679.16395 } } dps_results: { key: "TestRetribution-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 39241.2721 - tps: 39111.65467 + dps: 38892.6999 + tps: 38885.12803 } } dps_results: { key: "TestRetribution-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 37455.90038 - tps: 37326.4251 + dps: 37202.2394 + tps: 37187.22614 } } dps_results: { key: "TestRetribution-AllItems-CoreofRipeness-58184" value: { - dps: 36868.06526 - tps: 36737.81121 + dps: 36226.68008 + tps: 36219.21367 } } dps_results: { key: "TestRetribution-AllItems-CorpseTongueCoin-50349" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 39303.15819 - tps: 39172.49073 + dps: 38779.2126 + tps: 38766.48712 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 39022.44249 - tps: 38891.1792 + dps: 38507.22819 + tps: 38494.26482 } } dps_results: { key: "TestRetribution-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 39796.34989 - tps: 39664.17971 + dps: 39126.0242 + tps: 39112.9998 } } dps_results: { key: "TestRetribution-AllItems-CrushingWeight-59506" value: { - dps: 37964.58897 - tps: 37825.84755 + dps: 37944.13293 + tps: 37928.61015 } } dps_results: { key: "TestRetribution-AllItems-CrushingWeight-65118" value: { - dps: 38355.22916 - tps: 38220.92943 + dps: 38388.74138 + tps: 38371.83659 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-77208" value: { - dps: 37794.9907 - tps: 37665.04385 + dps: 37202.4051 + tps: 37193.4524 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-77980" value: { - dps: 37552.22852 - tps: 37422.5227 + dps: 36940.04135 + tps: 36932.29338 } } dps_results: { key: "TestRetribution-AllItems-CunningoftheCruel-78000" value: { - dps: 37798.62552 - tps: 37664.87445 + dps: 37338.13341 + tps: 37329.90431 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 38299.52686 - tps: 38163.92669 + dps: 37609.48597 + tps: 37598.88648 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 37787.65848 - tps: 37650.66457 + dps: 36960.74043 + tps: 36949.20174 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 36715.5807 - tps: 36582.47564 + dps: 36357.96729 + tps: 36350.89919 } } dps_results: { key: "TestRetribution-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 37513.70062 - tps: 37381.08327 + dps: 36948.24672 + tps: 36941.66237 } } dps_results: { key: "TestRetribution-AllItems-Deathbringer'sWill-50363" value: { - dps: 37090.02363 - tps: 36967.12892 + dps: 36955.92302 + tps: 36946.66669 } } dps_results: { key: "TestRetribution-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 38796.35448 - tps: 38666.73704 + dps: 38447.80137 + tps: 38440.22951 } } dps_results: { key: "TestRetribution-AllItems-DislodgedForeignObject-50348" value: { - dps: 37168.48555 - tps: 37036.632 + dps: 36628.83792 + tps: 36621.81036 } } dps_results: { key: "TestRetribution-AllItems-Dwyer'sCaber-70141" value: { - dps: 38597.75943 - tps: 38464.38493 + dps: 37985.0983 + tps: 37970.61532 } } dps_results: { key: "TestRetribution-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 38624.46438 - tps: 38494.45495 + dps: 38265.03761 + tps: 38257.46575 } } dps_results: { key: "TestRetribution-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 36697.92044 - tps: 36564.96222 + dps: 36243.79618 + tps: 36234.37427 } } dps_results: { key: "TestRetribution-AllItems-EmberShadowspiritDiamond" value: { - dps: 38687.37496 - tps: 38555.59712 + dps: 38262.01793 + tps: 38252.80376 } } dps_results: { key: "TestRetribution-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 38796.35448 - tps: 38666.73704 + dps: 38447.80137 + tps: 38440.22951 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheCyclone-59473" value: { - dps: 37545.03319 - tps: 37412.2011 + dps: 36895.2401 + tps: 36887.51918 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheCyclone-65140" value: { - dps: 37800.76636 - tps: 37667.40653 + dps: 37234.68912 + tps: 37223.3483 } } dps_results: { key: "TestRetribution-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 38087.9131 - tps: 37960.90128 + dps: 37877.43764 + tps: 37867.36833 } } dps_results: { key: "TestRetribution-AllItems-EternalShadowspiritDiamond" value: { - dps: 38624.46438 - tps: 38494.45495 + dps: 38265.03761 + tps: 38257.46575 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77200" value: { - dps: 39439.91204 - tps: 39305.69493 + dps: 38898.46099 + tps: 38890.18671 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77977" value: { - dps: 39120.49138 - tps: 38986.27427 + dps: 38583.76795 + tps: 38575.49367 } } dps_results: { key: "TestRetribution-AllItems-EyeofUnmaking-77997" value: { - dps: 39791.27477 - tps: 39657.05766 + dps: 39244.62333 + tps: 39236.34905 } } dps_results: { key: "TestRetribution-AllItems-FallofMortality-59500" value: { - dps: 36715.5807 - tps: 36582.47564 + dps: 36357.96729 + tps: 36350.89919 } } dps_results: { key: "TestRetribution-AllItems-FallofMortality-65124" value: { - dps: 36804.35427 - tps: 36674.77359 + dps: 36373.71479 + tps: 36362.8014 } } dps_results: { key: "TestRetribution-AllItems-FieryQuintessence-69000" value: { - dps: 36410.68962 - tps: 36277.20158 + dps: 35806.84974 + tps: 35799.84694 } } dps_results: { key: "TestRetribution-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36910.6322 - tps: 36774.58769 + dps: 36345.55191 + tps: 36337.27763 } } dps_results: { key: "TestRetribution-AllItems-Figurine-DreamOwl-52354" value: { - dps: 36832.87101 - tps: 36700.10846 + dps: 36385.84562 + tps: 36376.99483 } } dps_results: { key: "TestRetribution-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 36879.11236 - tps: 36746.56498 + dps: 36380.2056 + tps: 36373.75571 } } dps_results: { key: "TestRetribution-AllItems-Figurine-KingofBoars-52351" value: { - dps: 37872.70375 - tps: 37736.65924 + dps: 37256.20724 + tps: 37247.93296 } } dps_results: { key: "TestRetribution-AllItems-FireoftheDeep-77117" value: { - dps: 37467.28472 - tps: 37333.06762 + dps: 36957.59069 + tps: 36949.31641 } } dps_results: { key: "TestRetribution-AllItems-FleetShadowspiritDiamond" value: { - dps: 38728.63682 - tps: 38598.6274 + dps: 38368.70368 + tps: 38361.13181 } } dps_results: { key: "TestRetribution-AllItems-FluidDeath-58181" value: { - dps: 37159.11555 - tps: 37025.28018 + dps: 36562.31402 + tps: 36553.8279 } } dps_results: { key: "TestRetribution-AllItems-ForlornShadowspiritDiamond" value: { - dps: 38756.04108 - tps: 38623.55981 + dps: 38340.96726 + tps: 38330.32131 } } dps_results: { key: "TestRetribution-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 37709.83899 - tps: 37580.29172 + dps: 37175.70674 + tps: 37169.00973 } } dps_results: { key: "TestRetribution-AllItems-FuryofAngerforge-59461" value: { - dps: 37922.21112 - tps: 37793.10835 + dps: 37576.54986 + tps: 37560.16447 } } dps_results: { key: "TestRetribution-AllItems-GaleofShadows-56138" value: { - dps: 37148.4297 - tps: 37017.64591 + dps: 37021.53048 + tps: 37008.54244 } } dps_results: { key: "TestRetribution-AllItems-GaleofShadows-56462" value: { - dps: 37129.99926 - tps: 36995.94885 + dps: 36995.76471 + tps: 36988.08314 } } dps_results: { key: "TestRetribution-AllItems-GearDetector-61462" value: { - dps: 37249.9887 - tps: 37121.06487 + dps: 36678.47977 + tps: 36673.57578 } } dps_results: { key: "TestRetribution-AllItems-Gladiator'sVindication" value: { - dps: 29458.10109 - tps: 29369.92405 + dps: 29197.42151 + tps: 29219.06169 } } dps_results: { key: "TestRetribution-AllItems-GlowingTwilightScale-54589" value: { - dps: 36829.27308 - tps: 36699.78816 + dps: 36223.70866 + tps: 36214.6816 } } dps_results: { key: "TestRetribution-AllItems-GraceoftheHerald-55266" value: { - dps: 37003.92596 - tps: 36870.72475 + dps: 36446.95143 + tps: 36438.57604 } } dps_results: { key: "TestRetribution-AllItems-GraceoftheHerald-56295" value: { - dps: 37290.39411 - tps: 37156.87764 + dps: 36642.88255 + tps: 36633.02378 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-77191" value: { - dps: 40943.55192 - tps: 40813.5425 + dps: 40562.74387 + tps: 40555.172 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-78478" value: { - dps: 41165.83017 - tps: 41035.82074 + dps: 40782.62542 + tps: 40775.05355 } } dps_results: { key: "TestRetribution-AllItems-Gurthalak,VoiceoftheDeeps-78487" value: { - dps: 40747.81437 - tps: 40617.80495 + dps: 40369.11683 + tps: 40361.54496 } } dps_results: { key: "TestRetribution-AllItems-HarmlightToken-63839" value: { - dps: 36765.34544 - tps: 36632.6422 + dps: 36341.64532 + tps: 36334.43258 } } dps_results: { key: "TestRetribution-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 37805.53712 - tps: 37671.32002 + dps: 37297.92568 + tps: 37289.6514 } } dps_results: { key: "TestRetribution-AllItems-HeartofIgnacious-59514" value: { - dps: 37106.19921 - tps: 36973.77586 + dps: 36840.57735 + tps: 36835.34814 } } dps_results: { key: "TestRetribution-AllItems-HeartofIgnacious-65110" value: { - dps: 37270.70262 - tps: 37139.21976 + dps: 36887.79756 + tps: 36881.85943 } } dps_results: { key: "TestRetribution-AllItems-HeartofRage-59224" value: { - dps: 38751.66799 - tps: 38621.65857 + dps: 38390.20478 + tps: 38382.63291 } } dps_results: { key: "TestRetribution-AllItems-HeartofSolace-55868" value: { - dps: 38068.03934 - tps: 37937.25555 + dps: 37943.02522 + tps: 37930.03718 } } dps_results: { key: "TestRetribution-AllItems-HeartofSolace-56393" value: { - dps: 38187.36835 - tps: 38053.31795 + dps: 38065.94989 + tps: 38058.26832 } } dps_results: { key: "TestRetribution-AllItems-HeartofThunder-55845" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-HeartofThunder-56370" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-HeartoftheVile-66969" value: { - dps: 37045.24064 - tps: 36912.41449 + dps: 36522.07503 + tps: 36513.69964 } } dps_results: { key: "TestRetribution-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 38796.35448 - tps: 38666.73704 + dps: 38447.80137 + tps: 38440.22951 } } dps_results: { key: "TestRetribution-AllItems-ImpatienceofYouth-62464" value: { - dps: 38029.13578 - tps: 37893.09127 + dps: 37407.92693 + tps: 37399.65266 } } dps_results: { key: "TestRetribution-AllItems-ImpatienceofYouth-62469" value: { - dps: 38029.13578 - tps: 37893.09127 + dps: 37407.92693 + tps: 37399.65266 } } dps_results: { key: "TestRetribution-AllItems-ImpetuousQuery-55881" value: { - dps: 37090.24424 - tps: 36956.02713 + dps: 36584.97878 + tps: 36576.7045 } } dps_results: { key: "TestRetribution-AllItems-ImpetuousQuery-56406" value: { - dps: 37150.64393 - tps: 37016.42682 + dps: 36644.66903 + tps: 36636.39476 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-77211" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-77983" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-IndomitablePride-78003" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 37143.54288 - tps: 37004.38264 + dps: 36780.40343 + tps: 36756.34627 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 37282.44494 - tps: 37141.80341 + dps: 37015.70649 + tps: 36999.39537 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 37586.93665 - tps: 37451.70479 + dps: 37126.81751 + tps: 37105.13683 } } dps_results: { key: "TestRetribution-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 36870.91422 - tps: 36737.5086 + dps: 36248.50107 + tps: 36239.2772 } } dps_results: { key: "TestRetribution-AllItems-JarofAncientRemedies-59354" value: { - dps: 36789.75075 - tps: 36678.3648 + dps: 36254.29313 + tps: 36268.76189 } } dps_results: { key: "TestRetribution-AllItems-JarofAncientRemedies-65029" value: { - dps: 36809.30825 - tps: 36701.09852 + dps: 36306.58807 + tps: 36325.55267 } } dps_results: { key: "TestRetribution-AllItems-JawsofDefeat-68926" value: { - dps: 36912.38591 - tps: 36779.95527 + dps: 36446.83047 + tps: 36437.26593 } } dps_results: { key: "TestRetribution-AllItems-JawsofDefeat-69111" value: { - dps: 36843.0737 - tps: 36714.76499 + dps: 36451.20423 + tps: 36442.33841 } } dps_results: { key: "TestRetribution-AllItems-JujuofNimbleness-63840" value: { - dps: 37161.77664 - tps: 37028.37102 + dps: 36551.17172 + tps: 36541.94785 } } dps_results: { key: "TestRetribution-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 36948.76133 - tps: 36815.64574 + dps: 36516.77649 + tps: 36509.79587 } } dps_results: { key: "TestRetribution-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 37146.83282 - tps: 37011.56865 + dps: 36530.90062 + tps: 36522.1712 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-77194" value: { - dps: 40442.82626 - tps: 40312.66621 + dps: 40139.1895 + tps: 40129.99046 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-78473" value: { - dps: 40637.16118 - tps: 40507.06826 + dps: 40239.51817 + tps: 40230.75863 } } dps_results: { key: "TestRetribution-AllItems-Kiril,FuryofBeasts-78482" value: { - dps: 40416.96468 - tps: 40287.77817 + dps: 40061.83288 + tps: 40053.1583 } } dps_results: { key: "TestRetribution-AllItems-KiroptyricSigil-77113" value: { - dps: 37353.96176 - tps: 37221.17491 + dps: 37355.67067 + tps: 37340.79331 } } dps_results: { key: "TestRetribution-AllItems-KvaldirBattleStandard-59685" value: { - dps: 37503.95461 - tps: 37372.36106 + dps: 36858.48727 + tps: 36851.76804 } } dps_results: { key: "TestRetribution-AllItems-KvaldirBattleStandard-59689" value: { - dps: 37503.95461 - tps: 37372.36106 + dps: 36858.48727 + tps: 36851.76804 } } dps_results: { key: "TestRetribution-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 36891.5273 - tps: 36758.15122 + dps: 36147.03277 + tps: 36133.63078 } } dps_results: { key: "TestRetribution-AllItems-LeadenDespair-55816" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-LeadenDespair-56347" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-LeftEyeofRajh-56102" value: { - dps: 37887.01056 - tps: 37757.63396 + dps: 37507.42086 + tps: 37498.74628 } } dps_results: { key: "TestRetribution-AllItems-LeftEyeofRajh-56427" value: { - dps: 37895.38271 - tps: 37766.00611 + dps: 37578.0396 + tps: 37569.36502 } } dps_results: { key: "TestRetribution-AllItems-LicensetoSlay-58180" value: { - dps: 37851.64351 - tps: 37717.4264 + dps: 37333.83056 + tps: 37325.55628 } } dps_results: { key: "TestRetribution-AllItems-MagnetiteMirror-55814" value: { - dps: 37746.02683 - tps: 37618.243 + dps: 37308.7639 + tps: 37302.19808 } } dps_results: { key: "TestRetribution-AllItems-MagnetiteMirror-56345" value: { - dps: 37968.68396 - tps: 37839.33883 + dps: 37576.17386 + tps: 37569.60804 } } dps_results: { key: "TestRetribution-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-MarkofKhardros-56132" value: { - dps: 37696.83133 - tps: 37563.42571 + dps: 37050.56016 + tps: 37041.33629 } } dps_results: { key: "TestRetribution-AllItems-MarkofKhardros-56458" value: { - dps: 37857.48643 - tps: 37724.08082 + dps: 37206.70048 + tps: 37197.47661 } } dps_results: { key: "TestRetribution-AllItems-MatrixRestabilizer-68994" value: { - dps: 38251.96684 - tps: 38118.13147 + dps: 37680.80425 + tps: 37672.31813 } } dps_results: { key: "TestRetribution-AllItems-MatrixRestabilizer-69150" value: { - dps: 38615.54565 - tps: 38481.55915 + dps: 37924.51214 + tps: 37916.26105 } } dps_results: { key: "TestRetribution-AllItems-MightoftheOcean-55251" value: { - dps: 36868.72538 - tps: 36735.31976 + dps: 36240.64831 + tps: 36231.42444 } } dps_results: { key: "TestRetribution-AllItems-MightoftheOcean-56285" value: { - dps: 37205.02132 - tps: 37071.61571 + dps: 36563.28333 + tps: 36554.05946 } } dps_results: { key: "TestRetribution-AllItems-MirrorofBrokenImages-62466" value: { - dps: 37216.5345 - tps: 37082.31739 + dps: 36709.78568 + tps: 36701.5114 } } dps_results: { key: "TestRetribution-AllItems-MirrorofBrokenImages-62471" value: { - dps: 37216.5345 - tps: 37082.31739 + dps: 36709.78568 + tps: 36701.5114 } } dps_results: { key: "TestRetribution-AllItems-MithrilStopwatch-232013" value: { - dps: 37001.43432 - tps: 36871.95904 + dps: 36729.55379 + tps: 36714.54054 } } dps_results: { key: "TestRetribution-AllItems-MoonwellChalice-70142" value: { - dps: 37189.07335 - tps: 37056.46093 + dps: 36833.17837 + tps: 36826.1405 } } dps_results: { key: "TestRetribution-AllItems-MoonwellPhial-70143" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-NecromanticFocus-68982" value: { - dps: 37576.13366 - tps: 37446.58638 + dps: 37027.46643 + tps: 37020.76943 } } dps_results: { key: "TestRetribution-AllItems-NecromanticFocus-69139" value: { - dps: 37697.50224 - tps: 37568.139 + dps: 37189.38111 + tps: 37181.46315 } } dps_results: { key: "TestRetribution-AllItems-Oremantle'sFavor-61448" value: { - dps: 37480.84212 - tps: 37344.79761 + dps: 36910.9757 + tps: 36902.70142 } } dps_results: { key: "TestRetribution-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 36757.58599 - tps: 36624.17894 + dps: 36354.1798 + tps: 36347.06339 } } dps_results: { key: "TestRetribution-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 36809.1769 - tps: 36679.70162 + dps: 36472.78428 + tps: 36457.77103 } } dps_results: { key: "TestRetribution-AllItems-PorcelainCrab-55237" value: { - dps: 37043.28148 - tps: 36909.06437 + dps: 36552.05612 + tps: 36543.78184 } } dps_results: { key: "TestRetribution-AllItems-PorcelainCrab-56280" value: { - dps: 37413.01792 - tps: 37278.80081 + dps: 36865.30884 + tps: 36857.03456 } } dps_results: { key: "TestRetribution-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 38624.46438 - tps: 38494.45495 + dps: 38265.03761 + tps: 38257.46575 } } dps_results: { key: "TestRetribution-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 37285.55784 - tps: 37153.48812 + dps: 37188.70781 + tps: 37181.14586 } } dps_results: { key: "TestRetribution-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 37672.71132 - tps: 37538.22374 + dps: 37614.9129 + tps: 37597.28782 } } dps_results: { key: "TestRetribution-AllItems-Rainsong-55854" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Rainsong-56377" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ReflectionoftheLight-77115" value: { - dps: 36562.40484 - tps: 36428.99923 + dps: 35939.49806 + tps: 35930.27419 } } dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattlearmor" value: { - dps: 30783.49855 - tps: 30684.8149 + dps: 30558.76595 + tps: 30581.30202 } } dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattleplate" value: { - dps: 33311.34306 - tps: 33228.38722 + dps: 33098.10813 + tps: 33134.4054 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77201" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77978" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ResolveofUndying-77998" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 39238.31288 - tps: 39108.30346 + dps: 38875.89135 + tps: 38868.31948 } } dps_results: { key: "TestRetribution-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 39059.16325 - tps: 38929.15383 + dps: 38698.67338 + tps: 38691.10152 } } dps_results: { key: "TestRetribution-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37511.50283 - tps: 37375.93388 + dps: 36821.3467 + tps: 36812.86058 } } dps_results: { key: "TestRetribution-AllItems-RightEyeofRajh-56100" value: { - dps: 37429.01353 - tps: 37294.79642 + dps: 36940.56176 + tps: 36932.28748 } } dps_results: { key: "TestRetribution-AllItems-RightEyeofRajh-56431" value: { - dps: 37519.19256 - tps: 37384.97545 + dps: 37022.5114 + tps: 37014.23713 } } dps_results: { key: "TestRetribution-AllItems-RosaryofLight-72901" value: { - dps: 38711.97748 - tps: 38580.39692 + dps: 38206.88987 + tps: 38194.1723 } } dps_results: { key: "TestRetribution-AllItems-RottingSkull-77116" value: { - dps: 38227.38323 - tps: 38097.34819 + dps: 37797.5696 + tps: 37783.86965 } } dps_results: { key: "TestRetribution-AllItems-RuneofZeth-68998" value: { - dps: 37069.08644 - tps: 36943.05907 + dps: 36659.2662 + tps: 36647.70522 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 37054.32126 - tps: 36918.27676 + dps: 36489.13683 + tps: 36480.86256 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 37077.10881 - tps: 36941.0643 + dps: 36516.51413 + tps: 36508.23986 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 36727.94211 - tps: 36591.8976 + dps: 36141.73916 + tps: 36133.46488 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 36732.87756 - tps: 36596.83305 + dps: 36146.27322 + tps: 36137.99894 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 37639.15266 - tps: 37503.10816 + dps: 37017.61725 + tps: 37009.34297 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 37695.55821 - tps: 37559.5137 + dps: 37071.6443 + tps: 37063.37002 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 37216.50234 - tps: 37083.50811 + dps: 36860.34579 + tps: 36852.64677 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 37296.96306 - tps: 37162.21314 + dps: 36893.55051 + tps: 36886.60491 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 36729.99423 - tps: 36595.77712 + dps: 36229.05173 + tps: 36220.77746 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 36732.87431 - tps: 36598.6572 + dps: 36230.38464 + tps: 36222.11037 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 37946.99093 - tps: 37812.77382 + dps: 37448.34796 + tps: 37440.07369 } } dps_results: { key: "TestRetribution-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 38035.44771 - tps: 37901.2306 + dps: 37543.60085 + tps: 37535.32658 } } dps_results: { key: "TestRetribution-AllItems-ScalesofLife-68915" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 hps: 414.80163 } } dps_results: { key: "TestRetribution-AllItems-ScalesofLife-69109" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 hps: 467.89235 } } dps_results: { key: "TestRetribution-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 37358.81855 - tps: 37225.07699 + dps: 36778.3438 + tps: 36769.85768 } } dps_results: { key: "TestRetribution-AllItems-SeaStar-55256" value: { - dps: 36673.69512 - tps: 36537.65061 + dps: 36091.90396 + tps: 36083.62968 } } dps_results: { key: "TestRetribution-AllItems-SeaStar-56290" value: { - dps: 36702.02029 - tps: 36565.97578 + dps: 36117.9255 + tps: 36109.65123 } } dps_results: { key: "TestRetribution-AllItems-Shadowmourne-49623" value: { - dps: 41097.54016 - tps: 40966.17319 + dps: 40746.9799 + tps: 40739.23149 } } dps_results: { key: "TestRetribution-AllItems-ShardofWoe-60233" value: { - dps: 37419.55118 - tps: 37276.22333 + dps: 36762.72265 + tps: 36746.78498 } } dps_results: { key: "TestRetribution-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 37908.35324 - tps: 37780.98031 + dps: 37175.38113 + tps: 37168.21552 } } dps_results: { key: "TestRetribution-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Skardyn'sGrace-56115" value: { - dps: 37294.75945 - tps: 37159.19049 + dps: 36606.72738 + tps: 36598.24126 } } dps_results: { key: "TestRetribution-AllItems-Skardyn'sGrace-56440" value: { - dps: 37365.7263 - tps: 37230.15735 + dps: 36704.52159 + tps: 36696.03546 } } dps_results: { key: "TestRetribution-AllItems-Sorrowsong-55879" value: { - dps: 37143.65079 - tps: 37009.43368 + dps: 36637.39267 + tps: 36629.11839 } } dps_results: { key: "TestRetribution-AllItems-Sorrowsong-56400" value: { - dps: 37211.0442 - tps: 37076.82709 + dps: 36703.94665 + tps: 36695.67237 } } dps_results: { key: "TestRetribution-AllItems-Soul'sAnguish-66994" value: { - dps: 36868.72538 - tps: 36735.31976 + dps: 36240.64831 + tps: 36231.42444 } } dps_results: { key: "TestRetribution-AllItems-SoulCasket-58183" value: { - dps: 37310.50331 - tps: 37174.4588 + dps: 36716.64144 + tps: 36708.36716 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77206" value: { - dps: 37801.93538 - tps: 37667.71827 + dps: 37316.80628 + tps: 37308.53201 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77970" value: { - dps: 37685.07815 - tps: 37550.86104 + dps: 37171.81987 + tps: 37163.54559 } } dps_results: { key: "TestRetribution-AllItems-SoulshifterVortex-77990" value: { - dps: 38025.77716 - tps: 37891.56005 + dps: 37475.41683 + tps: 37467.14255 } } dps_results: { key: "TestRetribution-AllItems-SpidersilkSpindle-68981" value: { - dps: 37330.0127 - tps: 37195.79559 + dps: 36821.93101 + tps: 36813.65673 } } dps_results: { key: "TestRetribution-AllItems-SpidersilkSpindle-69138" value: { - dps: 37421.52738 - tps: 37287.31027 + dps: 36912.37079 + tps: 36904.09652 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77202" value: { - dps: 37995.29544 - tps: 37859.19295 + dps: 37541.24561 + tps: 37527.38467 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77973" value: { - dps: 37412.42299 - tps: 37268.0795 + dps: 37027.81579 + tps: 37002.75915 } } dps_results: { key: "TestRetribution-AllItems-StarcatcherCompass-77993" value: { - dps: 38157.94703 - tps: 38020.69408 + dps: 37801.25427 + tps: 37794.57856 } } dps_results: { key: "TestRetribution-AllItems-StayofExecution-68996" value: { - dps: 36640.63004 - tps: 36504.58553 + dps: 36059.92371 + tps: 36051.64943 } } dps_results: { key: "TestRetribution-AllItems-Stonemother'sKiss-61411" value: { - dps: 36870.33905 - tps: 36736.66483 + dps: 36392.70204 + tps: 36383.46338 } } dps_results: { key: "TestRetribution-AllItems-StumpofTime-62465" value: { - dps: 36694.29039 - tps: 36560.07328 + dps: 36204.19102 + tps: 36195.91675 } } dps_results: { key: "TestRetribution-AllItems-StumpofTime-62470" value: { - dps: 36697.80162 - tps: 36563.58451 + dps: 36207.41669 + tps: 36199.14241 } } dps_results: { key: "TestRetribution-AllItems-SymbioticWorm-59332" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-SymbioticWorm-65048" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 37160.7918 - tps: 37028.65779 + dps: 36648.66242 + tps: 36641.65649 } } dps_results: { key: "TestRetribution-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 37853.2513 - tps: 37723.86554 + dps: 37254.45891 + tps: 37247.88349 } } dps_results: { key: "TestRetribution-AllItems-TearofBlood-55819" value: { - dps: 36780.48484 - tps: 36646.21168 + dps: 36235.42043 + tps: 36228.19286 } } dps_results: { key: "TestRetribution-AllItems-TearofBlood-56351" value: { - dps: 36789.26846 - tps: 36657.92206 + dps: 36316.47757 + tps: 36308.3841 } } dps_results: { key: "TestRetribution-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 37044.80932 - tps: 36910.59221 + dps: 36541.01738 + tps: 36532.74311 } } dps_results: { key: "TestRetribution-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 37183.33424 - tps: 37049.11713 + dps: 36675.30281 + tps: 36667.02853 } } dps_results: { key: "TestRetribution-AllItems-TheHungerer-68927" value: { - dps: 37686.39255 - tps: 37545.22173 + dps: 37284.21562 + tps: 37266.04885 } } dps_results: { key: "TestRetribution-AllItems-TheHungerer-69112" value: { - dps: 37882.15141 - tps: 37737.81728 + dps: 37570.34321 + tps: 37553.76792 } } dps_results: { key: "TestRetribution-AllItems-Theralion'sMirror-59519" value: { - dps: 37014.55113 - tps: 36881.44607 + dps: 36682.67491 + tps: 36675.60681 } } dps_results: { key: "TestRetribution-AllItems-Theralion'sMirror-65105" value: { - dps: 37168.38192 - tps: 37038.80124 + dps: 36720.17799 + tps: 36709.2646 } } dps_results: { key: "TestRetribution-AllItems-Throngus'sFinger-56121" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Throngus'sFinger-56449" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-Tia'sGrace-55874" value: { - dps: 37458.35371 - tps: 37324.61216 + dps: 36897.00659 + tps: 36888.52046 } } dps_results: { key: "TestRetribution-AllItems-Tia'sGrace-56394" value: { - dps: 37589.30384 - tps: 37455.56228 + dps: 37016.46937 + tps: 37007.98325 } } dps_results: { key: "TestRetribution-AllItems-TinyAbominationinaJar-50706" value: { - dps: 37941.80539 - tps: 37819.36575 + dps: 37341.78472 + tps: 37336.60696 } } dps_results: { key: "TestRetribution-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 35869.19488 - tps: 35764.16995 + dps: 35358.2876 + tps: 35377.94035 } } dps_results: { key: "TestRetribution-AllItems-UnheededWarning-59520" value: { - dps: 37489.18747 - tps: 37355.44591 + dps: 36935.39825 + tps: 36926.91213 } } dps_results: { key: "TestRetribution-AllItems-UnquenchableFlame-67101" value: { - dps: 36571.58538 - tps: 36435.67762 + dps: 36097.51547 + tps: 36088.8385 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-62463" value: { - dps: 37548.5651 - tps: 37412.5206 + dps: 36959.14273 + tps: 36950.86845 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-62468" value: { - dps: 37548.5651 - tps: 37412.5206 + dps: 36959.14273 + tps: 36950.86845 } } dps_results: { key: "TestRetribution-AllItems-UnsolvableRiddle-68709" value: { - dps: 37548.5651 - tps: 37412.5206 + dps: 36959.14273 + tps: 36950.86845 } } dps_results: { key: "TestRetribution-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 37293.87763 - tps: 37164.17182 + dps: 36680.24882 + tps: 36672.50084 } } dps_results: { key: "TestRetribution-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 37434.25959 - tps: 37304.31275 + dps: 36863.95187 + tps: 36854.99916 } } dps_results: { key: "TestRetribution-AllItems-Varo'then'sBrooch-72899" value: { - dps: 38762.68699 - tps: 38628.46988 + dps: 38240.33714 + tps: 38232.06286 } } dps_results: { key: "TestRetribution-AllItems-VeilofLies-72900" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-VesselofAcceleration-68995" value: { - dps: 38449.6924 - tps: 38321.12844 + dps: 38111.30684 + tps: 38097.43096 } } dps_results: { key: "TestRetribution-AllItems-VesselofAcceleration-69167" value: { - dps: 38678.97447 - tps: 38550.41051 + dps: 38347.36201 + tps: 38333.48614 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77207" value: { - dps: 38275.49138 - tps: 38140.99668 + dps: 38095.64236 + tps: 38084.2322 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77979" value: { - dps: 38044.2505 - tps: 37909.61286 + dps: 37697.08923 + tps: 37685.22972 } } dps_results: { key: "TestRetribution-AllItems-VialofShadows-77999" value: { - dps: 38409.04741 - tps: 38274.22847 + dps: 37872.25832 + tps: 37860.21668 } } dps_results: { key: "TestRetribution-AllItems-VialofStolenMemories-59515" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-VialofStolenMemories-65109" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36956.55872 - tps: 36820.51422 + dps: 36375.11334 + tps: 36366.83906 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 37016.76948 - tps: 36880.72497 + dps: 36437.68617 + tps: 36429.41189 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 36709.74534 - tps: 36573.70083 + dps: 36125.02229 + tps: 36116.74801 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 36717.85663 - tps: 36581.81213 + dps: 36132.47392 + tps: 36124.19964 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 37431.18788 - tps: 37295.14338 + dps: 36818.42188 + tps: 36810.1476 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 37523.88917 - tps: 37387.84466 + dps: 36907.21416 + tps: 36898.93988 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37017.03499 - tps: 36885.78641 + dps: 36785.39676 + tps: 36772.92922 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 36981.396 - tps: 36851.92072 + dps: 36699.64234 + tps: 36684.62908 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 37459.78647 - tps: 37329.77705 + dps: 37096.01039 + tps: 37088.43852 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 37251.31008 - tps: 37117.09297 + dps: 36744.1528 + tps: 36735.87852 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 36629.01025 - tps: 36494.79314 + dps: 36129.16226 + tps: 36120.88799 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 37109.49795 - tps: 36976.42209 + dps: 36728.58752 + tps: 36720.88851 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 37303.85329 - tps: 37169.32431 + dps: 36944.36253 + tps: 36936.18519 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 36707.8913 - tps: 36573.67419 + dps: 36208.40258 + tps: 36200.12831 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 36717.76695 - tps: 36583.54984 + dps: 36216.65432 + tps: 36208.38004 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 37659.67855 - tps: 37525.46144 + dps: 37158.93352 + tps: 37150.65924 } } dps_results: { key: "TestRetribution-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 37784.47129 - tps: 37650.25418 + dps: 37303.06387 + tps: 37294.7896 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77198" value: { - dps: 36732.85076 - tps: 36598.73901 + dps: 36237.80007 + tps: 36228.61293 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77975" value: { - dps: 36763.77028 - tps: 36629.56232 + dps: 36227.92868 + tps: 36219.41277 } } dps_results: { key: "TestRetribution-AllItems-WillofUnbinding-77995" value: { - dps: 36777.43628 - tps: 36643.05202 + dps: 36251.90871 + tps: 36241.78716 } } dps_results: { key: "TestRetribution-AllItems-WitchingHourglass-55787" value: { - dps: 36999.30258 - tps: 36868.4748 + dps: 36406.8162 + tps: 36400.63831 } } dps_results: { key: "TestRetribution-AllItems-WitchingHourglass-56320" value: { - dps: 37076.52209 - tps: 36943.45985 + dps: 36675.31014 + tps: 36667.084 } } dps_results: { key: "TestRetribution-AllItems-World-QuellerFocus-63842" value: { - dps: 37041.32778 - tps: 36905.28327 + dps: 36456.73622 + tps: 36448.46194 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77197" value: { - dps: 37836.83977 - tps: 37703.75172 + dps: 37443.68967 + tps: 37435.99066 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77974" value: { - dps: 37708.50434 - tps: 37575.41629 + dps: 37315.62286 + tps: 37307.92385 } } dps_results: { key: "TestRetribution-AllItems-WrathofUnchaining-77994" value: { - dps: 37979.73885 - tps: 37846.6508 + dps: 37582.01877 + tps: 37574.31976 } } dps_results: { key: "TestRetribution-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 36824.63993 - tps: 36691.23431 + dps: 36195.41315 + tps: 36186.18928 } } dps_results: { key: "TestRetribution-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 36824.63993 - tps: 36691.23431 + dps: 36195.41315 + tps: 36186.18928 } } dps_results: { key: "TestRetribution-Average-Default" value: { - dps: 39155.04828 - tps: 39012.31019 + dps: 38789.90107 + tps: 38768.68258 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36705.39268 - tps: 40955.98748 + dps: 36714.4505 + tps: 40967.21073 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32036.99834 - tps: 31923.40365 + dps: 32034.29745 + tps: 31920.38175 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44634.27709 - tps: 43081.07391 + tps: 43078.51416 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21038.01961 - tps: 25188.99276 + dps: 21072.43497 + tps: 25214.36209 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19290.53212 - tps: 19196.84845 + dps: 19266.08949 + tps: 19171.41363 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24839.73797 - tps: 23441.17347 + tps: 23440.61198 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37274.6296 - tps: 41551.5108 + dps: 37341.91121 + tps: 41607.99136 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32449.52438 - tps: 32340.62544 + dps: 32453.57829 + tps: 32344.41421 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43780.24692 - tps: 42247.7566 + tps: 42244.60904 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21050.16347 - tps: 25171.82251 + dps: 21084.32526 + tps: 25199.86828 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19338.21397 - tps: 19245.00207 + dps: 19354.01471 + tps: 19259.37284 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24182.53713 - tps: 22786.75442 + tps: 22786.19293 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36091.04307 - tps: 40410.52976 + dps: 36013.23729 + tps: 40291.47893 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31580.81117 - tps: 31473.23086 + dps: 31579.48682 + tps: 31471.12742 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44168.91318 - tps: 42628.01686 + dps: 44169.09252 + tps: 42624.39821 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21226.62877 - tps: 25680.37758 + dps: 21315.99669 + tps: 25734.8604 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18736.78033 - tps: 18656.15843 + dps: 18766.42311 + tps: 18684.34107 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24220.92272 - tps: 22825.71333 + tps: 22825.02187 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43633.17123 - tps: 47416.86061 + dps: 43548.05123 + tps: 47303.62101 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39238.31288 - tps: 39108.30346 + dps: 39265.25774 + tps: 39135.04001 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54180.27596 - tps: 52558.11537 + tps: 52557.29137 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25936.37096 - tps: 29746.76493 + dps: 25905.33336 + tps: 29696.56442 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23824.32947 - tps: 23710.06556 + dps: 23939.03358 + tps: 23825.58482 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30444.60314 - tps: 29010.77959 + tps: 29010.2181 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43021.75449 - tps: 46893.93335 + dps: 43082.23065 + tps: 46955.82357 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38531.87305 - tps: 38400.02459 + dps: 38574.31156 + tps: 38439.95287 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54162.49471 - tps: 52535.92717 + tps: 52534.01735 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25665.55724 - tps: 29412.77168 + dps: 25556.35426 + tps: 29286.72754 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23554.28742 - tps: 23444.56703 + dps: 23558.73598 + tps: 23452.63207 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30710.57761 - tps: 29284.75933 + tps: 29284.19784 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43021.75449 - tps: 46893.93335 + dps: 43082.23065 + tps: 46955.82357 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38531.87305 - tps: 38400.02459 + dps: 38574.31156 + tps: 38439.95287 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54162.49471 - tps: 52535.92717 + tps: 52534.01735 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25665.55724 - tps: 29412.77168 + dps: 25556.35426 + tps: 29286.72754 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23554.28742 - tps: 23444.56703 + dps: 23558.73598 + tps: 23452.63207 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30710.57761 - tps: 29284.75933 + tps: 29284.19784 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 57499.24171 - tps: 59515.97079 + tps: 59496.61194 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51249.22448 - tps: 48583.8211 + dps: 51226.04298 + tps: 48558.59482 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 67472.92644 - tps: 63780.87509 + tps: 63776.0585 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35888.67048 - tps: 38192.87599 + dps: 35712.68649 + tps: 38040.56499 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32447.88756 - tps: 30192.77751 + dps: 32457.2443 + tps: 30200.03345 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 39166.72939 - tps: 36345.38448 + tps: 36342.93073 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 56867.44811 - tps: 58886.43757 + dps: 56838.47866 + tps: 58839.94676 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50864.75633 - tps: 48189.64166 + dps: 50897.3513 + tps: 48219.60456 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 67614.35071 - tps: 63915.15619 + tps: 63910.3396 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35498.01655 - tps: 37791.19219 + dps: 35309.00372 + tps: 37620.34709 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32129.36503 - tps: 29846.52479 + dps: 32111.99676 + tps: 29829.4619 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 38438.01954 - tps: 35603.44652 + tps: 35600.99278 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57028.3543 - tps: 59092.78876 + dps: 57028.12142 + tps: 59075.01679 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51033.15783 - tps: 48379.76745 + dps: 51033.16842 + tps: 48378.70495 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 69010.03043 - tps: 65317.97908 + tps: 65313.16249 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35692.4668 - tps: 37977.05062 + dps: 35481.80244 + tps: 37792.26394 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32398.85025 - tps: 30123.01616 + dps: 32424.63528 + tps: 30147.80274 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 39986.17815 - tps: 37158.21918 + tps: 37155.76544 } } dps_results: { key: "TestRetribution-SwitchInFrontOfTarget-Default" value: { - dps: 36430.74691 - tps: 36337.25902 + dps: 35694.3282 + tps: 35705.32508 } } diff --git a/sim/priest/shadow/TestShadow.results b/sim/priest/shadow/TestShadow.results index 89efbe84e3..edb38dbc8d 100644 --- a/sim/priest/shadow/TestShadow.results +++ b/sim/priest/shadow/TestShadow.results @@ -2048,126 +2048,126 @@ dps_results: { } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39682.46219 tps: 51935.46238 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39682.46219 tps: 33956.52477 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48184.47905 tps: 39884.02351 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23919.8001 tps: 35435.62113 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23919.8001 tps: 21233.98435 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24213.35994 tps: 21210.13735 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39610.92563 tps: 51747.73404 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39610.92563 tps: 33907.65967 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48025.1565 tps: 39742.9917 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23971.91555 tps: 35469.16616 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23971.91555 tps: 21280.41262 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24230.50036 tps: 21222.74355 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 40517.66577 tps: 52636.95808 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40517.66577 tps: 34635.03559 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50643.9405 tps: 41876.33492 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 24343.82459 tps: 36155.08076 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24343.82459 tps: 21675.31682 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25286.78427 tps: 22257.85173 diff --git a/sim/rogue/assassination/TestAssassination.results b/sim/rogue/assassination/TestAssassination.results index ff2e6aaf69..a52c58e3ba 100644 --- a/sim/rogue/assassination/TestAssassination.results +++ b/sim/rogue/assassination/TestAssassination.results @@ -2099,1008 +2099,1008 @@ dps_results: { } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29596.56595 tps: 21013.56183 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29596.56595 tps: 21013.56183 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38946.02753 tps: 27651.67954 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17438.70973 tps: 12381.48391 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17438.70973 tps: 12381.48391 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19394.33365 tps: 13769.97689 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22288.51319 tps: 15824.84437 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22288.51319 tps: 15824.84437 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29380.24212 tps: 20859.9719 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13285.15138 tps: 9432.45748 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13285.15138 tps: 9432.45748 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15061.95727 tps: 10693.98966 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30156.78355 tps: 21411.31632 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30156.78355 tps: 21411.31632 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 39743.70334 tps: 28218.02937 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17741.53066 tps: 12596.48677 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17741.53066 tps: 12596.48677 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19722.04797 tps: 14002.65406 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 17677.15944 tps: 12550.7832 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 17677.15944 tps: 12550.7832 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 22387.60517 tps: 15895.19967 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 10133.49643 tps: 7194.78247 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 10133.49643 tps: 7194.78247 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 11134.1558 tps: 7905.25062 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37055.64483 tps: 26309.50783 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37055.64483 tps: 26309.50783 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48929.20945 tps: 34739.73871 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21897.98304 tps: 15547.56796 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21897.98304 tps: 15547.56796 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24605.30902 tps: 17469.7694 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27828.6146 tps: 19758.31636 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27828.6146 tps: 19758.31636 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36961.14281 tps: 26242.4114 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16522.30395 tps: 11730.83581 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16522.30395 tps: 11730.83581 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18879.08438 tps: 13404.14991 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37795.54457 tps: 26834.83664 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37795.54457 tps: 26834.83664 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50164.41943 tps: 35616.73779 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22319.12476 tps: 15846.57858 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22319.12476 tps: 15846.57858 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25104.09513 tps: 17823.90754 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 21858.21424 tps: 15519.33211 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 21858.21424 tps: 15519.33211 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 27745.70105 tps: 19699.44775 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 12726.02223 tps: 9035.47578 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 12726.02223 tps: 9035.47578 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14029.72429 tps: 9961.10424 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 54499.60733 tps: 38694.7212 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 54499.60733 tps: 38694.7212 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 69793.2058 tps: 49553.17612 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33205.09094 tps: 23575.61457 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33205.09094 tps: 23575.61457 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36442.0357 tps: 25873.84534 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 41793.6737 tps: 29673.50833 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41793.6737 tps: 29673.50833 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 53464.88687 tps: 37960.06968 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25534.59521 tps: 18129.5626 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25534.59521 tps: 18129.5626 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28327.09226 tps: 20112.2355 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 55485.05494 tps: 39394.389 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 55485.05494 tps: 39394.389 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 71209.64337 tps: 50558.84679 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33753.29927 tps: 23964.84248 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33753.29927 tps: 23964.84248 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37029.19334 tps: 26290.72727 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28199.69053 tps: 20021.78028 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28199.69053 tps: 20021.78028 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35994.77997 tps: 25556.29378 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16517.95383 tps: 11727.74722 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16517.95383 tps: 11727.74722 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18812.8833 tps: 13357.14715 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29884.33208 tps: 21217.87578 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29884.33208 tps: 21217.87578 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 39547.36896 tps: 28078.63196 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17613.77413 tps: 12505.77963 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17613.77413 tps: 12505.77963 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19731.48048 tps: 14009.35114 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22505.69062 tps: 15979.04034 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22505.69062 tps: 15979.04034 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29840.4938 tps: 21186.75059 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13419.64489 tps: 9527.94787 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13419.64489 tps: 9527.94787 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15327.34755 tps: 10882.41676 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30448.66994 tps: 21618.55566 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30448.66994 tps: 21618.55566 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40358.82262 tps: 28654.76406 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17922.08937 tps: 12724.68346 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17922.08937 tps: 12724.68346 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20063.43605 tps: 14245.0396 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 17844.4751 tps: 12669.57732 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 17844.4751 tps: 12669.57732 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 22760.73262 tps: 16160.12016 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 10238.60275 tps: 7269.40795 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 10238.60275 tps: 7269.40795 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 11348.5134 tps: 8057.44451 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37381.53615 tps: 26540.89067 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37381.53615 tps: 26540.89067 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49630.9119 tps: 35237.94745 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22105.90991 tps: 15695.19604 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22105.90991 tps: 15695.19604 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24986.45483 tps: 17740.38293 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28070.54006 tps: 19930.08345 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28070.54006 tps: 19930.08345 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37496.13084 tps: 26622.2529 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16677.02191 tps: 11840.68555 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16677.02191 tps: 11840.68555 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19174.73269 tps: 13614.06021 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38125.67838 tps: 27069.23165 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38125.67838 tps: 27069.23165 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50885.3974 tps: 36128.63215 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22533.74573 tps: 15998.95947 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22533.74573 tps: 15998.95947 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25493.9846 tps: 18100.72906 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22062.05223 tps: 15664.05708 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22062.05223 tps: 15664.05708 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 28158.6327 tps: 19992.62922 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 12850.44261 tps: 9123.81425 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 12850.44261 tps: 9123.81425 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14264.17789 tps: 10127.5663 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 54878.55017 tps: 38963.77062 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 54878.55017 tps: 38963.77062 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 70531.55198 tps: 50077.40191 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33463.59075 tps: 23759.14943 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33463.59075 tps: 23759.14943 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36868.00399 tps: 26176.28283 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 42071.8844 tps: 29871.03792 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42071.8844 tps: 29871.03792 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54023.98863 tps: 38357.03193 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25727.64097 tps: 18266.62509 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25727.64097 tps: 18266.62509 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28655.80416 tps: 20345.62095 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 55869.26282 tps: 39667.1766 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 55869.26282 tps: 39667.1766 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 71966.77245 tps: 51096.40844 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 34015.2566 tps: 24150.83218 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 34015.2566 tps: 24150.83218 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37465.06298 tps: 26600.19471 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28392.88629 tps: 20158.94926 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28392.88629 tps: 20158.94926 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36405.3604 tps: 25847.80588 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16664.21745 tps: 11831.59439 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16664.21745 tps: 11831.59439 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19050.45258 tps: 13525.82133 diff --git a/sim/rogue/combat/TestCombat.results b/sim/rogue/combat/TestCombat.results index c08dba76b7..7d2c7f8175 100644 --- a/sim/rogue/combat/TestCombat.results +++ b/sim/rogue/combat/TestCombat.results @@ -2132,1008 +2132,1008 @@ dps_results: { } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29882.24948 tps: 21216.39713 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30156.67815 tps: 21411.24149 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36588.9866 tps: 25978.18049 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17050.10833 tps: 12105.57692 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17211.4354 tps: 12220.11914 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17189.01358 tps: 12204.19964 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25962.40978 tps: 18433.31094 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 25888.53227 tps: 18380.85791 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31501.42247 tps: 22366.00995 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15031.42022 tps: 10672.30836 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14959.9265 tps: 10621.54781 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15011.74375 tps: 10658.33806 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28868.39014 tps: 20496.557 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29110.93188 tps: 20668.76163 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35291.51557 tps: 25056.97606 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16545.291 tps: 11747.15661 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16665.44088 tps: 11832.46303 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16591.64005 tps: 11780.06444 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27122.5906 tps: 19257.03933 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27414.30112 tps: 19464.15379 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 33968.62615 tps: 24117.72457 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14957.96439 tps: 10620.15472 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15072.6503 tps: 10701.58171 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15261.46226 tps: 10835.6382 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38000.46776 tps: 26980.33211 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38380.88409 tps: 27250.4277 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45939.63665 tps: 32617.14202 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21984.23943 tps: 15608.81 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22143.03498 tps: 15721.55484 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22559.10713 tps: 16016.96606 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33463.48548 tps: 23759.07469 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33477.35054 tps: 23768.91888 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40119.19857 tps: 28484.63098 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19620.12822 tps: 13930.29104 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19561.62805 tps: 13888.75592 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20007.39855 tps: 14205.25297 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 36762.02124 tps: 26101.03508 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37125.90309 tps: 26359.3912 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44384.5274 tps: 31513.01445 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21405.2518 tps: 15197.72877 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21562.5713 tps: 15309.42563 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21929.36507 tps: 15569.8492 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 35012.38836 tps: 24858.79573 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 35411.79454 tps: 25142.37412 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43066.10362 tps: 30576.93357 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19543.25766 tps: 13875.71294 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19718.2986 tps: 13999.992 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20292.55681 tps: 14407.71533 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53050.26594 tps: 37665.68882 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53483.10592 tps: 37973.0052 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61415.21065 tps: 43604.79956 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31594.08807 tps: 22431.80253 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31861.46471 tps: 22621.63994 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31305.65224 tps: 22227.01309 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 47291.52185 tps: 33576.98051 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47160.61685 tps: 33484.03797 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54049.67912 tps: 38375.27217 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28529.58876 tps: 20256.00802 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28353.13763 tps: 20130.72771 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 27990.37516 tps: 19873.16636 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52979.7404 tps: 37615.61569 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53379.77655 tps: 37899.64135 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61308.01769 tps: 43528.69256 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31655.02054 tps: 22475.06458 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31855.43154 tps: 22617.3564 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31312.42513 tps: 22231.82184 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49052.90674 tps: 34827.56378 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49521.81321 tps: 35160.48738 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57519.64892 tps: 40838.95074 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28148.90711 tps: 19985.72405 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28374.61997 tps: 20145.98018 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28113.8273 tps: 19960.81738 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30153.36198 tps: 21408.88701 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30424.80614 tps: 21601.61236 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36900.86635 tps: 26199.61511 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17256.1623 tps: 12251.87524 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17425.72277 tps: 12372.26316 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17453.99977 tps: 12392.33983 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26213.63927 tps: 18611.68388 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26132.12811 tps: 18553.81096 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31768.82105 tps: 22555.86295 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15203.4532 tps: 10794.45177 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15143.18695 tps: 10751.66273 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15236.25934 tps: 10817.74413 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29088.70521 tps: 20652.9807 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29357.03868 tps: 20843.49746 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35584.29734 tps: 25264.85111 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16746.73165 tps: 11890.17947 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16877.48046 tps: 11983.01113 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16844.51105 tps: 11959.60284 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27377.41283 tps: 19437.96311 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27674.58991 tps: 19648.95883 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34276.20721 tps: 24336.10712 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15130.95692 tps: 10742.97941 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15257.48852 tps: 10832.81685 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15540.11958 tps: 11033.4849 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38307.04278 tps: 27198.00038 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38694.40337 tps: 27473.02639 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46554.04543 tps: 33053.37225 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22187.39856 tps: 15753.05298 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22347.9868 tps: 15867.07063 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22929.13235 tps: 16279.68397 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33728.04115 tps: 23946.90922 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33747.66215 tps: 23960.84012 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40657.14247 tps: 28866.57116 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19799.45445 tps: 14057.61266 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19738.53781 tps: 14014.36184 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20333.94591 tps: 14437.10159 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37058.33819 tps: 26311.42012 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37426.73062 tps: 26572.97874 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44978.20715 tps: 31934.52708 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21602.46767 tps: 15337.75205 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21760.2115 tps: 15449.75017 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22287.65519 tps: 15824.23519 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 35291.49727 tps: 25056.96306 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 35705.70735 tps: 25351.05222 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43662.75797 tps: 31000.55816 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19726.33898 tps: 14005.70068 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19902.07377 tps: 14130.47238 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20637.46955 tps: 14652.60338 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53389.61992 tps: 37906.63014 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53824.66731 tps: 38215.51379 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 62054.00421 tps: 44058.34299 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31821.59516 tps: 22593.33256 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32089.9671 tps: 22783.87664 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31674.62247 tps: 22488.98195 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 47589.68965 tps: 33788.67965 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47455.62482 tps: 33693.49362 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54609.36493 tps: 38772.6491 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28734.09635 tps: 20401.20841 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28553.80657 tps: 20273.20266 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28320.4738 tps: 20107.5364 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53316.64633 tps: 37854.81889 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53719.09557 tps: 38140.55785 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61947.36168 tps: 43982.62679 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31883.55731 tps: 22637.32569 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32084.16242 tps: 22779.75532 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31683.41356 tps: 22495.22363 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49367.85121 tps: 35051.17436 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49838.67186 tps: 35385.45702 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58131.74945 tps: 41273.54211 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28354.39438 tps: 20131.62001 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28580.77925 tps: 20292.35327 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28458.32202 tps: 20205.40863 diff --git a/sim/rogue/subtlety/TestSubtlety.results b/sim/rogue/subtlety/TestSubtlety.results index 4bcfe45caa..fc1b6c9499 100644 --- a/sim/rogue/subtlety/TestSubtlety.results +++ b/sim/rogue/subtlety/TestSubtlety.results @@ -2062,1008 +2062,1008 @@ dps_results: { } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24023.73823 tps: 17056.85414 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 24023.73823 tps: 17056.85414 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32064.79482 tps: 22766.00432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13268.15503 tps: 9420.39007 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13268.15503 tps: 9420.39007 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14941.50931 tps: 10608.47161 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26036.27941 tps: 18485.75838 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26036.27941 tps: 18485.75838 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34044.86774 tps: 24171.8561 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14345.80469 tps: 10185.52133 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14345.80469 tps: 10185.52133 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15883.32638 tps: 11277.16173 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23666.75533 tps: 16803.39629 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23666.75533 tps: 16803.39629 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32137.80662 tps: 22817.8427 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13084.62054 tps: 9290.08058 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13084.62054 tps: 9290.08058 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14913.69162 tps: 10588.72105 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26092.78957 tps: 18525.88059 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26092.78957 tps: 18525.88059 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34703.32715 tps: 24639.36228 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14205.79937 tps: 10086.11755 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14205.79937 tps: 10086.11755 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15529.64562 tps: 11026.04839 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31167.16498 tps: 22128.68714 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31167.16498 tps: 22128.68714 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41412.66458 tps: 29402.99185 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17587.02102 tps: 12486.78492 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17587.02102 tps: 12486.78492 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19595.94267 tps: 13913.11929 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33377.36016 tps: 23697.92572 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33377.36016 tps: 23697.92572 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44068.75757 tps: 31288.81787 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18926.38902 tps: 13437.73621 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18926.38902 tps: 13437.73621 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21224.15534 tps: 15069.15029 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31137.94816 tps: 22107.9432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31137.94816 tps: 22107.9432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41931.83441 tps: 29771.60243 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17397.58295 tps: 12352.28389 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17397.58295 tps: 12352.28389 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19943.85192 tps: 14160.13486 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33461.0569 tps: 23757.3504 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33461.0569 tps: 23757.3504 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44305.2215 tps: 31456.70726 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19057.25707 tps: 13530.65252 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19057.25707 tps: 13530.65252 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21225.19117 tps: 15069.88573 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45178.62892 tps: 32076.82653 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45178.62892 tps: 32076.82653 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 56859.46522 tps: 40370.22031 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26920.16372 tps: 19113.31624 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26920.16372 tps: 19113.31624 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29870.29713 tps: 21207.91096 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48487.09804 tps: 34425.83961 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48487.09804 tps: 34425.83961 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60262.54446 tps: 42786.40657 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28710.98473 tps: 20384.79916 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28710.98473 tps: 20384.79916 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31639.61607 tps: 22464.12741 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45348.60836 tps: 32197.51193 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45348.60836 tps: 32197.51193 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57525.2287 tps: 40842.91237 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26537.66582 tps: 18841.74273 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26537.66582 tps: 18841.74273 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29554.61962 tps: 20983.77993 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48731.17013 tps: 34599.13079 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48731.17013 tps: 34599.13079 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60994.88407 tps: 43306.36769 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28692.15384 tps: 20371.42922 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28692.15384 tps: 20371.42922 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31433.19882 tps: 22317.57116 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24259.80678 tps: 17224.46281 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 24259.80678 tps: 17224.46281 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32539.57435 tps: 23103.09779 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13389.3626 tps: 9506.44745 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13389.3626 tps: 9506.44745 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15199.98813 tps: 10791.99157 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26281.22684 tps: 18659.67105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26281.22684 tps: 18659.67105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34551.81894 tps: 24531.79145 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14479.69358 tps: 10280.58244 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14479.69358 tps: 10280.58244 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16146.48035 tps: 11464.00105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23883.84739 tps: 16957.53164 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23883.84739 tps: 16957.53164 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32627.88795 tps: 23165.80045 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13201.45224 tps: 9373.03109 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13201.45224 tps: 9373.03109 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15159.67022 tps: 10763.36585 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26329.62387 tps: 18694.03295 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26329.62387 tps: 18694.03295 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35207.60752 tps: 24997.40134 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14328.46851 tps: 10173.21264 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14328.46851 tps: 10173.21264 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15775.73823 tps: 11200.77414 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31455.00875 tps: 22333.05621 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31455.00875 tps: 22333.05621 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41932.47562 tps: 29772.05769 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17744.5593 tps: 12598.6371 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17744.5593 tps: 12598.6371 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19893.95477 tps: 14124.70788 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33666.21066 tps: 23903.00957 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33666.21066 tps: 23903.00957 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44612.40135 tps: 31674.80496 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19093.02293 tps: 13556.04628 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19093.02293 tps: 13556.04628 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21534.55449 tps: 15289.53369 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31391.04381 tps: 22287.6411 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31391.04381 tps: 22287.6411 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42460.41375 tps: 30146.89376 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17545.14485 tps: 12457.05284 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17545.14485 tps: 12457.05284 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20254.14477 tps: 14380.44278 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33761.4205 tps: 23970.60855 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33761.4205 tps: 23970.60855 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44854.34714 tps: 31846.58647 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19222.08013 tps: 13647.67689 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19222.08013 tps: 13647.67689 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21541.38754 tps: 15294.38515 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45493.04743 tps: 32300.06368 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45493.04743 tps: 32300.06368 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57412.62904 tps: 40762.96662 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 27082.61157 tps: 19228.65422 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27082.61157 tps: 19228.65422 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30177.98045 tps: 21426.36612 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48817.7266 tps: 34660.58588 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48817.7266 tps: 34660.58588 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60846.88949 tps: 43201.29154 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28977.19097 tps: 20573.80559 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28977.19097 tps: 20573.80559 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31967.46276 tps: 22696.89856 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45669.40026 tps: 32425.27418 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45669.40026 tps: 32425.27418 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58098.13562 tps: 41249.67629 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26716.80411 tps: 18968.93092 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26716.80411 tps: 18968.93092 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29854.27637 tps: 21196.53622 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49069.58765 tps: 34839.40723 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49069.58765 tps: 34839.40723 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61578.67403 tps: 43720.85856 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28875.79312 tps: 20501.81312 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28875.79312 tps: 20501.81312 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31781.18562 tps: 22564.64179 diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index a1e922025a..07a9d12128 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -2104,756 +2104,756 @@ dps_results: { } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 109551.0542 tps: 46919.98782 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42999.25641 tps: 1817.53734 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49594.63809 tps: 2041.50541 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85191.16514 tps: 45159.2985 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33430.38976 tps: 1545.69372 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36727.49286 tps: 1612.62795 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68653.68372 tps: 13599.95558 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 43053.41515 tps: 1834.74733 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49902.0258 tps: 1955.77801 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52326.43231 tps: 12356.09823 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33309.37434 tps: 1543.56936 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36906.10938 tps: 1665.1489 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 76505.44362 tps: 11674.91038 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41953.72808 tps: 1770.58491 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48755.66929 tps: 1976.93628 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 59578.12853 tps: 10807.11852 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32515.98979 tps: 1499.97252 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35916.81838 tps: 1577.76753 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 168245.40155 tps: 83203.5513 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42605.94291 tps: 1830.04816 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49802.0821 tps: 2043.20178 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 136879.07472 tps: 76331.6609 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33069.47909 tps: 1553.2829 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36883.71192 tps: 1613.02379 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 tps: 13632.95104 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42573.14869 tps: 1799.97082 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50165.73077 tps: 1959.40374 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 tps: 12323.43786 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32765.03048 tps: 1536.87895 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37095.64305 tps: 1666.39519 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 70320.56562 tps: 11534.78928 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41126.68082 tps: 1789.80509 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48991.84118 tps: 1977.7694 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 55059.02431 tps: 10760.57942 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31885.41889 tps: 1520.04115 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36086.15713 tps: 1578.0019 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 151539.96327 tps: 81879.87775 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41182.56717 tps: 1793.08365 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48600.90908 tps: 2035.95837 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 123566.89054 tps: 75235.06515 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31892.66496 tps: 1551.70921 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35906.27685 tps: 1649.15113 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 tps: 13632.95104 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41178.82388 tps: 1813.23926 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49041.65946 tps: 2004.4551 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 tps: 12323.43786 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31865.35545 tps: 1537.37216 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35866.3283 tps: 1608.02755 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68952.49673 tps: 11357.44249 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39691.48837 tps: 1779.52637 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47057.13635 tps: 1981.40804 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 53958.60992 tps: 10693.75853 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 30647.95363 tps: 1483.83412 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 34767.8471 tps: 1566.13963 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 106945.615 tps: 47138.43057 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42708.96798 tps: 1861.92326 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49785.05407 tps: 2055.75816 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 83022.28107 tps: 45533.67284 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33055.42261 tps: 1559.55579 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36767.40917 tps: 1629.11946 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 66349.05733 tps: 13809.49756 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42765.90612 tps: 1844.4635 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49516.57831 tps: 2097.55019 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50346.3404 tps: 12382.89684 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32851.51641 tps: 1532.31207 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36165.73033 tps: 1631.42476 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 72825.55674 tps: 11592.55943 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41302.96544 tps: 1793.41823 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47927.62713 tps: 2007.00803 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 57760.12662 tps: 10843.6855 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32168.99618 tps: 1505.06875 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35433.46059 tps: 1569.33836 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 165440.06407 tps: 83589.94344 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41918.50679 tps: 1811.47032 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50019.69491 tps: 2058.28987 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 134720.21118 tps: 76353.54883 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32873.87863 tps: 1543.3958 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36941.38646 tps: 1629.81463 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 tps: 13689.94868 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42364.6583 tps: 1833.85574 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49794.42621 tps: 2099.73003 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 tps: 12278.74374 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32828.1348 tps: 1550.98754 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36355.97809 tps: 1632.50025 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 70055.39976 tps: 11646.63724 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40750.30024 tps: 1782.73226 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48138.78924 tps: 2008.24586 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 55950.94933 tps: 10815.31113 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32046.6382 tps: 1513.26098 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35592.9627 tps: 1569.63261 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 148204.04384 tps: 82113.58425 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40691.9033 tps: 1806.19632 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48073.42607 tps: 2016.67989 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 120749.30526 tps: 75459.60118 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31491.36783 tps: 1542.27765 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35195.71022 tps: 1620.69136 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 tps: 13689.94868 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40896.46641 tps: 1833.17132 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47825.30747 tps: 2066.46673 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 tps: 12278.74374 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31453.11319 tps: 1534.06122 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35363.27966 tps: 1602.53066 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68965.44744 tps: 11554.65106 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39469.11662 tps: 1769.948 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46541.54316 tps: 1951.95683 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 54775.46047 tps: 10712.63172 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 30769.72723 tps: 1507.15884 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 33896.53927 tps: 1548.89793 diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 789f6c93e5..37154278d1 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -2111,126 +2111,126 @@ dps_results: { } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37418.55455 tps: 28258.17068 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 36873.72092 tps: 23583.28187 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42541.45081 tps: 26150.35923 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28732.54896 tps: 22979.49663 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28272.30208 tps: 18280.47389 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31401.66533 tps: 19494.93683 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37717.08364 tps: 28445.59652 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37163.61024 tps: 23745.56833 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42900.6381 tps: 26370.81037 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 29121.36704 tps: 23204.6786 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28653.06966 tps: 18488.90669 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32200.79264 tps: 19949.92009 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37493.97995 tps: 28276.87014 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37008.19915 tps: 23604.07612 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43100.60544 tps: 26513.6274 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28947.10962 tps: 23038.95748 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28483.12507 tps: 18409.45984 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32141.48105 tps: 20184.82185 diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index 1d57c5ae9a..e76a4da448 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -1971,168 +1971,168 @@ dps_results: { } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39007.36069 tps: 34138.45669 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37844.84438 tps: 26679.42675 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 46297.09379 tps: 29827.53787 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25383.92023 tps: 25277.29592 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25383.92023 tps: 17655.67544 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28128.93913 tps: 17436.90164 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38554.58894 tps: 33789.0105 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37547.48034 tps: 26375.47272 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 45925.32118 tps: 29596.36276 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25248.83476 tps: 25039.30692 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25248.83476 tps: 17560.59183 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27425.59262 tps: 16803.38146 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39239.49319 tps: 33989.57338 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38237.66409 tps: 26567.92871 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 45698.7195 tps: 30007.62743 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25724.00024 tps: 25154.72762 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25724.00024 tps: 17675.2608 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27792.34666 tps: 17098.99538 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38912.66742 tps: 34047.30369 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37891.74459 tps: 26736.13884 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 47214.37437 tps: 30775.93289 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25412.54903 tps: 25387.37212 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25412.54903 tps: 17765.75164 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28800.27225 tps: 17813.07169 diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 2ca6a3d340..738f232c9f 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1971,672 +1971,672 @@ dps_results: { } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 61029.33085 tps: 53241.85915 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38835.73047 tps: 18766.1515 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57200.10725 tps: 25623.94523 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40195.717 tps: 37397.04182 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27393.00474 tps: 13028.40591 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35826.85468 tps: 15023.37355 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58218.66222 tps: 49370.30178 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38476.51426 tps: 19318.02864 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58131.67018 tps: 27511.06266 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 39622.0774 tps: 34609.02878 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27622.08204 tps: 13656.34151 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35292.76916 tps: 15642.24113 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 61150.49212 tps: 53471.51603 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39398.6526 tps: 19173.08109 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57985.01933 tps: 26377.76423 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40575.20765 tps: 37799.82858 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27786.26884 tps: 13377.66229 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 36078.87589 tps: 15389.09273 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 56968.76724 tps: 47226.22336 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37477.2759 tps: 18514.85469 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 55823.39222 tps: 25410.26071 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 39610.85805 tps: 34797.86575 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26799.83629 tps: 13074.17381 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 34571.17235 tps: 15025.80758 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 60801.76257 tps: 52749.93446 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38644.67952 tps: 18698.49633 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57012.98881 tps: 25594.36891 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 39930.35374 tps: 37309.34691 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27223.04286 tps: 12887.34338 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35648.5014 tps: 15130.70903 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57524.91965 tps: 48223.98603 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38270.77013 tps: 19214.42702 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57626.54142 tps: 27076.12868 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 39608.44625 tps: 34441.32651 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27420.61722 tps: 13589.71014 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35057.51675 tps: 15359.34472 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 61120.9446 tps: 53202.30783 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39186.32738 tps: 19074.61348 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57423.89245 tps: 26146.07455 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40461.9475 tps: 37552.79504 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27698.28883 tps: 13300.09822 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35790.32565 tps: 15296.03323 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 56925.93859 tps: 47438.33586 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37512.3387 tps: 18607.70259 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 55657.58855 tps: 25453.84657 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 39347.43495 tps: 34412.2665 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26603.50458 tps: 13025.77505 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 34254.68108 tps: 14959.63548 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 62037.49638 tps: 52990.54975 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39540.85241 tps: 18823.85587 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58955.13748 tps: 25950.10622 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40721.1874 tps: 37488.13818 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27912.10252 tps: 12967.14714 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37069.18276 tps: 15352.47213 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58799.43729 tps: 49074.60728 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39186.17769 tps: 19372.01096 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59388.9197 tps: 27438.05754 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40718.1787 tps: 34916.28755 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 28159.57065 tps: 13704.35006 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 36468.37579 tps: 15590.61938 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 62382.06282 tps: 53641.3439 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40028.819 tps: 19149.36628 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59336.94009 tps: 26493.29363 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 41415.38905 tps: 37983.17445 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 28381.72146 tps: 13366.76735 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37201.38759 tps: 15518.79987 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58218.86957 tps: 47979.9808 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38427.52805 tps: 18756.03849 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 57483.80585 tps: 25799.91205 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40458.77023 tps: 34831.02652 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27330.50154 tps: 13135.44623 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 35646.35585 tps: 15190.7574 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 63177.10549 tps: 55041.42043 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39214.83906 tps: 19020.67121 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58762.80714 tps: 26847.93909 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 41918.45698 tps: 39107.84503 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27546.92313 tps: 13051.70691 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 36916.61718 tps: 15590.57085 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 59704.29788 tps: 50003.07301 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38704.85408 tps: 19516.9826 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59020.68407 tps: 28275.10231 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 41425.27896 tps: 36513.35288 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 28097.35357 tps: 13890.27172 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37204.34519 tps: 16634.48497 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 63453.31575 tps: 55496.50692 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39739.62143 tps: 19488.6811 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59513.62846 tps: 27597.46138 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 42195.69708 tps: 39096.78832 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27797.39043 tps: 13362.61738 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37186.58409 tps: 15804.66775 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58727.56078 tps: 49188.46306 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37749.57273 tps: 18776.53967 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 56996.43632 tps: 26627.83209 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 40737.38364 tps: 35921.00935 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27196.10311 tps: 13269.11846 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 36295.45611 tps: 15884.8477 diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index c9b42012be..14eea0dd14 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -1971,168 +1971,168 @@ dps_results: { } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41864.92935 tps: 42105.90851 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40031.20265 tps: 23943.78893 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50419.71466 tps: 28741.59809 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26214.48301 tps: 30138.44154 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26214.48301 tps: 15626.42597 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29047.15886 tps: 16008.59796 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41787.23971 tps: 41991.24163 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39785.19165 tps: 23771.24223 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50507.4534 tps: 28586.63525 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26034.19234 tps: 29782.97466 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26034.19234 tps: 15405.86088 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28756.09889 tps: 15763.87397 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 42439.69792 tps: 42147.27435 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40439.94755 tps: 23933.1579 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 51796.63467 tps: 28910.28009 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26498.86624 tps: 30001.32797 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26498.86624 tps: 15517.57679 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29568.80944 tps: 15934.33507 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" value: { dps: 42134.2922 tps: 42384.79575 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40367.40146 tps: 24190.57611 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 52013.38851 tps: 29526.12647 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26287.98385 tps: 30183.70785 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26287.98385 tps: 15616.17596 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29630.53286 tps: 16430.73634 diff --git a/sim/warrior/arms/TestArms.results b/sim/warrior/arms/TestArms.results index 2a05b99afc..19c9d72568 100644 --- a/sim/warrior/arms/TestArms.results +++ b/sim/warrior/arms/TestArms.results @@ -2107,168 +2107,168 @@ dps_results: { } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 69696.24356 tps: 37217.28958 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33707.2908 tps: 22668.26965 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41156.91406 tps: 26609.59198 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48130.40433 tps: 24150.99433 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23076.96818 tps: 15339.27769 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25229.36625 tps: 15829.6947 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 87325.81113 tps: 46129.24303 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42031.88957 tps: 28828.75515 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47572.39466 tps: 31453.30596 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 61543.14933 tps: 31135.89379 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 29575.45064 tps: 20059.409 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30980.55198 tps: 19850.02257 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 69824.97978 tps: 37129.61183 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33749.77584 tps: 22703.07225 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40797.21175 tps: 26334.74009 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48282.83378 tps: 24101.2781 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23236.01323 tps: 15493.14632 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25235.32485 tps: 15891.18794 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 87569.23697 tps: 46144.32157 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42114.75186 tps: 28871.26248 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47492.25625 tps: 31312.7431 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 61760.1927 tps: 31247.31356 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 29630.18387 tps: 20147.8625 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30698.70092 tps: 19660.25638 diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 565162ba8d..a5c1c0600c 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2146,1344 +2146,1344 @@ dps_results: { } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 78693.06477 tps: 85239.03132 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31382.1484 tps: 26206.495 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 39024.53233 tps: 32141.10575 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52884.69483 tps: 58143.96969 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19394.72623 tps: 15872.59549 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21383.2085 tps: 16615.22376 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 78693.06477 tps: 85239.03132 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30676.45062 tps: 25124.69146 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38278.63547 tps: 31273.11404 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52884.69483 tps: 58143.96969 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19140.17578 tps: 15282.6725 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21026.71244 tps: 16121.68287 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 64701.52823 tps: 70597.06289 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 25282.06577 tps: 21597.64181 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31836.06951 tps: 26944.65622 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 43669.21919 tps: 48375.40121 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15601.75658 tps: 13170.09055 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17375.80323 tps: 13898.70434 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 64701.52823 tps: 70597.06289 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 25092.53109 tps: 20995.1284 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31512.10073 tps: 26276.30647 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 43669.21919 tps: 48375.40121 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15523.84557 tps: 12803.37777 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17022.93272 tps: 13328.40022 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 114511.03749 tps: 126105.51906 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38772.6654 tps: 31694.1257 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47258.4625 tps: 37922.2232 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 79762.10669 tps: 89061.37678 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24549.23034 tps: 19573.35017 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 27323.62392 tps: 21026.16018 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 114511.03749 tps: 126105.51906 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38279.27591 tps: 30458.94345 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46512.06752 tps: 36869.72906 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 79762.10669 tps: 89061.37678 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24162.90274 tps: 18711.22394 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26730.00638 tps: 20046.10733 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 93823.61277 tps: 104186.03632 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30980.41742 tps: 26053.64162 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38308.20478 tps: 31648.55299 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65223.30803 tps: 73553.23184 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19566.94341 tps: 16196.16038 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21450.69344 tps: 16976.57716 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 93823.61277 tps: 104186.03632 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30947.77528 tps: 25373.9413 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38097.70949 tps: 30919.81473 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65223.30803 tps: 73553.23184 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19546.18884 tps: 15614.75216 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21166.00023 tps: 16084.23034 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 95379.72355 tps: 103144.45622 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37385.16086 tps: 31533.52785 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44742.91365 tps: 36425.87503 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65014.38971 tps: 71247.45392 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23401.00062 tps: 19321.66567 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24682.55422 tps: 19176.48991 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 95379.72355 tps: 103144.45622 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 36805.00728 tps: 30530.55904 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43722.09469 tps: 35541.03871 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65014.38971 tps: 71247.45392 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23037.6971 tps: 18667.72443 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24761.88077 tps: 19011.51001 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 79152.69681 tps: 86213.72403 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29985.50917 tps: 25908.51627 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36260.10168 tps: 30385.07808 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 53807.46982 tps: 59454.65361 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18724.11089 tps: 15953.46744 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19969.65004 tps: 15809.64194 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 79152.69681 tps: 86213.72403 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29843.41539 tps: 25150.06317 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35837.76254 tps: 29575.25087 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 53807.46982 tps: 59454.65361 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18710.81967 tps: 15513.80037 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19871.86914 tps: 15514.06214 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 145275.83581 tps: 160033.00108 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47913.81717 tps: 39345.78806 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57280.10668 tps: 45618.78991 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 102682.84397 tps: 114447.17705 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31035.75009 tps: 24762.75012 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32763.62585 tps: 24662.00018 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 145275.83581 tps: 160033.00108 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48075.98111 tps: 38455.02189 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 56932.00391 tps: 44800.56217 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 102682.84397 tps: 114447.17705 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31075.05411 tps: 24261.31508 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32648.52758 tps: 23997.81696 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 118758.91362 tps: 131827.75298 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38541.78619 tps: 32617.56216 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45973.46851 tps: 37937.91293 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 84888.07062 tps: 95274.46808 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24534.3689 tps: 20355.25604 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26371.34116 tps: 20764.39141 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 118758.91362 tps: 131827.75298 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38909.4808 tps: 31739.51706 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46178.39208 tps: 36864.8601 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 84888.07062 tps: 95274.46808 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24760.06194 tps: 19843.70432 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26685.15236 tps: 20258.41572 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 78679.40968 tps: 85260.08197 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31356.36418 tps: 26114.4519 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38447.19068 tps: 31541.25 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52888.21627 tps: 58092.41796 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19632.26061 tps: 16044.04585 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21221.11079 tps: 16419.9736 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 78679.40968 tps: 85260.08197 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30932.37521 tps: 25304.04444 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37443.71977 tps: 30490.66015 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52888.21627 tps: 58092.41796 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19144.67577 tps: 15411.36837 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20648.9385 tps: 15671.70157 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65341.71119 tps: 71267.30013 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 25434.55382 tps: 21677.78472 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31331.35922 tps: 26292.19887 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 44132.30459 tps: 49006.81339 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15443.60959 tps: 12988.11479 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17025.3615 tps: 13593.48301 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65341.71119 tps: 71267.30013 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 24907.60574 tps: 20703.81346 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31036.83026 tps: 25867.66076 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 44132.30459 tps: 49006.81339 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15497.17455 tps: 12726.37082 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17091.25924 tps: 13364.54833 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 113839.81603 tps: 125250.55121 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38726.1082 tps: 31430.40802 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47273.3434 tps: 37938.30195 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80318.20528 tps: 89571.84603 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24496.36411 tps: 19406.91578 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26698.21521 tps: 19887.37397 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 113839.81603 tps: 125250.55121 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38049.02208 tps: 30293.98006 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46857.82039 tps: 37211.96625 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80318.20528 tps: 89571.84603 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24369.13335 tps: 18896.54801 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26184.36854 tps: 19059.96737 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 93811.62367 tps: 104108.99071 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30996.71511 tps: 26091.55321 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38002.20962 tps: 31442.43095 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65978.66162 tps: 74279.83742 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19471.39739 tps: 16044.65114 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21065.73784 tps: 16500.94191 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 93811.62367 tps: 104108.99071 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31087.12528 tps: 25366.76458 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37400.66746 tps: 30255.14097 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 65978.66162 tps: 74279.83742 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19668.9618 tps: 15713.96312 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21079.82324 tps: 16151.41531 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 95520.38199 tps: 103506.58823 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37396.44621 tps: 31326.29359 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44040.91871 tps: 35724.6957 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 66004.8557 tps: 72350.82495 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23446.06074 tps: 19346.92534 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24568.97817 tps: 19064.66154 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 95520.38199 tps: 103506.58823 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 36692.16459 tps: 30261.93013 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43430.09905 tps: 35148.0828 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 66004.8557 tps: 72350.82495 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23257.10907 tps: 18857.08288 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 23948.17732 tps: 18214.00564 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 79734.59265 tps: 86946.13143 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29960.48075 tps: 25741.65479 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35630.67879 tps: 29718.08878 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 54133.4644 tps: 59861.42775 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18951.2184 tps: 16159.02697 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19940.71546 tps: 15755.66312 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 79734.59265 tps: 86946.13143 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29703.76762 tps: 24959.64309 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35749.24422 tps: 29569.05526 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 54133.4644 tps: 59861.42775 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18881.05633 tps: 15571.92273 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19729.76621 tps: 15279.70578 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 143408.46955 tps: 157939.67872 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47584.82833 tps: 38867.02191 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 56604.9483 tps: 44911.0023 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 102970.93946 tps: 114678.73337 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31054.77387 tps: 24818.11285 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32365.89616 tps: 24504.38656 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 143408.46955 tps: 157939.67872 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47991.67729 tps: 38252.27582 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 56029.86679 tps: 43523.2732 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 102970.93946 tps: 114678.73337 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31194.86664 tps: 24206.63522 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32360.34668 tps: 23864.6315 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 119815.14486 tps: 132833.14675 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38101.17878 tps: 32100.15544 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45758.75239 tps: 37647.18487 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85230.95225 tps: 95664.74141 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24344.92236 tps: 20107.49139 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25824.4521 tps: 19795.18556 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 119815.14486 tps: 132833.14675 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38642.57657 tps: 31617.99539 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45298.15467 tps: 36250.47905 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85230.95225 tps: 95664.74141 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25087.39343 tps: 19988.56688 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25796.92352 tps: 19239.19996 diff --git a/sim/warrior/protection/TestProtectionWarrior.results b/sim/warrior/protection/TestProtectionWarrior.results index 581694abe4..fdfd7bf165 100644 --- a/sim/warrior/protection/TestProtectionWarrior.results +++ b/sim/warrior/protection/TestProtectionWarrior.results @@ -2109,252 +2109,252 @@ dps_results: { } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24264.91791 tps: 139053.44774 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5271.05018 tps: 32261.53542 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5765.25271 tps: 34900.62565 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17528.2548 tps: 100605.46506 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3455.09741 tps: 21378.4644 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3297.165 tps: 20517.29332 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25605.66527 tps: 145803.96636 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5785.51853 tps: 34794.13652 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 6250.91917 tps: 37247.68465 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18313.87458 tps: 104208.17508 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3822.36274 tps: 23231.29509 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3637.92645 tps: 22242.00207 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23573.79485 tps: 134997.17692 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5247.6378 tps: 31894.62084 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5727.35544 tps: 34446.68445 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16887.08099 tps: 96872.51812 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3437.55582 tps: 21112.50425 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3297.99839 tps: 20365.18955 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24278.9745 tps: 139166.16025 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5268.83745 tps: 32270.28808 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5725.99151 tps: 34694.376 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17512.87869 tps: 100483.53922 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3451.32686 tps: 21312.17133 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3268.15258 tps: 20335.23638 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25546.85907 tps: 145455.82305 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5763.93175 tps: 34582.12463 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 6235.29311 tps: 37143.55364 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18304.53384 tps: 104252.07318 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3802.93533 tps: 23115.13501 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3594.07413 tps: 21969.85196 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23553.99325 tps: 134858.44962 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5226.39416 tps: 31735.51033 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5682.83686 tps: 34167.25405 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16877.15557 tps: 96789.77658 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3436.30448 tps: 21063.89509 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3267.26215 tps: 20161.14939 diff --git a/ui/druid/balance/sim.ts b/ui/druid/balance/sim.ts index 6b1abd85a3..f42ba26e9e 100644 --- a/ui/druid/balance/sim.ts +++ b/ui/druid/balance/sim.ts @@ -6,7 +6,7 @@ import { IndividualSimUI, registerSpecConfig } from '../../core/individual_sim_u import { Player } from '../../core/player'; import { PlayerClasses } from '../../core/player_classes'; import { APLRotation } from '../../core/proto/apl'; -import { Faction, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; +import { Faction, ItemSlot, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; import { Stats, UnitStat } from '../../core/proto_utils/stats'; import * as DruidInputs from '../inputs'; import * as BalanceInputs from './inputs'; @@ -83,6 +83,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecBalanceDruid, { otherInputs: { inputs: [BalanceInputs.OkfUptime, OtherInputs.TankAssignment, OtherInputs.InputDelay, OtherInputs.DistanceFromTarget, OtherInputs.DarkIntentUptime], }, + itemSwapSlots: [ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, From 32d0e9f0109e2b729d2b18d8e5807ec546204971 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 13 Dec 2024 10:16:25 +0100 Subject: [PATCH 023/127] Remove Shaman bonus intellect/spellpower settings --- proto/shaman.proto | 4 +- sim/shaman/earth_elemental_pet.go | 16 +++----- sim/shaman/earth_elemental_totem.go | 3 +- sim/shaman/fire_elemental_pet.go | 24 ++++-------- sim/shaman/fire_elemental_totem.go | 4 +- sim/shaman/shaman.go | 4 +- ui/core/components/fire_elemental_inputs.ts | 19 --------- ui/shaman/elemental/presets.ts | 2 - ui/shaman/enhancement/sim.ts | 9 ++++- ui/shaman/inputs.ts | 43 +-------------------- 10 files changed, 29 insertions(+), 99 deletions(-) diff --git a/proto/shaman.proto b/proto/shaman.proto index e7e15725b9..303c836a0e 100644 --- a/proto/shaman.proto +++ b/proto/shaman.proto @@ -182,9 +182,9 @@ message ShamanTotems { bool use_fire_elemental = 12; // Bonus spell power for fire elemental snapshotting. - int32 bonus_spellpower = 13; + int32 bonus_spellpower = 13 [deprecated=true]; // No longer used in favor of Item Swapping // Bonus intellect for fire elemental snapshotting. - int32 bonus_intellect = 15; + int32 bonus_intellect = 15 [deprecated=true]; // No longer used in favor of Item Swapping // Snapshot fire elemental using Tier 10 4 set bonus. bool enh_tier_ten_bonus = 14; diff --git a/sim/shaman/earth_elemental_pet.go b/sim/shaman/earth_elemental_pet.go index 4217d525dc..aeffb434c1 100644 --- a/sim/shaman/earth_elemental_pet.go +++ b/sim/shaman/earth_elemental_pet.go @@ -11,16 +11,14 @@ import ( type EarthElemental struct { core.Pet - bonusSpellPower float64 - shamanOwner *Shaman } var EarthElementalSpellPowerScaling = 0.749 -func (shaman *Shaman) NewEarthElemental(bonusSpellPower float64) *EarthElemental { +func (shaman *Shaman) NewEarthElemental() *EarthElemental { earthElemental := &EarthElemental{ - Pet: core.NewPet("Greater Earth Elemental", &shaman.Character, earthElementalPetBaseStats, shaman.earthElementalStatInheritance(bonusSpellPower), false, true), + Pet: core.NewPet("Greater Earth Elemental", &shaman.Character, earthElementalPetBaseStats, shaman.earthElementalStatInheritance(), false, true), shamanOwner: shaman, } earthElemental.EnableManaBar() @@ -42,8 +40,6 @@ func (shaman *Shaman) NewEarthElemental(bonusSpellPower float64) *EarthElemental }) } - earthElemental.bonusSpellPower = bonusSpellPower - earthElemental.OnPetEnable = earthElemental.enable earthElemental.OnPetDisable = earthElemental.disable @@ -53,7 +49,7 @@ func (shaman *Shaman) NewEarthElemental(bonusSpellPower float64) *EarthElemental } func (earthElemental *EarthElemental) enable(sim *core.Simulation) { - earthElemental.ChangeStatInheritance(earthElemental.shamanOwner.earthElementalStatInheritance(0)) + earthElemental.ChangeStatInheritance(earthElemental.shamanOwner.earthElementalStatInheritance()) } func (earthElemental *EarthElemental) disable(sim *core.Simulation) { @@ -84,14 +80,14 @@ var earthElementalPetBaseStats = stats.Stats{ stats.PhysicalCritPercent: 6.8, //TODO need testing } -func (shaman *Shaman) earthElementalStatInheritance(bonusSpellPower float64) core.PetStatInheritance { +func (shaman *Shaman) earthElementalStatInheritance() core.PetStatInheritance { return func(ownerStats stats.Stats) stats.Stats { flooredOwnerSpellHitPercent := math.Floor(ownerStats[stats.SpellHitPercent]) hitRatingFromOwner := flooredOwnerSpellHitPercent * core.SpellHitRatingPerHitPercent return stats.Stats{ - stats.Stamina: ownerStats[stats.Stamina] * 1.06, //TODO need to be more accurate - stats.AttackPower: (ownerStats[stats.SpellPower] + bonusSpellPower) * EarthElementalSpellPowerScaling, // 0.107 * 7 TODO need to be more accurate + stats.Stamina: ownerStats[stats.Stamina] * 1.06, //TODO need to be more accurate + stats.AttackPower: ownerStats[stats.SpellPower] * EarthElementalSpellPowerScaling, // 0.107 * 7 TODO need to be more accurate stats.HitRating: hitRatingFromOwner, diff --git a/sim/shaman/earth_elemental_totem.go b/sim/shaman/earth_elemental_totem.go index 5bdc2be40c..23b9f4cf8f 100644 --- a/sim/shaman/earth_elemental_totem.go +++ b/sim/shaman/earth_elemental_totem.go @@ -18,8 +18,7 @@ func (shaman *Shaman) registerEarthElementalTotem() { ActionID: actionID, Duration: totalDuration, OnReset: func(aura *core.Aura, sim *core.Simulation) { - bonusSpellPower := shaman.EarthElemental.bonusSpellPower - shaman.EarthElemental.ChangeStatInheritance(shaman.EarthElemental.shamanOwner.earthElementalStatInheritance(bonusSpellPower)) + shaman.EarthElemental.ChangeStatInheritance(shaman.EarthElemental.shamanOwner.earthElementalStatInheritance()) }, }) diff --git a/sim/shaman/fire_elemental_pet.go b/sim/shaman/fire_elemental_pet.go index 22e60c1288..4fe937f37b 100644 --- a/sim/shaman/fire_elemental_pet.go +++ b/sim/shaman/fire_elemental_pet.go @@ -17,18 +17,15 @@ type FireElemental struct { FireShieldAura *core.Aura - BonusSpellpower float64 - BonusIntellect float64 - shamanOwner *Shaman } var FireElementalSpellPowerScaling = 0.5883 var FireElementalIntellectScaling = 0.3198 -func (shaman *Shaman) NewFireElemental(bonusSpellPower float64, bonusIntellect float64) *FireElemental { +func (shaman *Shaman) NewFireElemental() *FireElemental { fireElemental := &FireElemental{ - Pet: core.NewPet("Greater Fire Elemental", &shaman.Character, fireElementalPetBaseStats, shaman.fireElementalStatInheritance(bonusIntellect, bonusSpellPower), false, true), + Pet: core.NewPet("Greater Fire Elemental", &shaman.Character, fireElementalPetBaseStats, shaman.fireElementalStatInheritance(), false, true), shamanOwner: shaman, } fireElemental.EnableManaBar() @@ -56,9 +53,6 @@ func (shaman *Shaman) NewFireElemental(bonusSpellPower float64, bonusIntellect f }) } - fireElemental.BonusIntellect = bonusIntellect - fireElemental.BonusSpellpower = bonusSpellPower - fireElemental.OnPetEnable = fireElemental.enable fireElemental.OnPetDisable = fireElemental.disable @@ -68,7 +62,7 @@ func (shaman *Shaman) NewFireElemental(bonusSpellPower float64, bonusIntellect f } func (fireElemental *FireElemental) enable(sim *core.Simulation) { - fireElemental.ChangeStatInheritance(fireElemental.shamanOwner.fireElementalStatInheritance(0, 0)) + fireElemental.ChangeStatInheritance(fireElemental.shamanOwner.fireElementalStatInheritance()) fireElemental.FireShieldAura.Activate(sim) } @@ -147,17 +141,15 @@ var fireElementalPetBaseStats = stats.Stats{ stats.SpellCritPercent: 6.8, } -func (shaman *Shaman) fireElementalStatInheritance(bonusIntellect float64, bonusSpellPower float64) core.PetStatInheritance { +func (shaman *Shaman) fireElementalStatInheritance() core.PetStatInheritance { return func(ownerStats stats.Stats) stats.Stats { ownerSpellHitPercent := ownerStats[stats.SpellHitPercent] - bonusStats := shaman.ApplyStatDependencies(stats.Stats{stats.Intellect: bonusIntellect, stats.SpellPower: bonusSpellPower}) - return stats.Stats{ - stats.Stamina: ownerStats[stats.Stamina] * 0.80, //Estimated from beta testing - stats.Intellect: (ownerStats[stats.Intellect] + bonusStats[stats.Intellect]) * FireElementalIntellectScaling, //Estimated from beta testing - stats.SpellPower: (ownerStats[stats.SpellPower] + bonusStats[stats.SpellPower]) * FireElementalSpellPowerScaling, //Estimated from beta testing - stats.AttackPower: (ownerStats[stats.SpellPower] + bonusStats[stats.SpellPower]) * 4.9, // 0.7*7 Estimated from beta testing + stats.Stamina: ownerStats[stats.Stamina] * 0.80, // Estimated from beta testing + stats.Intellect: ownerStats[stats.Intellect] * FireElementalIntellectScaling, // Estimated from beta testing + stats.SpellPower: ownerStats[stats.SpellPower] * FireElementalSpellPowerScaling, // Estimated from beta testing + stats.AttackPower: ownerStats[stats.SpellPower] * 4.9, // 0.7*7 Estimated from beta testing stats.PhysicalHitPercent: ownerSpellHitPercent / 17 * 8, stats.SpellHitPercent: ownerSpellHitPercent, diff --git a/sim/shaman/fire_elemental_totem.go b/sim/shaman/fire_elemental_totem.go index 238f841dce..028c2078d9 100644 --- a/sim/shaman/fire_elemental_totem.go +++ b/sim/shaman/fire_elemental_totem.go @@ -18,9 +18,7 @@ func (shaman *Shaman) registerFireElementalTotem() { ActionID: actionID, Duration: totalDuration, OnReset: func(aura *core.Aura, sim *core.Simulation) { - bonusIntellect := shaman.FireElemental.BonusIntellect - bonusSpellPower := shaman.FireElemental.BonusSpellpower - shaman.FireElemental.ChangeStatInheritance(shaman.FireElemental.shamanOwner.fireElementalStatInheritance(bonusIntellect, bonusSpellPower)) + shaman.FireElemental.ChangeStatInheritance(shaman.FireElemental.shamanOwner.fireElementalStatInheritance()) }, }) diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index 790ef90058..4389d34660 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -63,8 +63,8 @@ func NewShaman(character *core.Character, talents string, totems *proto.ShamanTo shaman.AddStat(stats.MP5, 354) } - shaman.FireElemental = shaman.NewFireElemental(float64(totems.BonusSpellpower), float64(totems.BonusIntellect)) - shaman.EarthElemental = shaman.NewEarthElemental(float64(totems.BonusSpellpower)) + shaman.FireElemental = shaman.NewFireElemental() + shaman.EarthElemental = shaman.NewEarthElemental() return shaman } diff --git a/ui/core/components/fire_elemental_inputs.ts b/ui/core/components/fire_elemental_inputs.ts index 9e91d1e149..3ea20572f8 100644 --- a/ui/core/components/fire_elemental_inputs.ts +++ b/ui/core/components/fire_elemental_inputs.ts @@ -42,25 +42,6 @@ export function FireElementalSection(parentElem: HTMLElement, simUI: IndividualS new IconPicker(fireElementalIconContainer, simUI.player, fireElementalBooleanIconInput); - new NumberPicker(contentBlock.bodyElement, simUI.player, { - id: 'fire-elemental-bonus-spellpower', - positive: true, - label: 'Bonus spell power', - labelTooltip: 'Bonus spell power to snapshot Fire Elemental with. Will prioritize dropping Fire Elemental if greater then 0', - inline: true, - getValue: (player: Player) => player.getClassOptions().totems?.bonusSpellpower || 0, - setValue: (eventID: EventID, player: Player, newVal: number) => { - const newOptions = player.getClassOptions(); - - if (newOptions.totems) { - newOptions.totems.bonusSpellpower = newVal; - } - - player.setClassOptions(eventID, newOptions); - }, - changedEvent: (player: Player) => player.specOptionsChangeEmitter, - }); - new BooleanPicker(contentBlock.bodyElement, simUI.player, { id: 'fire-elemental-use-tier-ten', label: 'Use Tier 10 (4pc)', diff --git a/ui/shaman/elemental/presets.ts b/ui/shaman/elemental/presets.ts index 51c12f37ac..1b0d863c51 100644 --- a/ui/shaman/elemental/presets.ts +++ b/ui/shaman/elemental/presets.ts @@ -134,8 +134,6 @@ export const DefaultOptions = ElementalShamanOptions.create({ air: AirTotem.WrathOfAirTotem, fire: FireTotem.SearingTotem, water: WaterTotem.ManaSpringTotem, - bonusSpellpower: 0, - bonusIntellect: 0, }), }, }); diff --git a/ui/shaman/enhancement/sim.ts b/ui/shaman/enhancement/sim.ts index 77b9805865..2aa3f525b8 100644 --- a/ui/shaman/enhancement/sim.ts +++ b/ui/shaman/enhancement/sim.ts @@ -124,7 +124,14 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { otherInputs: { inputs: [EnhancementInputs.SyncTypeInput, OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand], + itemSwapSlots: [ + ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ], customSections: [ShamanInputs.TotemsSection, FireElementalSection], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. diff --git a/ui/shaman/inputs.ts b/ui/shaman/inputs.ts index b8ca889dc9..125441a642 100644 --- a/ui/shaman/inputs.ts +++ b/ui/shaman/inputs.ts @@ -5,11 +5,11 @@ import { IconEnumPicker } from '../core/components/pickers/icon_enum_picker'; import { NumberPicker } from '../core/components/pickers/number_picker'; import { IndividualSimUI } from '../core/individual_sim_ui'; import { Player } from '../core/player'; +import { Spec } from '../core/proto/common'; import { AirTotem, CallTotem, EarthTotem, FireTotem, ShamanImbue, ShamanShield, ShamanTotems, TotemSet, WaterTotem } from '../core/proto/shaman'; import { ActionId } from '../core/proto_utils/action_id'; import { ShamanSpecs } from '../core/proto_utils/utils'; import { EventID } from '../core/typed_event'; -import { Spec } from '../core/proto/common'; // Configuration for class-specific UI elements on the settings tab. // These don't need to be in a separate file but it keeps things cleaner. @@ -325,46 +325,5 @@ export function TotemsSection(parentElem: HTMLElement, simUI: IndividualSimUI) => player.getClassOptions().totems?.bonusSpellpower || 0, - setValue: (eventID: EventID, player: Player, newVal: number) => { - const newOptions = player.getClassOptions(); - - if (newOptions.totems) { - newOptions.totems.bonusSpellpower = newVal; - } - - player.setClassOptions(eventID, newOptions); - }, - changedEvent: (player: Player) => player.specOptionsChangeEmitter, - }); - - new NumberPicker(contentBlock.bodyElement, simUI.player, { - id: 'fire-elemental-bonus-intellect', - positive: true, - label: 'Bonus intellect', - labelTooltip: 'Bonus intellect to snapshot Fire Elemental with. Only add it to the first one', - inline: true, - getValue: (player: Player) => player.getClassOptions().totems?.bonusIntellect || 0, - setValue: (eventID: EventID, player: Player, newVal: number) => { - const newOptions = player.getClassOptions(); - - if (newOptions.totems) { - newOptions.totems.bonusIntellect = newVal; - } - - player.setClassOptions(eventID, newOptions); - }, - changedEvent: (player: Player) => player.specOptionsChangeEmitter, - }); - } - return contentBlock; } From 4652e167359bc8d112602d8767df873948199c3b Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 13 Dec 2024 12:06:04 +0100 Subject: [PATCH 024/127] Add Fury item swap --- proto/warrior.proto | 2 +- sim/shaman/apl_values.go | 2 +- sim/warrior/fury/TestFury.results | 2416 ++++++++--------- sim/warrior/fury/death_wish.go | 12 +- sim/warrior/fury/fury_test.go | 13 +- .../individual_sim_ui/settings_tab.ts | 54 +- ui/core/individual_sim_ui.tsx | 3 +- ui/warrior/fury/apls/smf.apl.json | 254 +- ui/warrior/fury/apls/tg.apl.json | 268 +- .../gear_sets/p3_fury_smf_item_swap.gear.json | 71 + .../gear_sets/p3_fury_tg_item_swap.gear.json | 75 + ui/warrior/fury/inputs.ts | 6 - ui/warrior/fury/presets.ts | 6 +- ui/warrior/fury/sim.ts | 2 +- 14 files changed, 1475 insertions(+), 1709 deletions(-) create mode 100644 ui/warrior/fury/gear_sets/p3_fury_smf_item_swap.gear.json create mode 100644 ui/warrior/fury/gear_sets/p3_fury_tg_item_swap.gear.json diff --git a/proto/warrior.proto b/proto/warrior.proto index cd023f01d8..1a22b3915b 100644 --- a/proto/warrior.proto +++ b/proto/warrior.proto @@ -137,7 +137,7 @@ message FuryWarrior { WarriorOptions class_options = 1; bool stance_snapshot = 2; WarriorSyncType sync_type = 3; - int32 prepull_mastery = 4; + int32 prepull_mastery = 4 [deprecated=true]; // Use Item Swap sets instead } Options options = 1; } diff --git a/sim/shaman/apl_values.go b/sim/shaman/apl_values.go index bb9a128af2..154df4e009 100644 --- a/sim/shaman/apl_values.go +++ b/sim/shaman/apl_values.go @@ -75,7 +75,7 @@ func (value *APLValueShamanCanSnapshotStrongerFireElemental) GetBool(sim *core.S shaman := value.shaman if shaman.FireElemental.IsEnabled() { - simulatedStats := shaman.fireElementalStatInheritance(0, 0)(shaman.GetStats()) + simulatedStats := shaman.fireElementalStatInheritance()(shaman.GetStats()) potentialFireElementalSpellPower := simulatedStats[stats.SpellPower] currentFireElementalSpellPower := shaman.FireElemental.GetPet().GetInheritedStats()[stats.SpellPower] return potentialFireElementalSpellPower > currentFireElementalSpellPower diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index a5c1c0600c..160a918e50 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -1,19 +1,19 @@ character_stats_results: { key: "TestFury-CharacterStats-Default" value: { - final_stats: 6128.7975 + final_stats: 8586.27 final_stats: 728.7 - final_stats: 6956.25 + final_stats: 8968.05 final_stats: 55.65 final_stats: 84 - final_stats: 1370 - final_stats: 2630 - final_stats: 660 - final_stats: 783 + final_stats: 1438 + final_stats: 3067 + final_stats: 574 + final_stats: 781 final_stats: 0 - final_stats: 1603.47533 - final_stats: 457 - final_stats: 15219.114 + final_stats: 2266.9929 + final_stats: 886 + final_stats: 21117.048 final_stats: 209 final_stats: 0 final_stats: 0 @@ -23,3476 +23,3476 @@ character_stats_results: { final_stats: 0 final_stats: 0 final_stats: 0 - final_stats: 21168 + final_stats: 22327 final_stats: 0 - final_stats: 140412.5 + final_stats: 168577.7 final_stats: 0 final_stats: 326 - final_stats: 14.40632 - final_stats: 13.37293 - final_stats: 24.65746 - final_stats: 19.66979 + final_stats: 14.97248 + final_stats: 14.0367 + final_stats: 27.09498 + final_stats: 22.10731 final_stats: 5 } } dps_results: { key: "TestFury-AllItems-AgileShadowspiritDiamond" value: { - dps: 31362.70866 - tps: 26190.95132 + dps: 48097.35275 + tps: 38529.92403 } } dps_results: { key: "TestFury-AllItems-AgonyandTorment" value: { - dps: 29508.98861 - tps: 24665.74146 + dps: 33191.88547 + tps: 27428.58305 } } dps_results: { key: "TestFury-AllItems-Althor'sAbacus-50366" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 29837.91559 - tps: 24713.99685 + dps: 45716.52686 + tps: 36139.47511 } } dps_results: { key: "TestFury-AllItems-Anhuur'sHymnal-55889" value: { - dps: 29312.34024 - tps: 24318.34055 + dps: 45381.2326 + tps: 36249.28727 } } dps_results: { key: "TestFury-AllItems-Anhuur'sHymnal-56407" value: { - dps: 29540.06114 - tps: 24493.39325 + dps: 45674.59775 + tps: 36538.51772 } } dps_results: { key: "TestFury-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 31114.55069 - tps: 25928.37532 - } -} -dps_results: { - key: "TestFury-AllItems-ApparatusofKhaz'goroth-69113" - value: { - dps: 31671.135 - tps: 26332.48921 + dps: 47454.16209 + tps: 38000.76641 } } dps_results: { key: "TestFury-AllItems-ArrowofTime-72897" value: { - dps: 30079.31814 - tps: 24931.03221 + dps: 46221.85908 + tps: 37148.72421 } } dps_results: { key: "TestFury-AllItems-AustereShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-BaubleofTrueBlood-50726" value: { - dps: 28663.09175 - tps: 23757.76147 - hps: 98.20883 + dps: 44852.98511 + tps: 35790.47192 + hps: 99.68552 } } dps_results: { key: "TestFury-AllItems-BedrockTalisman-58182" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-BellofEnragingResonance-59326" value: { - dps: 29503.47937 - tps: 24399.67664 + dps: 45825.45658 + tps: 36533.86587 } } dps_results: { key: "TestFury-AllItems-BellofEnragingResonance-65053" value: { - dps: 29633.21471 - tps: 24420.88256 + dps: 45790.08766 + tps: 36529.9737 } } dps_results: { key: "TestFury-AllItems-BindingPromise-67037" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-BlackBruise-50692" value: { - dps: 29687.79376 - tps: 24873.2577 + dps: 37729.35912 + tps: 30842.71277 } } dps_results: { key: "TestFury-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 29576.94297 - tps: 24397.64987 + dps: 45126.7962 + tps: 35837.77097 } } dps_results: { key: "TestFury-AllItems-BloodofIsiset-55995" value: { - dps: 29258.7245 - tps: 24049.37292 + dps: 45308.63479 + tps: 35879.51874 } } dps_results: { key: "TestFury-AllItems-BloodofIsiset-56414" value: { - dps: 29259.98862 - tps: 24065.42983 + dps: 45445.81513 + tps: 35966.72781 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 29301.21524 - tps: 24372.24495 + dps: 45250.63319 + tps: 36213.05081 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 30006.91353 - tps: 24862.29196 + dps: 45949.87701 + tps: 36791.36256 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 29456.50564 - tps: 24362.79195 + dps: 45763.83294 + tps: 36511.54776 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 29366.71496 - tps: 24302.98913 + dps: 45336.9973 + tps: 36117.45183 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 29791.54193 - tps: 24705.05425 + dps: 46131.13681 + tps: 36834.11423 } } dps_results: { key: "TestFury-AllItems-Bone-LinkFetish-77210" value: { - dps: 31874.98893 - tps: 26568.99845 + dps: 48441.81741 + tps: 38935.31639 } } dps_results: { key: "TestFury-AllItems-Bone-LinkFetish-77982" value: { - dps: 31502.80243 - tps: 26354.74088 + dps: 48098.74946 + tps: 38683.19647 } } dps_results: { key: "TestFury-AllItems-Bone-LinkFetish-78002" value: { - dps: 32285.10014 - tps: 26921.58302 + dps: 48942.45015 + tps: 39500.83509 } } dps_results: { key: "TestFury-AllItems-BottledLightning-66879" value: { - dps: 29084.50595 - tps: 24116.90228 + dps: 44962.65567 + tps: 35931.55963 } } dps_results: { key: "TestFury-AllItems-BottledWishes-77114" value: { - dps: 29489.97618 - tps: 24518.30899 + dps: 45318.35401 + tps: 36184.87579 } } dps_results: { key: "TestFury-AllItems-BracingShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25189.61698 + dps: 47193.11327 + tps: 37034.49925 } } dps_results: { key: "TestFury-AllItems-Brawler'sTrophy-232015" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-BurningShadowspiritDiamond" value: { - dps: 31183.42502 - tps: 26039.05768 + dps: 47890.91298 + tps: 38330.91022 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 29754.95793 - tps: 24657.24786 + dps: 45517.53621 + tps: 36470.76564 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 30831.27669 - tps: 25499.3377 + dps: 46733.71877 + tps: 37429.59612 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 30009.21573 - tps: 24841.92038 + dps: 45779.72378 + tps: 36534.60045 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 30652.087 - tps: 25382.7998 + dps: 47189.91902 + tps: 37697.30786 } } dps_results: { key: "TestFury-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 31383.47536 - tps: 26232.2793 + dps: 48081.34101 + tps: 38510.91372 } } dps_results: { key: "TestFury-AllItems-ColossalDragonplateArmor" value: { - dps: 24958.33847 - tps: 20291.55388 + dps: 37249.02777 + tps: 28248.28158 } } dps_results: { key: "TestFury-AllItems-ColossalDragonplateBattlegear" value: { - dps: 28775.1206 - tps: 23697.50447 + dps: 42378.7632 + tps: 33072.96765 } } dps_results: { key: "TestFury-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 30401.44245 - tps: 25166.60036 + dps: 46860.9912 + tps: 37403.65505 } } dps_results: { key: "TestFury-AllItems-CoreofRipeness-58184" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-CorpseTongueCoin-50349" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 32011.66419 - tps: 26652.1188 + dps: 48328.69184 + tps: 38673.12446 } } dps_results: { key: "TestFury-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 31264.28652 - tps: 25903.90061 + dps: 47932.91825 + tps: 38286.44999 } } dps_results: { key: "TestFury-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 32406.77719 - tps: 26888.72493 + dps: 48715.10356 + tps: 38867.97633 } } dps_results: { key: "TestFury-AllItems-CrushingWeight-59506" value: { - dps: 31071.50665 - tps: 25765.21671 + dps: 47049.9351 + tps: 37796.31517 } } dps_results: { key: "TestFury-AllItems-CrushingWeight-65118" value: { - dps: 31195.79183 - tps: 25806.55696 + dps: 47078.45881 + tps: 37710.33694 } } dps_results: { key: "TestFury-AllItems-CunningoftheCruel-77208" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-CunningoftheCruel-77980" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-CunningoftheCruel-78000" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 30688.65484 - tps: 25508.65222 + dps: 46292.82302 + tps: 37121.43636 } } dps_results: { key: "TestFury-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 30025.34453 - tps: 24886.92361 + dps: 46003.15473 + tps: 36689.51396 } } dps_results: { key: "TestFury-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 29325.14003 - tps: 24140.6198 + dps: 45392.34541 + tps: 35855.90697 } } dps_results: { key: "TestFury-AllItems-Deathbringer'sWill-50363" value: { - dps: 29786.90679 - tps: 24697.30119 + dps: 45948.6787 + tps: 36741.52644 } } dps_results: { key: "TestFury-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 30972.964 - tps: 25894.14392 + dps: 47376.56056 + tps: 37963.83211 } } dps_results: { key: "TestFury-AllItems-DislodgedForeignObject-50348" value: { - dps: 29138.10659 - tps: 24170.07729 + dps: 45125.5039 + tps: 36009.77915 } } dps_results: { key: "TestFury-AllItems-Dwyer'sCaber-70141" value: { - dps: 30961.60468 - tps: 25748.06881 + dps: 47063.20635 + tps: 37633.05297 } } dps_results: { key: "TestFury-AllItems-EarthenBattleplate" value: { - dps: 24579.66228 - tps: 20069.95089 + dps: 35724.63808 + tps: 27609.83912 } } dps_results: { key: "TestFury-AllItems-EarthenWarplate" value: { - dps: 27973.82953 - tps: 23200.32838 + dps: 40709.69298 + tps: 31917.47753 } } dps_results: { key: "TestFury-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-EmberShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 30972.964 - tps: 25894.14392 + dps: 47376.56056 + tps: 37963.83211 } } dps_results: { key: "TestFury-AllItems-EssenceoftheCyclone-59473" value: { - dps: 30332.13784 - tps: 25169.67333 + dps: 46477.71206 + tps: 37122.15793 } } dps_results: { key: "TestFury-AllItems-EssenceoftheCyclone-65140" value: { - dps: 30558.75012 - tps: 25440.92481 + dps: 46473.27777 + tps: 37130.21008 } } dps_results: { key: "TestFury-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 30881.9327 - tps: 25421.10473 + dps: 46401.29221 + tps: 36680.7088 } } dps_results: { key: "TestFury-AllItems-EternalShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-EyeofUnmaking-77200" value: { - dps: 31754.77506 - tps: 26351.33672 + dps: 48451.51254 + tps: 38732.32909 } } dps_results: { key: "TestFury-AllItems-EyeofUnmaking-77977" value: { - dps: 31403.44742 - tps: 26056.61226 + dps: 48042.58897 + tps: 38398.02714 } } dps_results: { key: "TestFury-AllItems-EyeofUnmaking-77997" value: { - dps: 32141.23548 - tps: 26675.53363 + dps: 48901.32847 + tps: 39100.06123 } } dps_results: { key: "TestFury-AllItems-FallofMortality-59500" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-FallofMortality-65124" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-FieryQuintessence-69000" value: { - dps: 28534.82041 - tps: 23657.4591 + dps: 44650.55653 + tps: 35668.10282 } } dps_results: { key: "TestFury-AllItems-Figurine-DemonPanther-52199" value: { - dps: 29831.45297 - tps: 24725.52367 + dps: 45917.01855 + tps: 36811.64746 } } dps_results: { key: "TestFury-AllItems-Figurine-DreamOwl-52354" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-Figurine-KingofBoars-52351" value: { - dps: 30430.74082 - tps: 24968.29777 + dps: 46478.54022 + tps: 36972.69839 } } dps_results: { key: "TestFury-AllItems-FireoftheDeep-77117" value: { - dps: 29508.55269 - tps: 24184.00679 + dps: 45584.83118 + tps: 35886.70791 } } dps_results: { key: "TestFury-AllItems-FleetShadowspiritDiamond" value: { - dps: 30963.81597 - tps: 25781.61903 + dps: 47284.12826 + tps: 37818.68836 } } dps_results: { key: "TestFury-AllItems-FluidDeath-58181" value: { - dps: 30274.07371 - tps: 25045.54993 + dps: 46557.24874 + tps: 37233.71933 } } dps_results: { key: "TestFury-AllItems-ForlornShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 + } +} +dps_results: { + key: "TestFury-AllItems-FuryofAngerforge-59461" + value: { + dps: 47367.64171 + tps: 37767.00574 } } dps_results: { key: "TestFury-AllItems-GaleofShadows-56138" value: { - dps: 29420.86165 - tps: 24399.58922 + dps: 45222.44781 + tps: 36207.72829 } } dps_results: { key: "TestFury-AllItems-GaleofShadows-56462" value: { - dps: 29222.62562 - tps: 24193.36194 + dps: 45490.65595 + tps: 36442.49217 } } dps_results: { key: "TestFury-AllItems-GearDetector-61462" value: { - dps: 29468.25362 - tps: 24353.11334 + dps: 45448.21492 + tps: 36355.39336 } } dps_results: { key: "TestFury-AllItems-Gladiator'sBattlegear" value: { - dps: 24337.59287 - tps: 19924.78649 + dps: 35793.68622 + tps: 27972.3507 } } dps_results: { key: "TestFury-AllItems-GlowingTwilightScale-54589" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-GraceoftheHerald-55266" value: { - dps: 29209.6321 - tps: 24259.71274 + dps: 45661.06506 + tps: 36437.1685 } } dps_results: { key: "TestFury-AllItems-GraceoftheHerald-56295" value: { - dps: 29645.57409 - tps: 24526.67675 + dps: 45744.35219 + tps: 36585.94549 } } dps_results: { key: "TestFury-AllItems-Gurthalak,VoiceoftheDeeps-77191" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-Gurthalak,VoiceoftheDeeps-78478" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-Gurthalak,VoiceoftheDeeps-78487" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-HarmlightToken-63839" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 29810.33495 - tps: 24562.73441 + dps: 46100.80585 + tps: 36659.32965 } } dps_results: { key: "TestFury-AllItems-HeartofIgnacious-59514" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-HeartofIgnacious-65110" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-HeartofRage-59224" value: { - dps: 30748.25965 - tps: 25665.07909 + dps: 46585.26545 + tps: 37274.44558 + } +} +dps_results: { + key: "TestFury-AllItems-HeartofRage-65072" + value: { + dps: 46787.79278 + tps: 37449.26296 } } dps_results: { key: "TestFury-AllItems-HeartofSolace-55868" value: { - dps: 30576.32774 - tps: 25444.23728 + dps: 46569.36096 + tps: 37370.24067 } } dps_results: { key: "TestFury-AllItems-HeartofSolace-56393" value: { - dps: 30530.5604 - tps: 25380.81439 + dps: 47034.75852 + tps: 37774.99732 } } dps_results: { key: "TestFury-AllItems-HeartofThunder-55845" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-HeartofThunder-56370" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-HeartoftheVile-66969" value: { - dps: 29439.21409 - tps: 24404.22233 + dps: 45573.29855 + tps: 36282.53179 } } dps_results: { key: "TestFury-AllItems-Heartpierce-50641" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 30972.964 - tps: 25894.14392 + dps: 47376.56056 + tps: 37963.83211 } } dps_results: { key: "TestFury-AllItems-ImpatienceofYouth-62464" value: { - dps: 30660.55328 - tps: 25182.92436 + dps: 46510.56311 + tps: 36956.47379 } } dps_results: { key: "TestFury-AllItems-ImpatienceofYouth-62469" value: { - dps: 30660.55328 - tps: 25182.92436 + dps: 46510.56311 + tps: 36956.47379 } } dps_results: { key: "TestFury-AllItems-ImpetuousQuery-55881" value: { - dps: 29258.7245 - tps: 24049.37292 + dps: 45308.63479 + tps: 35879.51874 } } dps_results: { key: "TestFury-AllItems-ImpetuousQuery-56406" value: { - dps: 29259.98862 - tps: 24065.42983 + dps: 45445.81513 + tps: 35966.72781 } } dps_results: { key: "TestFury-AllItems-IndomitablePride-77211" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-IndomitablePride-77983" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-IndomitablePride-78003" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 30060.50751 - tps: 25021.61746 + dps: 45686.36536 + tps: 36787.78311 } } dps_results: { key: "TestFury-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 29864.89172 - tps: 24807.40115 + dps: 45549.12856 + tps: 36550.66453 } } dps_results: { key: "TestFury-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 30374.68313 - tps: 25262.86487 + dps: 45829.92046 + tps: 36871.26348 } } dps_results: { key: "TestFury-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 28975.95837 - tps: 23883.75966 + dps: 44786.60966 + tps: 35531.76956 } } dps_results: { key: "TestFury-AllItems-JarofAncientRemedies-59354" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-JarofAncientRemedies-65029" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-JawsofDefeat-68926" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-JawsofDefeat-69111" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-JujuofNimbleness-63840" value: { - dps: 29576.94297 - tps: 24397.64987 + dps: 45126.7962 + tps: 35837.77097 } } dps_results: { key: "TestFury-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 29794.41634 - tps: 24729.81983 + dps: 45958.59488 + tps: 36881.83758 } } dps_results: { key: "TestFury-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 29915.96536 - tps: 24840.63125 + dps: 46456.40984 + tps: 37154.5693 } } dps_results: { key: "TestFury-AllItems-KiroptyricSigil-77113" value: { - dps: 30258.62861 - tps: 25186.48529 + dps: 46388.47715 + tps: 37179.07189 } } dps_results: { key: "TestFury-AllItems-KvaldirBattleStandard-59685" value: { - dps: 29709.80359 - tps: 24630.25702 + dps: 45347.13065 + tps: 36298.58157 } } dps_results: { key: "TestFury-AllItems-KvaldirBattleStandard-59689" value: { - dps: 29709.80359 - tps: 24630.25702 + dps: 45347.13065 + tps: 36298.58157 } } dps_results: { key: "TestFury-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 29205.38986 - tps: 24275.76374 + dps: 44680.86353 + tps: 35596.87874 } } dps_results: { key: "TestFury-AllItems-LastWord-50708" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-LeadenDespair-55816" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-LeadenDespair-56347" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-LeftEyeofRajh-56102" value: { - dps: 29938.39621 - tps: 24910.93129 + dps: 45497.40846 + tps: 36341.76133 } } dps_results: { key: "TestFury-AllItems-LeftEyeofRajh-56427" value: { - dps: 29955.63342 - tps: 24868.60883 + dps: 45506.75061 + tps: 36473.90715 } } dps_results: { key: "TestFury-AllItems-LicensetoSlay-58180" value: { - dps: 30999.82835 - tps: 25629.69314 + dps: 47625.35643 + tps: 38084.03207 } } dps_results: { key: "TestFury-AllItems-MagnetiteMirror-55814" value: { - dps: 30096.12363 - tps: 25019.23594 + dps: 45374.02237 + tps: 36209.43171 } } dps_results: { key: "TestFury-AllItems-MagnetiteMirror-56345" value: { - dps: 30367.59639 - tps: 25254.21347 + dps: 45646.85711 + tps: 36430.86318 } } dps_results: { key: "TestFury-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-MarkofKhardros-56132" value: { - dps: 29823.67077 - tps: 24599.00046 + dps: 45617.86361 + tps: 36050.06103 } } dps_results: { key: "TestFury-AllItems-MarkofKhardros-56458" value: { - dps: 29781.10455 - tps: 24562.92425 + dps: 45751.10456 + tps: 36094.12235 } } dps_results: { key: "TestFury-AllItems-MatrixRestabilizer-68994" value: { - dps: 30520.18073 - tps: 25366.95484 + dps: 46855.06941 + tps: 37410.35308 } } dps_results: { key: "TestFury-AllItems-MatrixRestabilizer-69150" value: { - dps: 30768.97191 - tps: 25597.51276 + dps: 47189.07384 + tps: 37695.1828 } } dps_results: { key: "TestFury-AllItems-MightoftheOcean-55251" value: { - dps: 29733.93207 - tps: 24713.89282 + dps: 45410.4877 + tps: 36221.47752 } } dps_results: { key: "TestFury-AllItems-MightoftheOcean-56285" value: { - dps: 30449.19539 - tps: 25274.13824 + dps: 46501.04756 + tps: 37337.1099 } } dps_results: { key: "TestFury-AllItems-MirrorofBrokenImages-62466" value: { - dps: 29325.14003 - tps: 24140.6198 + dps: 45392.34541 + tps: 35855.90697 } } dps_results: { key: "TestFury-AllItems-MirrorofBrokenImages-62471" value: { - dps: 29325.14003 - tps: 24140.6198 + dps: 45392.34541 + tps: 35855.90697 } } dps_results: { key: "TestFury-AllItems-MithrilStopwatch-232013" value: { - dps: 29456.50564 - tps: 24362.79195 + dps: 45763.83294 + tps: 36511.54776 } } dps_results: { key: "TestFury-AllItems-MoltenGiantBattleplate" value: { - dps: 25804.94758 - tps: 20984.00633 + dps: 38191.62692 + tps: 29206.09131 } } dps_results: { key: "TestFury-AllItems-MoltenGiantWarplate" value: { - dps: 29902.20637 - tps: 25006.66108 + dps: 43441.20981 + tps: 34560.26435 } } dps_results: { key: "TestFury-AllItems-MoonwellChalice-70142" value: { - dps: 29321.92182 - tps: 24118.86591 + dps: 46356.79179 + tps: 36783.12271 } } dps_results: { key: "TestFury-AllItems-MoonwellPhial-70143" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-NecromanticFocus-68982" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-NecromanticFocus-69139" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-Oremantle'sFavor-61448" value: { - dps: 29781.95405 - tps: 24673.53578 + dps: 45786.52984 + tps: 36572.67898 } } dps_results: { key: "TestFury-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 29354.28036 - tps: 24337.99148 + dps: 45560.84013 + tps: 36464.91648 } } dps_results: { key: "TestFury-AllItems-PorcelainCrab-55237" value: { - dps: 28980.43661 - tps: 23918.50708 + dps: 44966.05254 + tps: 35657.02622 } } dps_results: { key: "TestFury-AllItems-PorcelainCrab-56280" value: { - dps: 29138.54683 - tps: 23988.62299 + dps: 45602.24236 + tps: 36075.07028 } } dps_results: { key: "TestFury-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 30778.25812 - tps: 25703.5839 + dps: 47193.11327 + tps: 37790.17572 } } dps_results: { key: "TestFury-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 30045.6412 - tps: 24947.57431 + dps: 46435.81567 + tps: 37393.63288 } } dps_results: { key: "TestFury-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 30350.78911 - tps: 25308.3341 + dps: 46600.89077 + tps: 37474.1247 } } dps_results: { key: "TestFury-AllItems-Rainsong-55854" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Rainsong-56377" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 28640.67399 - tps: 23929.74375 + dps: 36766.16546 + tps: 30134.10648 } } dps_results: { key: "TestFury-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 29023.25254 - tps: 24270.50531 + dps: 37221.57903 + tps: 30528.6966 } } dps_results: { key: "TestFury-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 28300.77194 - tps: 23626.99247 + dps: 36361.53984 + tps: 29783.52128 } } dps_results: { key: "TestFury-AllItems-ReflectionoftheLight-77115" value: { - dps: 28493.24787 - tps: 23618.38727 + dps: 44536.02995 + tps: 35529.32074 } } dps_results: { key: "TestFury-AllItems-ResolveofUndying-77201" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ResolveofUndying-77978" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ResolveofUndying-77998" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 31183.42502 - tps: 26039.05768 + dps: 47890.91298 + tps: 38330.91022 } } dps_results: { key: "TestFury-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 30150.37996 - tps: 25128.15069 + dps: 46513.07248 + tps: 37198.7611 } } dps_results: { key: "TestFury-AllItems-RightEyeofRajh-56100" value: { - dps: 30440.94995 - tps: 25302.45573 + dps: 46695.50064 + tps: 37349.30754 } } dps_results: { key: "TestFury-AllItems-RightEyeofRajh-56431" value: { - dps: 30824.81789 - tps: 25598.52372 + dps: 47133.8792 + tps: 37747.92656 } } dps_results: { key: "TestFury-AllItems-RosaryofLight-72901" value: { - dps: 31405.94333 - tps: 26117.96106 + dps: 47606.94983 + tps: 38068.72461 } } dps_results: { key: "TestFury-AllItems-RottingSkull-77116" value: { - dps: 31476.94262 - tps: 26098.87255 + dps: 47791.10752 + tps: 38279.21591 } } dps_results: { key: "TestFury-AllItems-RuneofZeth-68998" value: { - dps: 29544.85741 - tps: 24369.69022 + dps: 45936.77745 + tps: 36723.03367 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 29647.23056 - tps: 24588.88421 + dps: 45363.42768 + tps: 36276.10519 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 29684.98281 - tps: 24602.16297 + dps: 45456.70856 + tps: 36400.13717 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 30473.6553 - tps: 25222.97748 + dps: 46393.67618 + tps: 37152.7206 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 30579.10776 - tps: 25304.46831 + dps: 46493.94515 + tps: 37234.36338 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 29658.04844 - tps: 24547.45222 + dps: 45578.7991 + tps: 36401.02691 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 29775.08191 - tps: 24659.16762 + dps: 45800.57302 + tps: 36576.21051 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 30299.43064 - tps: 25098.95241 + dps: 46758.4224 + tps: 37330.37937 } } dps_results: { key: "TestFury-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 30416.78936 - tps: 25199.73922 + dps: 46889.49063 + tps: 37447.68743 } } dps_results: { key: "TestFury-AllItems-ScalesofLife-68915" value: { - dps: 28663.09175 - tps: 23757.76147 - hps: 319.07818 + dps: 44852.98511 + tps: 35790.47192 + hps: 320.63097 } } dps_results: { key: "TestFury-AllItems-ScalesofLife-69109" value: { - dps: 28663.09175 - tps: 23757.76147 - hps: 359.9172 + dps: 44852.98511 + tps: 35790.47192 + hps: 361.66873 } } dps_results: { key: "TestFury-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 29582.34405 - tps: 24477.18357 + dps: 45882.0267 + tps: 36446.46996 } } dps_results: { key: "TestFury-AllItems-SeaStar-55256" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-SeaStar-56290" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-Shadowmourne-49623" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-ShardofWoe-60233" value: { - dps: 29384.15077 - tps: 24370.43803 + dps: 45289.93926 + tps: 36352.47574 } } dps_results: { key: "TestFury-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 30205.79916 - tps: 25043.22737 + dps: 46180.45721 + tps: 37060.86592 } } dps_results: { key: "TestFury-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Skardyn'sGrace-56115" value: { - dps: 29394.20325 - tps: 24224.93656 + dps: 45500.17662 + tps: 36163.96664 } } dps_results: { key: "TestFury-AllItems-Skardyn'sGrace-56440" value: { - dps: 29707.63117 - tps: 24495.61326 + dps: 45644.34138 + tps: 36185.24021 } } dps_results: { key: "TestFury-AllItems-Sorrowsong-55879" value: { - dps: 29258.7245 - tps: 24049.37292 + dps: 45308.63479 + tps: 35879.51874 } } dps_results: { key: "TestFury-AllItems-Sorrowsong-56400" value: { - dps: 29259.98862 - tps: 24065.42983 + dps: 45445.81513 + tps: 35966.72781 } } dps_results: { key: "TestFury-AllItems-Soul'sAnguish-66994" value: { - dps: 29769.13483 - tps: 24751.32147 + dps: 46167.7346 + tps: 36978.15185 } } dps_results: { key: "TestFury-AllItems-SoulCasket-58183" value: { - dps: 29125.00088 - tps: 24005.84037 + dps: 45103.32435 + tps: 35830.76166 } } dps_results: { key: "TestFury-AllItems-Souldrinker-77193" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-Souldrinker-78479" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-Souldrinker-78488" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 48121.59419 + tps: 38519.84985 } } dps_results: { key: "TestFury-AllItems-SoulshifterVortex-77206" value: { - dps: 29578.67457 - tps: 24164.188 + dps: 44681.82937 + tps: 34588.58021 } } dps_results: { key: "TestFury-AllItems-SoulshifterVortex-77970" value: { - dps: 29335.98034 - tps: 24005.51592 + dps: 44887.23954 + tps: 34792.87263 } } dps_results: { key: "TestFury-AllItems-SoulshifterVortex-77990" value: { - dps: 29529.92925 - tps: 24034.54665 + dps: 45049.88086 + tps: 34708.85319 } } dps_results: { key: "TestFury-AllItems-SpidersilkSpindle-68981" value: { - dps: 29547.92044 - tps: 24259.89393 + dps: 45542.53108 + tps: 35865.85062 } } dps_results: { key: "TestFury-AllItems-SpidersilkSpindle-69138" value: { - dps: 29438.25767 - tps: 24148.0935 + dps: 45540.73 + tps: 35918.6594 } } dps_results: { key: "TestFury-AllItems-StarcatcherCompass-77202" value: { - dps: 30852.13568 - tps: 25727.04282 + dps: 46778.69321 + tps: 37842.04354 } } dps_results: { key: "TestFury-AllItems-StarcatcherCompass-77973" value: { - dps: 30721.81276 - tps: 25499.93033 + dps: 46064.00042 + tps: 36925.59841 } } dps_results: { key: "TestFury-AllItems-StarcatcherCompass-77993" value: { - dps: 31221.59587 - tps: 26048.90512 + dps: 47168.78164 + tps: 38153.95986 } } dps_results: { key: "TestFury-AllItems-StayofExecution-68996" value: { - dps: 28616.42988 - tps: 23784.11087 + dps: 44502.00138 + tps: 35551.4526 } } dps_results: { key: "TestFury-AllItems-Stonemother'sKiss-61411" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-StumpofTime-62465" value: { - dps: 29621.70686 - tps: 24477.42117 + dps: 46028.07079 + tps: 36776.73215 } } dps_results: { key: "TestFury-AllItems-StumpofTime-62470" value: { - dps: 29621.70686 - tps: 24477.42117 + dps: 46028.07079 + tps: 36776.73215 } } dps_results: { key: "TestFury-AllItems-SymbioticWorm-59332" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-SymbioticWorm-65048" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 30067.74653 - tps: 24959.53123 + dps: 46326.30772 + tps: 37112.20102 } } dps_results: { key: "TestFury-AllItems-TearofBlood-55819" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-TearofBlood-56351" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 29188.31483 - tps: 23988.99549 + dps: 45178.81097 + tps: 35870.23709 } } dps_results: { key: "TestFury-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 29259.98862 - tps: 24065.42983 + dps: 45445.81513 + tps: 35966.72781 } } dps_results: { key: "TestFury-AllItems-TheHungerer-68927" value: { - dps: 30169.68256 - tps: 24995.04242 + dps: 46728.97671 + tps: 37623.6916 } } dps_results: { key: "TestFury-AllItems-TheHungerer-69112" value: { - dps: 30383.02694 - tps: 25235.56218 + dps: 46853.12097 + tps: 37493.70115 } } dps_results: { key: "TestFury-AllItems-Theralion'sMirror-59519" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Theralion'sMirror-65105" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Throngus'sFinger-56121" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Throngus'sFinger-56449" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Tia'sGrace-55874" value: { - dps: 29723.27031 - tps: 24494.03963 + dps: 46205.9448 + tps: 36588.11521 } } dps_results: { key: "TestFury-AllItems-Tia'sGrace-56394" value: { - dps: 29770.81573 - tps: 24548.27791 + dps: 46306.57016 + tps: 36723.03296 } } dps_results: { key: "TestFury-AllItems-TinyAbominationinaJar-50706" value: { - dps: 30044.75424 - tps: 24892.65637 + dps: 46708.89649 + tps: 37427.53166 } } dps_results: { key: "TestFury-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 27470.19012 - tps: 22815.78572 + dps: 43155.80856 + tps: 34286.21887 } } dps_results: { key: "TestFury-AllItems-UnheededWarning-59520" value: { - dps: 30081.40417 - tps: 24976.85065 + dps: 46207.09972 + tps: 36860.18658 } } dps_results: { key: "TestFury-AllItems-UnquenchableFlame-67101" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-UnsolvableRiddle-62463" value: { - dps: 29616.17256 - tps: 24488.69065 + dps: 45833.71584 + tps: 36460.52063 } } dps_results: { key: "TestFury-AllItems-UnsolvableRiddle-62468" value: { - dps: 29616.17256 - tps: 24488.69065 + dps: 45833.71584 + tps: 36460.52063 } } dps_results: { key: "TestFury-AllItems-UnsolvableRiddle-68709" value: { - dps: 29616.17256 - tps: 24488.69065 + dps: 45833.71584 + tps: 36460.52063 } } dps_results: { key: "TestFury-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 27545.36887 - tps: 22844.8808 + dps: 35443.89128 + tps: 28662.43281 } } dps_results: { key: "TestFury-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-Varo'then'sBrooch-72899" value: { - dps: 30597.04411 - tps: 25103.4301 + dps: 46837.44133 + tps: 36846.86716 } } dps_results: { key: "TestFury-AllItems-VeilofLies-72900" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-VesselofAcceleration-68995" value: { - dps: 31078.4026 - tps: 25709.68124 - } -} -dps_results: { - key: "TestFury-AllItems-VesselofAcceleration-69167" - value: { - dps: 31505.73358 - tps: 26042.55935 + dps: 47602.94362 + tps: 38038.88872 } } dps_results: { key: "TestFury-AllItems-VialofShadows-77207" value: { - dps: 30489.78779 - tps: 25256.21046 + dps: 46831.61376 + tps: 37469.81026 } } dps_results: { key: "TestFury-AllItems-VialofShadows-77979" value: { - dps: 30230.90279 - tps: 25073.10297 + dps: 46729.57491 + tps: 37448.81125 } } dps_results: { key: "TestFury-AllItems-VialofShadows-77999" value: { - dps: 30641.85414 - tps: 25478.15676 + dps: 47085.42804 + tps: 37947.9396 } } dps_results: { key: "TestFury-AllItems-VialofStolenMemories-59515" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-VialofStolenMemories-65109" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 29250.67103 - tps: 24164.96824 + dps: 45094.47377 + tps: 36044.0159 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 29477.5221 - tps: 24418.36468 + dps: 45251.38633 + tps: 36221.82669 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 28613.10708 - tps: 23785.19572 + dps: 44624.58282 + tps: 35712.25797 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 30084.85666 - tps: 24922.52432 + dps: 46023.98886 + tps: 36851.70722 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 30258.16549 - tps: 25056.45273 + dps: 46188.77873 + tps: 36985.88536 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 29685.279 - tps: 24548.01699 + dps: 45924.96213 + tps: 36581.84337 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 29538.15572 - tps: 24565.74052 + dps: 45249.01121 + tps: 36264.86325 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 29641.80582 - tps: 24479.68986 + dps: 45770.86095 + tps: 36493.11758 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 29263.80003 - tps: 24335.05903 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 29371.32019 - tps: 24133.82657 + dps: 45267.45315 + tps: 35725.47667 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 29532.99708 - tps: 24472.33928 + dps: 45588.70314 + tps: 36442.74762 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 29737.70506 - tps: 24595.61143 + dps: 45511.70122 + tps: 36330.14554 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 29969.76716 - tps: 24831.05935 + dps: 46380.42101 + tps: 37036.53433 } } dps_results: { key: "TestFury-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 30109.04384 - tps: 24950.83343 + dps: 46574.94966 + tps: 37194.56843 } } dps_results: { key: "TestFury-AllItems-Vishanka,JawsoftheEarth-78359" value: { - dps: 31025.55299 - tps: 25871.52766 + dps: 46851.14743 + tps: 37582.73854 } } dps_results: { key: "TestFury-AllItems-Vishanka,JawsoftheEarth-78471" value: { - dps: 31044.11331 - tps: 25881.41962 + dps: 46920.52085 + tps: 37614.40804 } } dps_results: { key: "TestFury-AllItems-Vishanka,JawsoftheEarth-78480" value: { - dps: 31029.05686 - tps: 25835.2588 + dps: 46832.07741 + tps: 37552.31918 } } dps_results: { key: "TestFury-AllItems-WillofUnbinding-77198" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-WillofUnbinding-77975" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-WillofUnbinding-77995" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-WitchingHourglass-55787" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-WitchingHourglass-56320" value: { - dps: 28663.09175 - tps: 23757.76147 + dps: 44852.98511 + tps: 35790.47192 } } dps_results: { key: "TestFury-AllItems-World-QuellerFocus-63842" value: { - dps: 28976.55216 - tps: 23866.68089 + dps: 45221.49499 + tps: 36014.10061 } } dps_results: { key: "TestFury-AllItems-WrathofUnchaining-77197" value: { - dps: 30117.74611 - tps: 24979.31221 + dps: 46573.01421 + tps: 37279.24311 } } dps_results: { key: "TestFury-AllItems-WrathofUnchaining-77974" value: { - dps: 30040.65399 - tps: 24844.82118 + dps: 46587.23883 + tps: 37266.0895 } } dps_results: { key: "TestFury-AllItems-WrathofUnchaining-77994" value: { - dps: 30542.02055 - tps: 25363.09978 + dps: 46811.27153 + tps: 37529.56382 } } dps_results: { key: "TestFury-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 28724.57846 - tps: 23665.26355 + dps: 44582.35603 + tps: 35273.45329 } } dps_results: { key: "TestFury-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 28724.57846 - tps: 23665.26355 + dps: 44582.35603 + tps: 35273.45329 } } dps_results: { key: "TestFury-Average-Default" value: { - dps: 31544.40776 - tps: 26258.4007 + dps: 48110.44976 + tps: 38475.46383 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 78693.06477 - tps: 85239.03132 + dps: 99211.02704 + tps: 107441.53918 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31382.1484 - tps: 26206.495 + dps: 39069.06232 + tps: 33029.49233 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39024.53233 - tps: 32141.10575 + dps: 52208.70003 + tps: 43104.12436 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 52884.69483 - tps: 58143.96969 + dps: 67420.70452 + tps: 73892.94365 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19394.72623 - tps: 15872.59549 + dps: 24189.02873 + tps: 19989.61546 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21383.2085 - tps: 16615.22376 + dps: 28265.65333 + tps: 22236.24281 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 78693.06477 - tps: 85239.03132 + dps: 99434.28356 + tps: 107683.99087 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30676.45062 - tps: 25124.69146 + dps: 39153.29374 + tps: 33104.40255 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38278.63547 - tps: 31273.11404 + dps: 52581.97479 + tps: 43438.11443 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 52884.69483 - tps: 58143.96969 + dps: 67549.02221 + tps: 74034.30858 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19140.17578 - tps: 15282.6725 + dps: 24230.24028 + tps: 20024.55654 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21026.71244 - tps: 16121.68287 + dps: 28450.71567 + tps: 22394.9859 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 64701.52823 - tps: 70597.06289 + dps: 99211.02704 + tps: 107441.53918 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 25282.06577 - tps: 21597.64181 + dps: 38436.40091 + tps: 31946.27358 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31836.06951 - tps: 26944.65622 + dps: 51053.0471 + tps: 42053.55589 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 43669.21919 - tps: 48375.40121 + dps: 67420.70452 + tps: 73892.94365 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15601.75658 - tps: 13170.09055 + dps: 23822.33706 + tps: 19328.60672 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17375.80323 - tps: 13898.70434 + dps: 28288.37552 + tps: 21982.88888 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 64701.52823 - tps: 70597.06289 + dps: 99434.28356 + tps: 107683.99087 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 25092.53109 - tps: 20995.1284 + dps: 38520.44791 + tps: 32020.40318 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31512.10073 - tps: 26276.30647 + dps: 51421.20328 + tps: 42380.88929 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 43669.21919 - tps: 48375.40121 + dps: 67549.02221 + tps: 74034.30858 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15523.84557 - tps: 12803.37777 + dps: 23863.37147 + tps: 19363.17854 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17022.93272 - tps: 13328.40022 + dps: 28472.81176 + tps: 22139.69787 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 114511.03749 - tps: 126105.51906 + dps: 82038.90917 + tps: 89483.40729 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38772.6654 - tps: 31694.1257 + dps: 31173.4777 + tps: 26965.24758 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 47258.4625 - tps: 37922.2232 + dps: 42320.07515 + tps: 35934.20183 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 79762.10669 - tps: 89061.37678 + dps: 55916.58576 + tps: 61786.12039 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24549.23034 - tps: 19573.35017 + dps: 19330.66615 + tps: 16522.61677 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27323.62392 - tps: 21026.16018 + dps: 22706.07966 + tps: 18235.9627 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 114511.03749 - tps: 126105.51906 + dps: 82225.15656 + tps: 89686.6483 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38279.27591 - tps: 30458.94345 + dps: 31242.60514 + tps: 27028.12266 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 46512.06752 - tps: 36869.72906 + dps: 42624.10597 + tps: 36212.20132 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 79762.10669 - tps: 89061.37678 + dps: 56022.53855 + tps: 61903.72232 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24162.90274 - tps: 18711.22394 + dps: 19364.03526 + tps: 16551.65477 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26730.00638 - tps: 20046.10733 + dps: 22852.68532 + tps: 18364.49279 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 93823.61277 - tps: 104186.03632 + dps: 82038.90917 + tps: 89483.40729 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30980.41742 - tps: 26053.64162 + dps: 31306.04576 + tps: 26479.41786 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38308.20478 - tps: 31648.55299 + dps: 41827.01654 + tps: 34971.48746 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65223.30803 - tps: 73553.23184 + dps: 55916.58576 + tps: 61786.12039 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19566.94341 - tps: 16196.16038 + dps: 19331.01771 + tps: 16034.51161 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21450.69344 - tps: 16976.57716 + dps: 22615.39749 + tps: 17881.24029 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 93823.61277 - tps: 104186.03632 + dps: 82225.15656 + tps: 89686.6483 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30947.77528 - tps: 25373.9413 + dps: 31375.46275 + tps: 26541.74698 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38097.70949 - tps: 30919.81473 + dps: 42126.27626 + tps: 35241.41099 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65223.30803 - tps: 73553.23184 + dps: 56022.53855 + tps: 61903.72232 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19546.18884 - tps: 15614.75216 + dps: 19364.12939 + tps: 16062.94103 } } dps_results: { - key: "TestFury-Settings-Troll-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21166.00023 - tps: 16084.23034 + dps: 22761.98844 + tps: 18007.79983 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 95379.72355 - tps: 103144.45622 + dps: 150302.42224 + tps: 165303.47722 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37385.16086 - tps: 31533.52785 + dps: 50032.54808 + tps: 41206.89482 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44742.91365 - tps: 36425.87503 + dps: 66001.52402 + tps: 53068.85469 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65014.38971 - tps: 71247.45392 + dps: 106141.39456 + tps: 118260.18406 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23401.00062 - tps: 19321.66567 + dps: 32046.12782 + tps: 25569.35157 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24682.55422 - tps: 19176.48991 + dps: 37124.75562 + tps: 28195.44144 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 95379.72355 - tps: 103144.45622 + dps: 150637.61668 + tps: 165671.4405 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 36805.00728 - tps: 30530.55904 + dps: 50142.45912 + tps: 41300.35434 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43722.09469 - tps: 35541.03871 + dps: 66475.95444 + tps: 53474.80222 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65014.38971 - tps: 71247.45392 + dps: 106343.79662 + tps: 118485.73189 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23037.6971 - tps: 18667.72443 + dps: 32102.52191 + tps: 25614.37191 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24761.88077 - tps: 19011.51001 + dps: 37372.10887 + tps: 28393.87433 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 79152.69681 - tps: 86213.72403 + dps: 150302.42224 + tps: 165303.47722 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29985.50917 - tps: 25908.51627 + dps: 50122.27803 + tps: 40111.824 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36260.10168 - tps: 30385.07808 + dps: 65463.2918 + tps: 52037.92917 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 53807.46982 - tps: 59454.65361 + dps: 106141.39456 + tps: 118260.18406 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18724.11089 - tps: 15953.46744 + dps: 32058.3287 + tps: 24996.73181 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19969.65004 - tps: 15809.64194 + dps: 36957.13924 + tps: 27360.41316 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 79152.69681 - tps: 86213.72403 + dps: 150637.61668 + tps: 165671.4405 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29843.41539 - tps: 25150.06317 + dps: 50231.00007 + tps: 40203.36918 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35837.76254 - tps: 29575.25087 + dps: 65934.0809 + tps: 52437.47908 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 53807.46982 - tps: 59454.65361 + dps: 106343.79662 + tps: 118485.73189 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18710.81967 - tps: 15513.80037 + dps: 32114.12017 + tps: 25040.30142 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19871.86914 - tps: 15514.06214 + dps: 37201.19732 + tps: 27553.15678 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 145275.83581 - tps: 160033.00108 + dps: 123990.74603 + tps: 137565.33663 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 47913.81717 - tps: 39345.78806 + dps: 40205.78337 + tps: 34142.47648 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 57280.10668 - tps: 45618.78991 + dps: 53101.52795 + tps: 44190.67531 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 102682.84397 - tps: 114447.17705 + dps: 87962.38947 + tps: 98717.01964 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31035.75009 - tps: 24762.75012 + dps: 25325.45217 + tps: 20987.86556 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32763.62585 - tps: 24662.00018 + dps: 29929.55143 + tps: 23732.9559 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 145275.83581 - tps: 160033.00108 + dps: 124266.45005 + tps: 137869.71969 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 48075.98111 - tps: 38455.02189 + dps: 40292.99608 + tps: 34218.19414 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 56932.00391 - tps: 44800.56217 + dps: 53487.34133 + tps: 44529.03393 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 102682.84397 - tps: 114447.17705 + dps: 88130.62745 + tps: 98906.09083 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31075.05411 - tps: 24261.31508 + dps: 25370.51427 + tps: 21025.0931 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32648.52758 - tps: 23997.81696 + dps: 30128.26434 + tps: 23898.75781 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 118758.91362 - tps: 131827.75298 + dps: 123990.74603 + tps: 137565.33663 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38541.78619 - tps: 32617.56216 + dps: 40490.87354 + tps: 33130.52675 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 45973.46851 - tps: 37937.91293 + dps: 53461.87743 + tps: 43192.39802 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 84888.07062 - tps: 95274.46808 + dps: 87962.38947 + tps: 98717.01964 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24534.3689 - tps: 20355.25604 + dps: 25650.79168 + tps: 20555.68076 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26371.34116 - tps: 20764.39141 + dps: 30151.61552 + tps: 23093.65722 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 118758.91362 - tps: 131827.75298 + dps: 124266.45005 + tps: 137869.71969 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38909.4808 - tps: 31739.51706 + dps: 40577.94843 + tps: 33204.90502 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 46178.39208 - tps: 36864.8601 + dps: 53848.54088 + tps: 43525.59161 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 84888.07062 - tps: 95274.46808 + dps: 88130.62745 + tps: 98906.09083 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24760.06194 - tps: 19843.70432 + dps: 25696.07725 + tps: 20592.26147 } } dps_results: { - key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26685.15236 - tps: 20258.41572 + dps: 30349.03274 + tps: 23254.5272 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 78679.40968 - tps: 85260.08197 + dps: 99757.03457 + tps: 108141.13011 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31356.36418 - tps: 26114.4519 + dps: 39025.02955 + tps: 32812.02114 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38447.19068 - tps: 31541.25 + dps: 51422.27984 + tps: 42300.02899 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 52888.21627 - tps: 58092.41796 + dps: 68387.62506 + tps: 75014.96339 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19632.26061 - tps: 16044.04585 + dps: 24150.98404 + tps: 19938.70794 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21221.11079 - tps: 16419.9736 + dps: 27918.96816 + tps: 21981.07812 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 78679.40968 - tps: 85260.08197 + dps: 99976.13937 + tps: 108379.47491 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30932.37521 - tps: 25304.04444 + dps: 39106.31618 + tps: 32884.19678 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37443.71977 - tps: 30490.66015 + dps: 51783.43795 + tps: 42622.16754 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 52888.21627 - tps: 58092.41796 + dps: 68511.82454 + tps: 75151.88376 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19144.67577 - tps: 15411.36837 + dps: 24190.76865 + tps: 19972.44476 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20648.9385 - tps: 15671.70157 + dps: 28098.23239 + tps: 22135.05335 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 65341.71119 - tps: 71267.30013 + dps: 99757.03457 + tps: 108141.13011 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 25434.55382 - tps: 21677.78472 + dps: 38327.31801 + tps: 31747.73627 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31331.35922 - tps: 26292.19887 + dps: 50640.4495 + tps: 41498.76027 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 44132.30459 - tps: 49006.81339 + dps: 68387.62506 + tps: 75014.96339 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15443.60959 - tps: 12988.11479 + dps: 24005.26155 + tps: 19483.35092 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17025.3615 - tps: 13593.48301 + dps: 27172.10353 + tps: 20975.16722 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 65341.71119 - tps: 71267.30013 + dps: 99976.13937 + tps: 108379.47491 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 24907.60574 - tps: 20703.81346 + dps: 38407.37719 + tps: 31818.1934 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31036.83026 - tps: 25867.66076 + dps: 50994.26836 + tps: 41811.73415 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 44132.30459 - tps: 49006.81339 + dps: 68511.82454 + tps: 75151.88376 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15497.17455 - tps: 12726.37082 + dps: 24044.4382 + tps: 19516.16279 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17091.25924 - tps: 13364.54833 + dps: 27346.13402 + tps: 21122.02944 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 113839.81603 - tps: 125250.55121 + dps: 82768.75209 + tps: 90319.85774 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38726.1082 - tps: 31430.40802 + dps: 31240.66184 + tps: 26962.23215 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 47273.3434 - tps: 37938.30195 + dps: 41478.22336 + tps: 35058.9092 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 80318.20528 - tps: 89571.84603 + dps: 56104.65224 + tps: 62050.47397 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24496.36411 - tps: 19406.91578 + dps: 19570.06581 + tps: 16697.41969 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26698.21521 - tps: 19887.37397 + dps: 22633.69829 + tps: 18113.03143 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 113839.81603 - tps: 125250.55121 + dps: 82950.15416 + tps: 90518.17866 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38049.02208 - tps: 30293.98006 + dps: 31306.45962 + tps: 27021.84798 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 46857.82039 - tps: 37211.96625 + dps: 41771.6663 + tps: 35326.74456 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 80318.20528 - tps: 89571.84603 + dps: 56207.64635 + tps: 62164.84459 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24369.13335 - tps: 18896.54801 + dps: 19602.45457 + tps: 16725.60712 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26184.36854 - tps: 19059.96737 + dps: 22777.17162 + tps: 18239.09801 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 93811.62367 - tps: 104108.99071 + dps: 82768.75209 + tps: 90319.85774 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30996.71511 - tps: 26091.55321 + dps: 31020.1061 + tps: 26177.09129 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38002.20962 - tps: 31442.43095 + dps: 41580.76715 + tps: 34813.91499 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65978.66162 - tps: 74279.83742 + dps: 56104.65224 + tps: 62050.47397 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19471.39739 - tps: 16044.65114 + dps: 19488.94795 + tps: 16080.99475 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21065.73784 - tps: 16500.94191 + dps: 22465.7055 + tps: 17647.74224 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 93811.62367 - tps: 104108.99071 + dps: 82950.15416 + tps: 90518.17866 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31087.12528 - tps: 25366.76458 + dps: 31086.87903 + tps: 26236.89234 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37400.66746 - tps: 30255.14097 + dps: 41872.55404 + tps: 35076.6089 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 65978.66162 - tps: 74279.83742 + dps: 56207.64635 + tps: 62164.84459 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19668.9618 - tps: 15713.96312 + dps: 19520.72308 + tps: 16108.03058 } } dps_results: { - key: "TestFury-Settings-Worgen-p1_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21079.82324 - tps: 16151.41531 + dps: 22607.95076 + tps: 17770.8409 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 95520.38199 - tps: 103506.58823 + dps: 149775.45575 + tps: 165126.33125 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37396.44621 - tps: 31326.29359 + dps: 49609.7778 + tps: 40625.00693 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44040.91871 - tps: 35724.6957 + dps: 65042.00485 + tps: 52012.40054 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 66004.8557 - tps: 72350.82495 + dps: 106335.57406 + tps: 118382.94203 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23446.06074 - tps: 19346.92534 + dps: 32047.09952 + tps: 25601.04217 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24568.97817 - tps: 19064.66154 + dps: 36633.71854 + tps: 27923.00885 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 95520.38199 - tps: 103506.58823 + dps: 150099.37892 + tps: 165482.93005 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 36692.16459 - tps: 30261.93013 + dps: 49712.4737 + tps: 40711.03891 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43430.09905 - tps: 35148.0828 + dps: 65497.58745 + tps: 52397.89902 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 66004.8557 - tps: 72350.82495 + dps: 106534.98067 + tps: 118605.55639 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23257.10907 - tps: 18857.08288 + dps: 32101.87101 + tps: 25644.49286 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 23948.17732 - tps: 18214.00564 + dps: 36872.37166 + tps: 28114.04705 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 79734.59265 - tps: 86946.13143 + dps: 149775.45575 + tps: 165126.33125 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29960.48075 - tps: 25741.65479 + dps: 49846.6356 + tps: 39800.73183 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35630.67879 - tps: 29718.08878 + dps: 64408.24912 + tps: 50581.50562 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 54133.4644 - tps: 59861.42775 + dps: 106335.57406 + tps: 118382.94203 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18951.2184 - tps: 16159.02697 + dps: 32258.40248 + tps: 25067.0997 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19940.71546 - tps: 15755.66312 + dps: 36668.74493 + tps: 27281.0588 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 79734.59265 - tps: 86946.13143 + dps: 150099.37892 + tps: 165482.93005 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29703.76762 - tps: 24959.64309 + dps: 49949.52053 + tps: 39885.99347 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35749.24422 - tps: 29569.05526 + dps: 64864.17833 + tps: 50962.62967 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 54133.4644 - tps: 59861.42775 + dps: 106534.98067 + tps: 118605.55639 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18881.05633 - tps: 15571.92273 + dps: 32312.85669 + tps: 25109.59371 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19729.76621 - tps: 15279.70578 + dps: 36905.28849 + tps: 27467.87124 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 143408.46955 - tps: 157939.67872 + dps: 123559.71053 + tps: 136944.95692 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 47584.82833 - tps: 38867.02191 + dps: 39443.45494 + tps: 33277.97974 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 56604.9483 - tps: 44911.0023 + dps: 52798.15735 + tps: 43795.0391 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 102970.93946 - tps: 114678.73337 + dps: 88288.13706 + tps: 99105.10789 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31054.77387 - tps: 24818.11285 + dps: 25176.12747 + tps: 20728.23232 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32365.89616 - tps: 24504.38656 + dps: 29382.74324 + tps: 22751.95932 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 143408.46955 - tps: 157939.67872 + dps: 123828.36109 + tps: 137242.05538 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 47991.67729 - tps: 38252.27582 + dps: 39526.26036 + tps: 33349.39316 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 56029.86679 - tps: 43523.2732 + dps: 53175.09113 + tps: 44125.35438 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 102970.93946 - tps: 114678.73337 + dps: 88452.93884 + tps: 99290.37326 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31194.86664 - tps: 24206.63522 + dps: 25220.64679 + tps: 20764.48368 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32360.34668 - tps: 23864.6315 + dps: 29573.45761 + tps: 22908.03352 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 119815.14486 - tps: 132833.14675 + dps: 123559.71053 + tps: 136944.95692 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38101.17878 - tps: 32100.15544 + dps: 40225.04449 + tps: 32979.70174 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 45758.75239 - tps: 37647.18487 + dps: 52148.12656 + tps: 42125.88227 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 85230.95225 - tps: 95664.74141 + dps: 88288.13706 + tps: 99105.10789 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24344.92236 - tps: 20107.49139 + dps: 25909.41891 + tps: 20666.82123 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 25824.4521 - tps: 19795.18556 + dps: 29240.22453 + tps: 22040.37661 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 119815.14486 - tps: 132833.14675 + dps: 123828.36109 + tps: 137242.05538 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38642.57657 - tps: 31617.99539 + dps: 40308.01473 + tps: 33049.91329 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 45298.15467 - tps: 36250.47905 + dps: 52512.44797 + tps: 42437.91852 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 85230.95225 - tps: 95664.74141 + dps: 88452.93884 + tps: 99290.37326 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25087.39343 - tps: 19988.56688 + dps: 25953.42884 + tps: 20701.98855 } } dps_results: { - key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 25796.92352 - tps: 19239.19996 + dps: 29430.27516 + tps: 22193.17167 } } dps_results: { key: "TestFury-SwitchInFrontOfTarget-Default" value: { - dps: 28632.96385 - tps: 23737.36775 + dps: 43835.67203 + tps: 34887.83585 } } diff --git a/sim/warrior/fury/death_wish.go b/sim/warrior/fury/death_wish.go index d77a01f956..4994ba3dca 100644 --- a/sim/warrior/fury/death_wish.go +++ b/sim/warrior/fury/death_wish.go @@ -18,18 +18,16 @@ func (war *FuryWarrior) RegisterDeathWish() { Tag: warrior.EnrageTag, Duration: 30 * time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { - if sim.CurrentTime < 0 && war.Options.PrepullMastery > 0 { - masteryPoints := core.MasteryRatingToMasteryPoints(float64(war.Options.PrepullMastery)) - prepullMultiplier := war.GetMasteryBonusMultiplier(masteryPoints) - bonusSnapshot = 1.0 + (0.2 * prepullMultiplier) - } else { - bonusSnapshot = 1.0 + (0.2 * war.EnrageEffectMultiplier) - } + bonusSnapshot = 1.0 + (0.2 * war.EnrageEffectMultiplier) war.PseudoStats.SchoolDamageDealtMultiplier[stats.SchoolIndexPhysical] *= bonusSnapshot if !hasGlyph { war.PseudoStats.DamageTakenMultiplier *= bonusSnapshot } + + if sim.Log != nil { + war.Log(sim, "[DEBUG]: Death Wish damage mod: %v", bonusSnapshot) + } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { war.PseudoStats.SchoolDamageDealtMultiplier[stats.SchoolIndexPhysical] /= bonusSnapshot diff --git a/sim/warrior/fury/fury_test.go b/sim/warrior/fury/fury_test.go index 913331df28..a7c16ee2d1 100644 --- a/sim/warrior/fury/fury_test.go +++ b/sim/warrior/fury/fury_test.go @@ -19,11 +19,14 @@ func TestFury(t *testing.T) { Race: proto.Race_RaceTroll, OtherRaces: []proto.Race{proto.Race_RaceWorgen}, - GearSet: core.GetGearSet("../../../ui/warrior/fury/gear_sets", "p1_fury_smf"), + GearSet: core.GetGearSet("../../../ui/warrior/fury/gear_sets", "p3_fury_tg"), + ItemSwapSet: core.GetItemSwapGearSet("../../../ui/warrior/fury/gear_sets", "p3_fury_tg_item_swap"), + OtherGearSets: []core.GearSetCombo{ - core.GetGearSet("../../../ui/warrior/fury/gear_sets", "p1_fury_tg"), core.GetGearSet("../../../ui/warrior/fury/gear_sets", "p3_fury_smf"), - core.GetGearSet("../../../ui/warrior/fury/gear_sets", "p3_fury_tg"), + }, + OtherItemSwapSets: []core.ItemSwapSetCombo{ + core.GetItemSwapGearSet("../../../ui/warrior/fury/gear_sets", "p3_fury_smf_item_swap"), }, Talents: SMFTalents, OtherTalentSets: []core.TalentsCombo{ @@ -36,9 +39,9 @@ func TestFury(t *testing.T) { Glyphs: FuryGlyphs, Consumes: FullConsumes, SpecOptions: core.SpecOptionsCombo{Label: "Basic", SpecOptions: PlayerOptionsFury}, - Rotation: core.GetAplRotation("../../../ui/warrior/fury/apls", "smf"), + Rotation: core.GetAplRotation("../../../ui/warrior/fury/apls", "tg"), OtherRotations: []core.RotationCombo{ - core.GetAplRotation("../../../ui/warrior/fury/apls", "tg"), + core.GetAplRotation("../../../ui/warrior/fury/apls", "smf"), }, ItemFilter: ItemFilter, diff --git a/ui/core/components/individual_sim_ui/settings_tab.ts b/ui/core/components/individual_sim_ui/settings_tab.ts index f9195fda2c..4cd32bc02a 100644 --- a/ui/core/components/individual_sim_ui/settings_tab.ts +++ b/ui/core/components/individual_sim_ui/settings_tab.ts @@ -267,25 +267,8 @@ export class SettingsTab extends SimTab { label: 'Settings', header: { title: 'Saved Settings' }, storageKey: this.simUI.getSavedSettingsStorageKey(), - getData: (simUI: IndividualSimUI) => { - const player = simUI.player; - return SavedSettings.create({ - raidBuffs: simUI.sim.raid.getBuffs(), - partyBuffs: player.getParty()?.getBuffs() || PartyBuffs.create(), - playerBuffs: player.getBuffs(), - debuffs: simUI.sim.raid.getDebuffs(), - consumes: player.getConsumes(), - race: player.getRace(), - professions: player.getProfessions(), - enableItemSwap: player.getEnableItemSwap(), - itemSwap: player.getItemSwapGear().toProto(), - reactionTimeMs: player.getReactionTime(), - channelClipDelayMs: player.getChannelClipDelay(), - inFrontOfTarget: player.getInFrontOfTarget(), - distanceFromTarget: player.getDistanceFromTarget(), - healingModel: player.getHealingModel(), - darkIntentUptime: player.getDarkIntentUptime(), - }); + getData: () => { + return this.getCurrentSavedSettings(); }, setData: (eventID: EventID, simUI: IndividualSimUI, newSettings: SavedSettings) => { TypedEvent.freezeAllAndDo(() => { @@ -331,6 +314,39 @@ export class SettingsTab extends SimTab { this.simUI.sim.waitForInit().then(() => { savedEncounterManager.loadUserData(); savedSettingsManager.loadUserData(); + this.simUI.individualConfig.presets.itemSwaps?.forEach(presetItemSwap => { + this.simUI.player; + savedSettingsManager.addSavedData({ + name: presetItemSwap.name, + tooltip: presetItemSwap.tooltip, + isPreset: true, + data: SavedSettings.create({ + ...this.getCurrentSavedSettings(), + enableItemSwap: true, + itemSwap: presetItemSwap.itemSwap, + }), + }); + }); + }); + } + + getCurrentSavedSettings() { + return SavedSettings.create({ + raidBuffs: this.simUI.sim.raid.getBuffs(), + partyBuffs: this.simUI.player.getParty()?.getBuffs() || PartyBuffs.create(), + playerBuffs: this.simUI.player.getBuffs(), + debuffs: this.simUI.sim.raid.getDebuffs(), + consumes: this.simUI.player.getConsumes(), + race: this.simUI.player.getRace(), + professions: this.simUI.player.getProfessions(), + enableItemSwap: this.simUI.player.getEnableItemSwap(), + itemSwap: this.simUI.player.getItemSwapGear().toProto(), + reactionTimeMs: this.simUI.player.getReactionTime(), + channelClipDelayMs: this.simUI.player.getChannelClipDelay(), + inFrontOfTarget: this.simUI.player.getInFrontOfTarget(), + distanceFromTarget: this.simUI.player.getDistanceFromTarget(), + healingModel: this.simUI.player.getHealingModel(), + darkIntentUptime: this.simUI.player.getDarkIntentUptime(), }); } diff --git a/ui/core/individual_sim_ui.tsx b/ui/core/individual_sim_ui.tsx index 25ea4d458d..ef6dec139e 100644 --- a/ui/core/individual_sim_ui.tsx +++ b/ui/core/individual_sim_ui.tsx @@ -19,7 +19,7 @@ import * as Tooltips from './constants/tooltips'; import { getSpecLaunchStatus, LaunchStatus, simLaunchStatuses } from './launched_sims'; import { Player, PlayerConfig, registerSpecConfig as registerPlayerConfig } from './player'; import { PlayerSpecs } from './player_specs'; -import { PresetBuild, PresetEpWeights, PresetGear, PresetRotation } from './preset_utils'; +import { PresetBuild, PresetEpWeights, PresetGear, PresetItemSwap, PresetRotation } from './preset_utils'; import { StatWeightsResult } from './proto/api'; import { APLRotation, APLRotation_Type as APLRotationType } from './proto/apl'; import { @@ -174,6 +174,7 @@ export interface IndividualSimUIConfig extends PlayerConf talents: Array, SavedTalents>>; rotations: Array; builds?: Array; + itemSwaps?: Array; }; raidSimPresets: Array>; diff --git a/ui/warrior/fury/apls/smf.apl.json b/ui/warrior/fury/apls/smf.apl.json index 3ac8cb3bc5..aa251f3753 100644 --- a/ui/warrior/fury/apls/smf.apl.json +++ b/ui/warrior/fury/apls/smf.apl.json @@ -1,230 +1,38 @@ { "type": "TypeAPL", "prepullActions": [ - { "action": { "castSpell": { "spellId": { "spellId": 2458 } } }, "doAtValue": { "const": { "val": "-2s" } } }, - { "action": { "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } }, "doAtValue": { "const": { "val": "-0.1s" } } }, - { "action": { "castSpell": { "spellId": { "spellId": 12292 } } }, "doAtValue": { "const": { "val": "-0.1s" } } }, - { "action": { "castSpell": { "spellId": { "spellId": 6673 } } }, "doAtValue": { "const": { "val": "-1.5s" } } } + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-70s"}}}, + {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-20.1s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":2458}}},"doAtValue":{"const":{"val":"-2s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":6673}}},"doAtValue":{"const":{"val":"-1.7s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":12292}}},"doAtValue":{"const":{"val":"-0.2s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-0.1s"}}} ], "priorityList": [ - { "action": { "autocastOtherCooldowns": {} } }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "isExecutePhase": { "threshold": "E20" } }, - { "cmp": { "op": "OpGe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "252s" } } } }, - { "cmp": { "op": "OpLe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "12s" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 1719 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "isExecutePhase": { "threshold": "E20" } }, - { "cmp": { "op": "OpGe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "174s" } } } }, - { "cmp": { "op": "OpLe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "30s" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 12292 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 2825, "tag": -1 } } } }, - { "action": { "castSpell": { "spellId": { "spellId": 82174 } } } }, - { "action": { "condition": { "isExecutePhase": { "threshold": "E20" } }, "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } } }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "auraNumStacks": { "auraId": { "spellId": 96923 } } }, "rhs": { "const": { "val": "5" } } } }, - "castSpell": { "spellId": { "itemId": 68972 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "auraNumStacks": { "auraId": { "spellId": 96923 } } }, "rhs": { "const": { "val": "5" } } } }, - "castSpell": { "spellId": { "itemId": 69113 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "75" } } } }, - "castSpell": { "spellId": { "spellId": 1134 } } - } - }, - { - "action": { - "condition": { "not": { "val": { "auraIsActive": { "sourceUnit": { "type": "CurrentTarget" }, "auraId": { "spellId": 86346 } } } } }, - "castSpell": { "spellId": { "spellId": 86346 } } - } - }, - { - "action": { - "condition": { "auraIsActive": { "sourceUnit": { "type": "CurrentTarget" }, "auraId": { "spellId": 86346 } } }, - "castSpell": { "spellId": { "spellId": 6544 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "cmp": { "op": "OpLt", "lhs": { "auraNumStacks": { "auraId": { "spellId": 90806 } } }, "rhs": { "const": { "val": "5" } } } }, - { - "cmp": { - "op": "OpLe", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 90806 } } }, - "rhs": { "const": { "val": "1.5s" } } - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 5308 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGe", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "5" } } } }, - "castSpell": { "spellId": { "spellId": 1680, "tag": 1 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 23881 } } } }, - { "action": { "condition": { "auraIsKnown": { "auraId": { "spellId": 99233 } } }, "castSpell": { "spellId": { "spellId": 6673 } } } }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 12964 } } }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "70" } } } }, - { "isExecutePhase": { "threshold": "E20" } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "80" } } } }, - { "not": { "val": { "isExecutePhase": { "threshold": "E20" } } } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { - "auraIsActiveWithReactionTime": { - "sourceUnit": { "type": "CurrentTarget" }, - "auraId": { "spellId": 86346 } - } - } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 86627 } } } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 78 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpGt", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 12964 } } }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "30" } } } }, - { "isExecutePhase": { "threshold": "E20" } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "80" } } } }, - { "not": { "val": { "isExecutePhase": { "threshold": "E20" } } } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { - "auraIsActiveWithReactionTime": { - "sourceUnit": { "type": "CurrentTarget" }, - "auraId": { "spellId": 86346 } - } - } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 845 } } - } - }, - { "action": { "condition": { "auraIsActive": { "auraId": { "spellId": 46916 } } }, "castSpell": { "spellId": { "spellId": 1464 } } } }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - "castSpell": { "spellId": { "spellId": 5308 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpLe", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "2" } } } }, - "castSpell": { "spellId": { "spellId": 85288, "tag": 1 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGe", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "4" } } } }, - "castSpell": { "spellId": { "spellId": 1680, "tag": 1 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 18499 } } } }, - { - "action": { - "condition": { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99233 } } } } }, - "castSpell": { "spellId": { "spellId": 6673 } } - } - } + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"or":{"vals":[{"isExecutePhase":{"threshold":"E20"}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"252s"}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}}]}},"castSpell":{"spellId":{"spellId":1719}}}}, + {"action":{"condition":{"or":{"vals":[{"isExecutePhase":{"threshold":"E20"}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"174s"}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":12292}}}}, + {"action":{"castSpell":{"spellId":{"spellId":2825,"tag":-1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"isExecutePhase":{"threshold":"E20"}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":96923}}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"itemId":68972}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":96923}}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"itemId":69113}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"75"}}}},"castSpell":{"spellId":{"spellId":1134}}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}}},"castSpell":{"spellId":{"spellId":86346}}}}, + {"action":{"condition":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}},"castSpell":{"spellId":{"spellId":6544}}}}, + {"action":{"condition":{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":90806}}},"rhs":{"const":{"val":"5"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":90806}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"castSpell":{"spellId":{"spellId":5308}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"spellId":1680,"tag":1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":23881}}}}, + {"action":{"condition":{"auraIsKnown":{"auraId":{"spellId":99233}}},"castSpell":{"spellId":{"spellId":6673}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":12964}}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"70"}}}},{"isExecutePhase":{"threshold":"E20"}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"80"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E20"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"auraId":{"spellId":86627}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":78}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGt","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":12964}}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"30"}}}},{"isExecutePhase":{"threshold":"E20"}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"80"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E20"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":845}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":46916}}},"castSpell":{"spellId":{"spellId":1464}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},"castSpell":{"spellId":{"spellId":5308}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}},"castSpell":{"spellId":{"spellId":85288,"tag":1}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"4"}}}},"castSpell":{"spellId":{"spellId":1680,"tag":1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":18499}}}}, + {"action":{"condition":{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99233}}}}},"castSpell":{"spellId":{"spellId":6673}}}} ] } diff --git a/ui/warrior/fury/apls/tg.apl.json b/ui/warrior/fury/apls/tg.apl.json index 705bdc0068..ab5fcd6fdf 100644 --- a/ui/warrior/fury/apls/tg.apl.json +++ b/ui/warrior/fury/apls/tg.apl.json @@ -1,243 +1,39 @@ { "type": "TypeAPL", "prepullActions": [ - { "action": { "castSpell": { "spellId": { "spellId": 2458 } } }, "doAtValue": { "const": { "val": "-2s" } } }, - { "action": { "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } }, "doAtValue": { "const": { "val": "-0.1s" } } }, - { "action": { "castSpell": { "spellId": { "spellId": 12292 } } }, "doAtValue": { "const": { "val": "-0.1s" } } }, - { "action": { "castSpell": { "spellId": { "spellId": 6673 } } }, "doAtValue": { "const": { "val": "-1.5s" } } } + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-70s"}}}, + {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-20.1s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":2458}}},"doAtValue":{"const":{"val":"-2s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":6673}}},"doAtValue":{"const":{"val":"-1.7s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":12292}}},"doAtValue":{"const":{"val":"-0.2s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-0.1s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-0.1s"}}} ], "priorityList": [ - { "action": { "autocastOtherCooldowns": {} } }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "isExecutePhase": { "threshold": "E20" } }, - { "cmp": { "op": "OpGe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "252s" } } } }, - { "cmp": { "op": "OpLe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "12s" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 1719 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "isExecutePhase": { "threshold": "E20" } }, - { "cmp": { "op": "OpGe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "174s" } } } }, - { "cmp": { "op": "OpLe", "lhs": { "remainingTime": {} }, "rhs": { "const": { "val": "30s" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 12292 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 2825, "tag": -1 } } } }, - { "action": { "castSpell": { "spellId": { "spellId": 82174 } } } }, - { "action": { "condition": { "isExecutePhase": { "threshold": "E20" } }, "castSpell": { "spellId": { "otherId": "OtherActionPotion" } } } }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "auraNumStacks": { "auraId": { "spellId": 96923 } } }, "rhs": { "const": { "val": "5" } } } }, - "castSpell": { "spellId": { "itemId": 68972 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "auraNumStacks": { "auraId": { "spellId": 96923 } } }, "rhs": { "const": { "val": "5" } } } }, - "castSpell": { "spellId": { "itemId": 69113 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "75" } } } }, - "castSpell": { "spellId": { "spellId": 1134 } } - } - }, - { - "action": { - "condition": { "not": { "val": { "auraIsActive": { "sourceUnit": { "type": "CurrentTarget" }, "auraId": { "spellId": 86346 } } } } }, - "castSpell": { "spellId": { "spellId": 86346 } } - } - }, - { - "action": { - "condition": { "auraIsActive": { "sourceUnit": { "type": "CurrentTarget" }, "auraId": { "spellId": 86346 } } }, - "castSpell": { "spellId": { "spellId": 6544 } } - } - }, - { - "action": { - "condition": { - "or": { - "vals": [ - { "cmp": { "op": "OpLt", "lhs": { "auraNumStacks": { "auraId": { "spellId": 90806 } } }, "rhs": { "const": { "val": "5" } } } }, - { - "cmp": { - "op": "OpLe", - "lhs": { "auraRemainingTime": { "auraId": { "spellId": 90806 } } }, - "rhs": { "const": { "val": "1.5s" } } - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 5308 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGe", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "4" } } } }, - "castSpell": { "spellId": { "spellId": 1680, "tag": 1 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 23881 } } } }, - { "action": { "condition": { "auraIsKnown": { "auraId": { "spellId": 99233 } } }, "castSpell": { "spellId": { "spellId": 6673 } } } }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpEq", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 12964 } } }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "70" } } } }, - { "isExecutePhase": { "threshold": "E20" } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "80" } } } }, - { "not": { "val": { "isExecutePhase": { "threshold": "E20" } } } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { - "auraIsActiveWithReactionTime": { - "sourceUnit": { "type": "CurrentTarget" }, - "auraId": { "spellId": 86346 } - } - } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 86627 } } } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 78 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "cmp": { "op": "OpGt", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - { - "or": { - "vals": [ - { "auraIsActiveWithReactionTime": { "auraId": { "spellId": 12964 } } }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "30" } } } }, - { "isExecutePhase": { "threshold": "E20" } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "80" } } } }, - { "not": { "val": { "isExecutePhase": { "threshold": "E20" } } } } - ] - } - }, - { - "and": { - "vals": [ - { "cmp": { "op": "OpGe", "lhs": { "currentRage": {} }, "rhs": { "const": { "val": "50" } } } }, - { - "auraIsActiveWithReactionTime": { - "sourceUnit": { "type": "CurrentTarget" }, - "auraId": { "spellId": 86346 } - } - } - ] - } - } - ] - } - } - ] - } - }, - "castSpell": { "spellId": { "spellId": 845 } } - } - }, - { - "action": { - "condition": { - "and": { - "vals": [ - { "auraIsActive": { "auraId": { "spellId": 46916 } } }, - { "cmp": { "op": "OpGt", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } } - ] - } - }, - "castSpell": { "spellId": { "spellId": 1464 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpLt", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "4" } } } }, - "castSpell": { "spellId": { "spellId": 85288, "tag": 1 } } - } - }, - { "action": { "condition": { "auraIsActive": { "auraId": { "spellId": 46916 } } }, "castSpell": { "spellId": { "spellId": 1464 } } } }, - { - "action": { - "condition": { "cmp": { "op": "OpEq", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - "castSpell": { "spellId": { "spellId": 5308 } } - } - }, - { - "action": { - "condition": { "cmp": { "op": "OpGt", "lhs": { "numberTargets": {} }, "rhs": { "const": { "val": "1" } } } }, - "castSpell": { "spellId": { "spellId": 1680, "tag": 1 } } - } - }, - { "action": { "castSpell": { "spellId": { "spellId": 18499 } } } }, - { - "action": { - "condition": { "not": { "val": { "auraIsKnown": { "auraId": { "spellId": 99233 } } } } }, - "castSpell": { "spellId": { "spellId": 6673 } } - } - } + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"condition":{"or":{"vals":[{"isExecutePhase":{"threshold":"E20"}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"252s"}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"12s"}}}}]}},"castSpell":{"spellId":{"spellId":1719}}}}, + {"action":{"condition":{"or":{"vals":[{"isExecutePhase":{"threshold":"E20"}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"174s"}}}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":12292}}}}, + {"action":{"castSpell":{"spellId":{"spellId":2825,"tag":-1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"isExecutePhase":{"threshold":"E20"}},"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":96923}}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"itemId":68972}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":96923}}},"rhs":{"const":{"val":"5"}}}},"castSpell":{"spellId":{"itemId":69113}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"75"}}}},"castSpell":{"spellId":{"spellId":1134}}}}, + {"action":{"condition":{"not":{"val":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}}},"castSpell":{"spellId":{"spellId":86346}}}}, + {"action":{"condition":{"auraIsActive":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}},"castSpell":{"spellId":{"spellId":6544}}}}, + {"action":{"condition":{"or":{"vals":[{"cmp":{"op":"OpLt","lhs":{"auraNumStacks":{"auraId":{"spellId":90806}}},"rhs":{"const":{"val":"5"}}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"spellId":90806}}},"rhs":{"const":{"val":"1.5s"}}}}]}},"castSpell":{"spellId":{"spellId":5308}}}}, + {"action":{"condition":{"cmp":{"op":"OpGe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"4"}}}},"castSpell":{"spellId":{"spellId":1680,"tag":1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":23881}}}}, + {"action":{"condition":{"auraIsKnown":{"auraId":{"spellId":99233}}},"castSpell":{"spellId":{"spellId":6673}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":12964}}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"70"}}}},{"isExecutePhase":{"threshold":"E20"}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"80"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E20"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"auraId":{"spellId":86627}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":78}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGt","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"or":{"vals":[{"auraIsActiveWithReactionTime":{"auraId":{"spellId":12964}}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"30"}}}},{"isExecutePhase":{"threshold":"E20"}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"80"}}}},{"not":{"val":{"isExecutePhase":{"threshold":"E20"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"currentRage":{}},"rhs":{"const":{"val":"50"}}}},{"auraIsActiveWithReactionTime":{"sourceUnit":{"type":"CurrentTarget"},"auraId":{"spellId":86346}}}]}}]}}]}},"castSpell":{"spellId":{"spellId":845}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":46916}}},{"cmp":{"op":"OpGt","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":1464}}}}, + {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"4"}}}},"castSpell":{"spellId":{"spellId":85288,"tag":1}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":46916}}},"castSpell":{"spellId":{"spellId":1464}}}}, + {"action":{"condition":{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},"castSpell":{"spellId":{"spellId":5308}}}}, + {"action":{"condition":{"cmp":{"op":"OpGt","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},"castSpell":{"spellId":{"spellId":1680,"tag":1}}}}, + {"action":{"castSpell":{"spellId":{"spellId":18499}}}}, + {"action":{"condition":{"not":{"val":{"auraIsKnown":{"auraId":{"spellId":99233}}}}},"castSpell":{"spellId":{"spellId":6673}}}} ] } diff --git a/ui/warrior/fury/gear_sets/p3_fury_smf_item_swap.gear.json b/ui/warrior/fury/gear_sets/p3_fury_smf_item_swap.gear.json new file mode 100644 index 0000000000..731d83aafa --- /dev/null +++ b/ui/warrior/fury/gear_sets/p3_fury_smf_item_swap.gear.json @@ -0,0 +1,71 @@ +{ + "items": [ + { + "id": 65038, + "enchant": 4208, + "gems": [52289, 52219] + }, + { + "id": 71563 + }, + { + "id": 71608, + "enchant": 4204, + "gems": [0] + }, + { + "id": 60232, + "enchant": 4100, + "gems": [52219] + }, + { + "id": 71407, + "enchant": 4102, + "gems": [52219, 0] + }, + { + "id": 60238, + "gems": [52219, 52219] + }, + { + "id": 65119, + "enchant": 4107, + "gems": [52219, 52219] + }, + { + "id": 71443, + "gems": [52219, 52219] + }, + { + "id": 71402, + "enchant": 4126, + "gems": [52219, 52219] + }, + { + "id": 71467, + "enchant": 4094, + "gems": [52219] + }, + { + "id": 60226, + "gems": [52219] + }, + { + "id": 71449 + }, + {}, + { + "id": 70142 + }, + { + "id": 71797, + "enchant": 4099, + "gems": [52219] + }, + {}, + { + "id": 71077, + "gems": [52219] + } + ] +} diff --git a/ui/warrior/fury/gear_sets/p3_fury_tg_item_swap.gear.json b/ui/warrior/fury/gear_sets/p3_fury_tg_item_swap.gear.json new file mode 100644 index 0000000000..1ef1085521 --- /dev/null +++ b/ui/warrior/fury/gear_sets/p3_fury_tg_item_swap.gear.json @@ -0,0 +1,75 @@ +{ + "items": [ + { + "id": 65038, + "enchant": 4208, + "gems": [52289, 52219] + }, + { + "id": 71563 + }, + { + "id": 71608, + "enchant": 4204, + "gems": [0] + }, + { + "id": 60232, + "enchant": 4100, + "gems": [52219] + }, + { + "id": 71407, + "enchant": 4102, + "gems": [52219, 0] + }, + { + "id": 60238, + "gems": [52219, 52219] + }, + { + "id": 65119, + "enchant": 4107, + "gems": [52219, 52219] + }, + { + "id": 71443, + "gems": [52219, 52219] + }, + { + "id": 71402, + "enchant": 4126, + "gems": [52219, 52219] + }, + { + "id": 71467, + "enchant": 4094, + "gems": [52219] + }, + { + "id": 60226, + "gems": [52219] + }, + { + "id": 71449 + }, + {}, + { + "id": 70142 + }, + { + "id": 70723, + "enchant": 4099, + "gems": [52219, 52219] + }, + { + "id": 70723, + "enchant": 4099, + "gems": [52219, 52219] + }, + { + "id": 71077, + "gems": [52219] + } + ] +} diff --git a/ui/warrior/fury/inputs.ts b/ui/warrior/fury/inputs.ts index e2979211d6..386569092a 100644 --- a/ui/warrior/fury/inputs.ts +++ b/ui/warrior/fury/inputs.ts @@ -18,9 +18,3 @@ export const SyncTypeInput = InputHelpers.makeSpecOptionsEnumInput({ - fieldName: 'prepullMastery', - label: 'Prepull Mastery Rating', - labelTooltip: 'Mastery rating in the prepull set equipped before entering combat. Only applies if value is greater than 0.', -}); diff --git a/ui/warrior/fury/presets.ts b/ui/warrior/fury/presets.ts index 72a82d6024..1ebd7cd217 100644 --- a/ui/warrior/fury/presets.ts +++ b/ui/warrior/fury/presets.ts @@ -9,7 +9,9 @@ import TGFuryApl from './apls/tg.apl.json'; import P1FurySMFGear from './gear_sets/p1_fury_smf.gear.json'; import P1FuryTGGear from './gear_sets/p1_fury_tg.gear.json'; import P3FurySMFGear from './gear_sets/p3_fury_smf.gear.json'; +import ItemSwapP3SMFGear from './gear_sets/p3_fury_smf_item_swap.gear.json'; import P3FuryTGGear from './gear_sets/p3_fury_tg.gear.json'; +import ItemSwapP3TGGear from './gear_sets/p3_fury_tg_item_swap.gear.json'; import PreraidFurySMFGear from './gear_sets/preraid_fury_smf.gear.json'; import PreraidFuryTGGear from './gear_sets/preraid_fury_tg.gear.json'; @@ -63,6 +65,9 @@ export const P1_BIS_FURY_TG_PRESET = PresetUtils.makePresetGear('P1 - TG', P1Fur export const P3_BIS_FURY_SMF_PRESET = PresetUtils.makePresetGear('P3 - SMF', P3FurySMFGear, FURY_SMF_PRESET_OPTIONS); export const P3_BIS_FURY_TG_PRESET = PresetUtils.makePresetGear('P3 - TG', P3FuryTGGear, FURY_TG_PRESET_OPTIONS); +export const P3_ITEM_SWAP_TG = PresetUtils.makePresetItemSwapGear('P3 - Item Swap - TG', ItemSwapP3TGGear); +export const P3_ITEM_SWAP_SMF = PresetUtils.makePresetItemSwapGear('P3 - Item Swap - SMF', ItemSwapP3SMFGear); + export const FURY_SMF_ROTATION = PresetUtils.makePresetAPLRotation('SMF', SMFFuryApl, FURY_SMF_PRESET_OPTIONS); export const FURY_TG_ROTATION = PresetUtils.makePresetAPLRotation('TG', TGFuryApl, FURY_TG_PRESET_OPTIONS); @@ -197,7 +202,6 @@ export const DefaultOptions = WarriorOptions.create({ startingRage: 0, }, syncType: 0, - prepullMastery: 0, }); export const DefaultConsumes = Consumes.create({ diff --git a/ui/warrior/fury/sim.ts b/ui/warrior/fury/sim.ts index 94d88e6351..98cbbc6f6c 100644 --- a/ui/warrior/fury/sim.ts +++ b/ui/warrior/fury/sim.ts @@ -121,7 +121,6 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget, - FuryInputs.PrepullMastery, ], }, itemSwapSlots: [ @@ -163,6 +162,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { Presets.P3_BIS_FURY_SMF_PRESET, Presets.P3_BIS_FURY_TG_PRESET, ], + itemSwaps: [Presets.P3_ITEM_SWAP_SMF, Presets.P3_ITEM_SWAP_TG], builds: [Presets.P1_PRESET_BUILD_SMF, Presets.P1_PRESET_BUILD_TG, Presets.P3_PRESET_BUILD_SMF, Presets.P3_PRESET_BUILD_TG], }, From cf80bef90c2e2fb8dfc35c80c7f7b7195e0ca1e2 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 13 Dec 2024 12:25:53 +0100 Subject: [PATCH 025/127] Add Warlock - item sets and update APL --- sim/warlock/demonology/TestDemonology.results | 1690 ++++++++--------- sim/warlock/demonology/demonology_test.go | 13 +- .../demonology/apls/incinerate.apl.json | 68 +- .../demonology/apls/shadow-bolt.apl.json | 66 +- .../gear_sets/p3_item_swap.gear.json | 72 + ui/warlock/demonology/presets.ts | 3 + ui/warlock/demonology/sim.ts | 1 + 7 files changed, 1020 insertions(+), 893 deletions(-) create mode 100644 ui/warlock/demonology/gear_sets/p3_item_swap.gear.json diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 738f232c9f..545a4ddcee 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -38,2614 +38,2614 @@ character_stats_results: { dps_results: { key: "TestDemonology-AllItems-AgileShadowspiritDiamond" value: { - dps: 38985.62 - tps: 19270.47783 + dps: 39979.81669 + tps: 20001.84644 } } dps_results: { key: "TestDemonology-AllItems-Althor'sAbacus-50366" value: { - dps: 36800.90996 - tps: 18307.51065 + dps: 37708.04354 + tps: 18974.17131 } } dps_results: { key: "TestDemonology-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37085.92536 - tps: 18331.99917 + dps: 37914.33482 + tps: 19010.7713 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-55889" value: { - dps: 37738.52812 - tps: 18763.37894 + dps: 38363.80009 + tps: 19328.72691 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-56407" value: { - dps: 37982.68016 - tps: 18916.73304 + dps: 38450.88028 + tps: 19365.27037 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ArrowofTime-72897" value: { - dps: 36682.37589 - tps: 18432.16116 + dps: 37585.0269 + tps: 18943.90988 } } dps_results: { key: "TestDemonology-AllItems-AustereShadowspiritDiamond" value: { - dps: 38684.89247 - tps: 19065.60764 + dps: 39657.99745 + tps: 19778.68499 } } dps_results: { key: "TestDemonology-AllItems-Balespider'sBurningVestments" value: { - dps: 36371.29791 - tps: 18208.30343 + dps: 36640.4959 + tps: 18503.31071 } } dps_results: { key: "TestDemonology-AllItems-BaubleofTrueBlood-50726" value: { - dps: 36224.62619 - tps: 18045.78585 - hps: 100.47263 + dps: 37041.66168 + tps: 18660.17717 + hps: 102.07136 } } dps_results: { key: "TestDemonology-AllItems-BedrockTalisman-58182" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-59326" value: { - dps: 38605.65892 - tps: 19020.8917 + dps: 39247.45798 + tps: 19752.78528 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-65053" value: { - dps: 38653.93179 - tps: 19173.51366 + dps: 39488.79446 + tps: 19740.70606 } } dps_results: { key: "TestDemonology-AllItems-BindingPromise-67037" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 36748.9718 - tps: 18203.7516 + dps: 37556.38029 + tps: 18865.50709 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-55995" value: { - dps: 36739.07751 - tps: 18244.37576 + dps: 37598.30936 + tps: 18894.73708 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-56414" value: { - dps: 36850.76318 - tps: 18270.57165 + dps: 37715.31197 + tps: 18923.96708 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36262.15806 - tps: 18022.67156 + dps: 37056.91275 + tps: 18661.96962 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 37419.43228 - tps: 18647.89187 + dps: 37924.85194 + tps: 19116.93303 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 36739.60785 - tps: 18280.40626 + dps: 37743.23736 + tps: 19075.73853 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 36228.72112 - tps: 18043.8443 + dps: 37054.2385 + tps: 18671.17383 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 37556.42509 - tps: 18676.56074 + dps: 38071.63776 + tps: 19156.53615 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77210" value: { - dps: 36371.75816 - tps: 18189.14228 + dps: 37206.89977 + tps: 18818.00092 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77982" value: { - dps: 36356.38614 - tps: 18176.40267 + dps: 37191.92662 + tps: 18805.09527 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-78002" value: { - dps: 36389.60524 - tps: 18208.12444 + dps: 37238.31528 + tps: 18850.71803 } } dps_results: { key: "TestDemonology-AllItems-BottledLightning-66879" value: { - dps: 37028.32331 - tps: 18415.26502 + dps: 38018.5587 + tps: 19172.19101 } } dps_results: { key: "TestDemonology-AllItems-BottledWishes-77114" value: { - dps: 38514.28962 - tps: 19308.18947 + dps: 39312.95261 + tps: 19842.8627 } } dps_results: { key: "TestDemonology-AllItems-BracingShadowspiritDiamond" value: { - dps: 38882.70787 - tps: 18793.85729 + dps: 39870.19597 + tps: 19499.76341 } } dps_results: { key: "TestDemonology-AllItems-Brawler'sTrophy-232015" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-BurningShadowspiritDiamond" value: { - dps: 39186.17769 - tps: 19372.01096 + dps: 40195.36358 + tps: 20110.3434 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 38105.99964 - tps: 19019.30221 + dps: 38439.77397 + tps: 19380.36772 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 38120.1761 - tps: 18833.95572 + dps: 38694.93072 + tps: 19431.21444 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 39087.19628 - tps: 19350.7929 + dps: 40096.81344 + tps: 20083.62437 } } dps_results: { key: "TestDemonology-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 36757.39167 - tps: 18295.8001 + dps: 37754.90719 + tps: 19085.84718 } } dps_results: { key: "TestDemonology-AllItems-CoreofRipeness-58184" value: { - dps: 37410.07157 - tps: 18520.67224 + dps: 38225.79428 + tps: 19214.93445 } } dps_results: { key: "TestDemonology-AllItems-CorpseTongueCoin-50349" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 36937.17647 - tps: 18420.46354 + dps: 37742.6367 + tps: 18973.70648 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 37024.92753 - tps: 18429.21471 + dps: 37858.5531 + tps: 19041.91681 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 37004.86125 - tps: 18434.66352 + dps: 37851.49297 + tps: 19097.86717 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-59506" value: { - dps: 36709.43591 - tps: 18436.57371 + dps: 37535.83695 + tps: 18885.58288 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-65118" value: { - dps: 36691.42562 - tps: 18384.36604 + dps: 37707.92 + tps: 18984.15923 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77208" value: { - dps: 39453.54575 - tps: 20470.65704 + dps: 40410.77964 + tps: 21105.59487 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77980" value: { - dps: 38948.57364 - tps: 20168.46443 + dps: 40063.9946 + tps: 20738.45899 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-78000" value: { - dps: 39818.88274 - tps: 20757.78254 + dps: 40928.50023 + tps: 21366.64964 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 37356.74856 - tps: 18547.25735 + dps: 38225.79428 + tps: 19214.93445 } } dps_results: { key: "TestDemonology-AllItems-Deathbringer'sWill-50363" value: { - dps: 36498.80094 - tps: 18133.4636 + dps: 37464.73738 + tps: 18873.09985 } } dps_results: { key: "TestDemonology-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 38782.82978 - tps: 19142.75276 + dps: 39768.14343 + tps: 19855.98267 } } dps_results: { key: "TestDemonology-AllItems-DislodgedForeignObject-50348" value: { - dps: 37271.92733 - tps: 18522.75164 + dps: 37925.50244 + tps: 19121.52072 } } dps_results: { key: "TestDemonology-AllItems-Dwyer'sCaber-70141" value: { - dps: 36922.69227 - tps: 18467.62528 + dps: 37894.12082 + tps: 19063.39608 } } dps_results: { key: "TestDemonology-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 38684.89247 - tps: 19065.60764 + dps: 39657.99745 + tps: 19778.68499 } } dps_results: { key: "TestDemonology-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 36845.5645 - tps: 18357.31279 + dps: 37509.55043 + tps: 18951.4405 } } dps_results: { key: "TestDemonology-AllItems-EmberShadowspiritDiamond" value: { - dps: 38882.70787 - tps: 19170.49924 + dps: 39870.19597 + tps: 19891.08001 } } dps_results: { key: "TestDemonology-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 38782.82978 - tps: 19142.75276 + dps: 39768.14343 + tps: 19855.98267 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-59473" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-65140" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 37085.92536 - tps: 18331.99917 + dps: 37914.33482 + tps: 19010.7713 } } dps_results: { key: "TestDemonology-AllItems-EternalShadowspiritDiamond" value: { - dps: 38684.89247 - tps: 19065.60764 + dps: 39657.99745 + tps: 19778.68499 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77200" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77977" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77997" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-59500" value: { - dps: 37356.74856 - tps: 18547.25735 + dps: 38225.79428 + tps: 19214.93445 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-65124" value: { - dps: 37505.30134 - tps: 18609.84888 + dps: 38377.28132 + tps: 19289.03372 } } dps_results: { key: "TestDemonology-AllItems-FieryQuintessence-69000" value: { - dps: 37586.49513 - tps: 18664.58535 + dps: 38238.46067 + tps: 19358.76934 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36721.42064 - tps: 18369.88022 + dps: 37607.36995 + tps: 18994.70088 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DreamOwl-52354" value: { - dps: 37247.46182 - tps: 18453.73308 + dps: 38102.81099 + tps: 19155.55353 } } dps_results: { key: "TestDemonology-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 36228.76632 - tps: 18044.50204 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 38393.05268 - tps: 19090.47496 + dps: 38924.75281 + tps: 19574.17891 } } dps_results: { key: "TestDemonology-AllItems-Figurine-KingofBoars-52351" value: { - dps: 36885.86984 - tps: 18248.62788 + dps: 37715.31197 + tps: 18923.96708 } } dps_results: { key: "TestDemonology-AllItems-FireoftheDeep-77117" value: { - dps: 37196.6979 - tps: 18407.90165 + dps: 38084.33513 + tps: 19077.20311 } } dps_results: { key: "TestDemonology-AllItems-FleetShadowspiritDiamond" value: { - dps: 38749.47426 - tps: 19110.34457 + dps: 39729.50666 + tps: 19828.62911 } } dps_results: { key: "TestDemonology-AllItems-FluidDeath-58181" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-ForlornShadowspiritDiamond" value: { - dps: 38882.70787 - tps: 19165.1496 + dps: 39870.19597 + tps: 19884.85548 } } dps_results: { key: "TestDemonology-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 38763.23006 - tps: 19106.64817 + dps: 39441.14446 + tps: 19650.73505 } } dps_results: { key: "TestDemonology-AllItems-FuryofAngerforge-59461" value: { - dps: 36752.41271 - tps: 18287.20354 + dps: 37773.3183 + tps: 19094.48496 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56138" value: { - dps: 37696.01934 - tps: 18827.8546 + dps: 38218.96807 + tps: 19213.62058 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56462" value: { - dps: 37790.5404 - tps: 19015.97305 + dps: 38403.10148 + tps: 19325.88702 } } dps_results: { key: "TestDemonology-AllItems-GearDetector-61462" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Gladiator'sFelshroud" value: { - dps: 29732.34278 - tps: 15180.59342 + dps: 29745.58127 + tps: 15220.07186 } } dps_results: { key: "TestDemonology-AllItems-GlowingTwilightScale-54589" value: { - dps: 36837.60389 - tps: 18323.99201 + dps: 37747.26127 + tps: 18992.06826 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-55266" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-56295" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HarmlightToken-63839" value: { - dps: 37616.5389 - tps: 18720.9791 + dps: 38353.75209 + tps: 19254.76734 } } dps_results: { key: "TestDemonology-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-59514" value: { - dps: 37995.63597 - tps: 19009.00679 + dps: 38664.39189 + tps: 19505.60519 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-65110" value: { - dps: 38091.61459 - tps: 19050.37555 + dps: 38972.65609 + tps: 19647.33323 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-59224" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-65072" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-55868" value: { - dps: 36944.3021 - tps: 18488.46794 + dps: 37477.15906 + tps: 18850.56489 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-56393" value: { - dps: 36959.00104 - tps: 18593.31607 + dps: 37559.18588 + tps: 18913.36323 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-55845" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-56370" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-HeartoftheVile-66969" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 38782.82978 - tps: 19142.75276 + dps: 39768.14343 + tps: 19855.98267 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62464" value: { - dps: 36926.99442 - tps: 18277.12088 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62469" value: { - dps: 36926.99442 - tps: 18277.12088 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-55881" value: { - dps: 36739.05446 - tps: 18244.35271 + dps: 37598.30936 + tps: 18894.73708 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-56406" value: { - dps: 36850.74007 - tps: 18270.54854 + dps: 37715.31197 + tps: 18923.96708 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77211" value: { - dps: 36228.76632 - tps: 18044.56511 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77983" value: { - dps: 36228.76632 - tps: 18044.54619 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-78003" value: { - dps: 36228.76632 - tps: 18044.58645 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 39515.80212 - tps: 19872.22251 + dps: 40326.03439 + tps: 20336.77802 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 39119.51286 - tps: 19491.98599 + dps: 39938.40418 + tps: 20179.95015 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 39724.30331 - tps: 20060.12595 + dps: 40732.61423 + tps: 20543.10865 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 37245.8231 - tps: 18485.84231 + dps: 38094.07116 + tps: 19132.81099 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-59354" value: { - dps: 36228.90598 - tps: 18048.43063 + dps: 37054.2385 + tps: 18683.33358 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-65029" value: { - dps: 36228.90598 - tps: 18049.77968 + dps: 37054.2385 + tps: 18684.50366 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-68926" value: { - dps: 37644.60453 - tps: 18626.36016 + dps: 38412.78059 + tps: 19328.48298 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-69111" value: { - dps: 37808.51441 - tps: 18707.12437 + dps: 38624.17223 + tps: 19450.05535 } } dps_results: { key: "TestDemonology-AllItems-JujuofNimbleness-63840" value: { - dps: 36748.9718 - tps: 18203.7516 + dps: 37556.38029 + tps: 18865.50709 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-KiroptyricSigil-77113" value: { - dps: 37196.75307 - tps: 18714.20823 + dps: 38015.45321 + tps: 19181.2574 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59685" value: { - dps: 36446.88728 - tps: 18109.11462 + dps: 37300.85246 + tps: 18723.05201 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59689" value: { - dps: 36446.88728 - tps: 18109.11462 + dps: 37300.85246 + tps: 18723.05201 } } dps_results: { key: "TestDemonology-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 36753.05995 - tps: 18372.62848 + dps: 37458.88903 + tps: 18749.48814 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-55816" value: { - dps: 36228.76632 - tps: 18044.47682 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-56347" value: { - dps: 36228.76632 - tps: 18044.50204 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56102" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56427" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-LicensetoSlay-58180" value: { - dps: 36756.93102 - tps: 18451.63044 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-55814" value: { - dps: 36275.29193 - tps: 18030.18734 + dps: 37053.95647 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-56345" value: { - dps: 36275.29193 - tps: 18030.18734 + dps: 37053.95647 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 36228.76632 - tps: 18043.83583 + dps: 37054.2385 + tps: 18671.15041 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 36228.76632 - tps: 18043.83583 + dps: 37054.2385 + tps: 18671.15041 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56132" value: { - dps: 36476.63294 - tps: 18030.18734 + dps: 37393.46114 + tps: 18767.76249 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56458" value: { - dps: 36501.80056 - tps: 18030.18734 + dps: 37436.67717 + tps: 18780.36486 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-68994" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-69150" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-55251" value: { - dps: 36804.3023 - tps: 18430.91014 + dps: 37607.38175 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-56285" value: { - dps: 36804.3023 - tps: 18430.91014 + dps: 37607.38175 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62466" value: { - dps: 36891.97628 - tps: 18299.12582 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62471" value: { - dps: 36891.97628 - tps: 18299.12582 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-MithrilStopwatch-232013" value: { - dps: 38243.75595 - tps: 18834.66897 + dps: 39000.30019 + tps: 19632.83707 } } dps_results: { key: "TestDemonology-AllItems-MoonwellChalice-70142" value: { - dps: 37848.68302 - tps: 18598.467 + dps: 39220.46949 + tps: 19754.97899 } } dps_results: { key: "TestDemonology-AllItems-MoonwellPhial-70143" value: { - dps: 36228.76632 - tps: 18044.52218 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-68982" value: { - dps: 38625.59906 - tps: 18979.09337 + dps: 39122.8227 + tps: 19572.70522 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-69139" value: { - dps: 38906.1783 - tps: 19083.53683 + dps: 39445.48215 + tps: 19726.65496 } } dps_results: { key: "TestDemonology-AllItems-Oremantle'sFavor-61448" value: { - dps: 36760.26405 - tps: 18303.24526 + dps: 37640.93484 + tps: 18966.15569 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 37262.72116 - tps: 18511.31234 + dps: 38165.35173 + tps: 19187.35606 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 37822.19643 - tps: 18632.26085 + dps: 38366.4379 + tps: 19287.7276 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-55237" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-56280" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 38684.89247 - tps: 19065.60764 + dps: 39657.99745 + tps: 19778.68499 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-55854" value: { - dps: 36228.76632 - tps: 18044.00046 + dps: 37054.2385 + tps: 18671.27451 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-56377" value: { - dps: 36228.76632 - tps: 18043.89175 + dps: 37054.2385 + tps: 18671.19256 } } dps_results: { key: "TestDemonology-AllItems-ReflectionoftheLight-77115" value: { - dps: 37493.68077 - tps: 18666.20536 + dps: 38378.29736 + tps: 19345.86448 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77201" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77978" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77998" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 38985.62 - tps: 19270.47783 + dps: 39979.81669 + tps: 20001.84644 } } dps_results: { key: "TestDemonology-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 38985.62 - tps: 19270.36394 + dps: 39979.81669 + tps: 20001.77993 } } dps_results: { key: "TestDemonology-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37131.32469 - tps: 18496.49245 + dps: 37843.22553 + tps: 19103.42376 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56100" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56431" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-RosaryofLight-72901" value: { - dps: 36618.41113 - tps: 18255.61517 + dps: 37455.42438 + tps: 18813.17497 } } dps_results: { key: "TestDemonology-AllItems-RottingSkull-77116" value: { - dps: 37081.87359 - tps: 18504.16346 + dps: 37974.38493 + tps: 19250.28638 } } dps_results: { key: "TestDemonology-AllItems-RuneofZeth-68998" value: { - dps: 38318.29754 - tps: 19163.5896 + dps: 39057.10554 + tps: 19811.91999 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 37808.15618 - tps: 18858.1787 + dps: 38216.39289 + tps: 19266.08571 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 37895.98182 - tps: 18905.68948 + dps: 38282.26167 + tps: 19299.78425 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 37719.2992 - tps: 18591.42746 + dps: 38379.09443 + tps: 19287.25646 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 37944.08523 - tps: 18830.67215 + dps: 38449.50482 + tps: 19320.34896 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.28112 + tps: 18671.54752 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-68915" value: { - dps: 36227.74866 - tps: 18045.66927 - hps: 354.04187 + dps: 37056.82103 + tps: 18674.86948 + hps: 357.04731 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-69109" value: { - dps: 36227.74866 - tps: 18045.68746 - hps: 399.35591 + dps: 37056.82103 + tps: 18674.86948 + hps: 402.74602 } } dps_results: { key: "TestDemonology-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-55256" value: { - dps: 36842.83788 - tps: 18335.66267 + dps: 37492.40908 + tps: 18895.46063 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-56290" value: { - dps: 37346.88067 - tps: 18608.20121 + dps: 37870.4386 + tps: 19088.76145 } } dps_results: { key: "TestDemonology-AllItems-ShadowflameRegalia" value: { - dps: 33304.64289 - tps: 16857.9031 + dps: 33605.96489 + tps: 17290.9061 } } dps_results: { key: "TestDemonology-AllItems-ShardofWoe-60233" value: { - dps: 36891.34254 - tps: 18490.00286 + dps: 37636.35589 + tps: 18946.40569 } } dps_results: { key: "TestDemonology-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 36228.74372 - tps: 18044.43694 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56115" value: { - dps: 36523.61919 - tps: 18054.05661 + dps: 37439.79562 + tps: 18796.71103 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56440" value: { - dps: 36556.45543 - tps: 18058.11591 + dps: 37489.02036 + tps: 18813.10428 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-55879" value: { - dps: 37201.75622 - tps: 18575.13414 + dps: 38275.63886 + tps: 19230.355 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-56400" value: { - dps: 37400.5235 - tps: 18644.32675 + dps: 38483.69455 + tps: 19304.11119 } } dps_results: { key: "TestDemonology-AllItems-Soul'sAnguish-66994" value: { - dps: 36804.3023 - tps: 18430.91014 + dps: 37607.38175 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-SoulCasket-58183" value: { - dps: 38431.40364 - tps: 19089.31807 + dps: 38886.45079 + tps: 19530.2093 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77206" value: { - dps: 37456.7052 - tps: 18206.24847 + dps: 38242.35538 + tps: 18955.10039 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77970" value: { - dps: 37535.50219 - tps: 18203.12448 + dps: 38094.82331 + tps: 18918.80099 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77990" value: { - dps: 37551.203 - tps: 18151.78412 + dps: 38030.91524 + tps: 18810.96128 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-68981" value: { - dps: 37036.90324 - tps: 18348.36553 + dps: 37914.33482 + tps: 19010.7713 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-69138" value: { - dps: 37168.06159 - tps: 18388.05628 + dps: 38052.78888 + tps: 19055.05918 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77202" value: { - dps: 37628.65772 - tps: 18907.10256 + dps: 38588.45321 + tps: 19580.09578 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77973" value: { - dps: 37475.9257 - tps: 18918.80623 + dps: 38360.37996 + tps: 19357.86093 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77993" value: { - dps: 37982.73536 - tps: 19123.89298 + dps: 39061.37639 + tps: 19664.79367 } } dps_results: { key: "TestDemonology-AllItems-StayofExecution-68996" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Stonemother'sKiss-61411" value: { - dps: 37447.44072 - tps: 18633.28477 + dps: 38381.31072 + tps: 19252.29213 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62465" value: { - dps: 38179.21212 - tps: 18813.38541 + dps: 38835.91081 + tps: 19583.64551 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62470" value: { - dps: 38306.64002 - tps: 18859.07803 + dps: 38970.53183 + tps: 19600.35423 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-59332" value: { - dps: 36037.75152 - tps: 18050.93234 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-65048" value: { - dps: 36037.75152 - tps: 18050.96241 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 37895.46464 - tps: 18618.69736 + dps: 38283.5543 + tps: 19122.82416 } } dps_results: { key: "TestDemonology-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-55819" value: { - dps: 36973.33106 - tps: 18387.2754 + dps: 37871.17107 + tps: 19041.13343 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-56351" value: { - dps: 37202.44804 - tps: 18481.8106 + dps: 38102.81099 + tps: 19155.55353 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 37476.36859 - tps: 18421.10965 + dps: 38303.41775 + tps: 19211.19522 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 38201.48005 - tps: 18805.05997 + dps: 38788.05702 + tps: 19408.81911 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-68927" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-69112" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-59519" value: { - dps: 38364.33932 - tps: 18755.49574 + dps: 38899.32167 + tps: 19395.94253 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-65105" value: { - dps: 38847.43423 - tps: 19120.43975 + dps: 39159.77679 + tps: 19511.37556 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56121" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56449" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-55874" value: { - dps: 36739.07751 - tps: 18244.37576 + dps: 37598.30936 + tps: 18894.73708 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-56394" value: { - dps: 36850.76318 - tps: 18270.57165 + dps: 37715.31197 + tps: 18923.96708 } } dps_results: { key: "TestDemonology-AllItems-TinyAbominationinaJar-50706" value: { - dps: 36705.71962 - tps: 18392.94351 + dps: 37497.36424 + tps: 18901.81158 } } dps_results: { key: "TestDemonology-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 37342.96869 - tps: 18666.62761 + dps: 38398.76205 + tps: 19335.75044 } } dps_results: { key: "TestDemonology-AllItems-UnheededWarning-59520" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-UnquenchableFlame-67101" value: { - dps: 36262.93719 - tps: 18022.79119 + dps: 37054.2385 + tps: 18671.32485 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62463" value: { - dps: 36926.99442 - tps: 18277.12088 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62468" value: { - dps: 36926.99442 - tps: 18277.12088 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-68709" value: { - dps: 36926.99442 - tps: 18277.12088 + dps: 37760.73856 + tps: 18955.85434 } } dps_results: { key: "TestDemonology-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 37427.40594 - tps: 18627.5401 + dps: 38602.72776 + tps: 19239.82683 } } dps_results: { key: "TestDemonology-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36859.88961 - tps: 18262.49422 + dps: 37455.95682 + tps: 18800.55563 } } dps_results: { key: "TestDemonology-AllItems-VeilofLies-72900" value: { - dps: 36228.76632 - tps: 18044.53794 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-68995" value: { - dps: 36327.54497 - tps: 18067.00561 + dps: 37150.63023 + tps: 18724.6455 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-69167" value: { - dps: 36361.37481 - tps: 18086.52617 + dps: 37160.40832 + tps: 18733.53213 } } dps_results: { key: "TestDemonology-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 34900.89853 - tps: 17060.36554 + dps: 35315.91618 + tps: 17473.94551 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77207" value: { - dps: 36432.04802 - tps: 18248.43656 + dps: 37250.76825 + tps: 18864.02916 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77979" value: { - dps: 36408.41244 - tps: 18225.21465 + dps: 37226.98879 + tps: 18844.03617 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77999" value: { - dps: 36426.4672 - tps: 18245.87489 + dps: 37266.12564 + tps: 18879.20394 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-59515" value: { - dps: 36228.76632 - tps: 18044.51538 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-65109" value: { - dps: 36228.76632 - tps: 18044.53042 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 37484.34688 - tps: 18683.00853 + dps: 37973.53756 + tps: 19141.84065 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 37628.6864 - tps: 18761.09146 + dps: 38081.79147 + tps: 19197.22347 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 36262.93719 - tps: 18023.05833 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 36756.95362 - tps: 18451.65304 + dps: 37607.39468 + tps: 18994.7256 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37056.43533 - tps: 18674.20492 + dps: 37320.30191 + tps: 18911.69559 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 36747.56487 - tps: 18318.4864 + dps: 37835.29521 + tps: 19134.3884 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 36913.71663 - tps: 18314.20827 + dps: 37784.71371 + tps: 18972.68374 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 36228.72112 - tps: 18044.31178 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 37639.52078 - tps: 18601.36966 + dps: 38095.48317 + tps: 19159.66577 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 37776.51712 - tps: 18705.78165 + dps: 38246.95346 + tps: 19235.77595 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77198" value: { - dps: 39430.19715 - tps: 19505.54637 + dps: 40203.40845 + tps: 20293.20386 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77975" value: { - dps: 39107.11355 - tps: 19365.6495 + dps: 39882.07097 + tps: 20105.40532 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77995" value: { - dps: 39783.77818 - tps: 19634.08514 + dps: 40585.64719 + tps: 20473.11743 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-55787" value: { - dps: 37439.80556 - tps: 18750.0965 + dps: 38308.49198 + tps: 19394.02441 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-56320" value: { - dps: 38032.34607 - tps: 18981.67083 + dps: 38994.76308 + tps: 19834.34328 } } dps_results: { key: "TestDemonology-AllItems-World-QuellerFocus-63842" value: { - dps: 36736.13401 - tps: 18196.39072 + dps: 37556.66831 + tps: 18865.50709 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77197" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77974" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77994" value: { - dps: 36228.76632 - tps: 18044.33438 + dps: 37054.2385 + tps: 18671.52621 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 36451.46531 - tps: 18030.26713 + dps: 37350.24511 + tps: 18755.16012 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 36451.46531 - tps: 18030.26713 + dps: 37350.24511 + tps: 18755.16012 } } dps_results: { key: "TestDemonology-Average-Default" value: { - dps: 39843.88779 - tps: 19746.58831 + dps: 40494.7705 + tps: 20274.29307 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 61029.33085 - tps: 53241.85915 + dps: 57043.25884 + tps: 48024.06105 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38835.73047 - tps: 18766.1515 + dps: 40663.77912 + tps: 19903.84966 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57200.10725 - tps: 25623.94523 + dps: 59047.77094 + tps: 26589.74346 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40195.717 - tps: 37397.04182 + dps: 48977.89462 + tps: 44275.65804 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27393.00474 - tps: 13028.40591 + dps: 29080.88846 + tps: 14333.80688 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35826.85468 - tps: 15023.37355 + dps: 39543.26682 + tps: 17874.15188 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58218.66222 - tps: 49370.30178 + dps: 57081.04956 + tps: 47190.61888 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38476.51426 - tps: 19318.02864 + dps: 41045.40234 + tps: 21094.17349 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58131.67018 - tps: 27511.06266 + dps: 60035.63808 + tps: 28904 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 39622.0774 - tps: 34609.02878 + dps: 48978.16608 + tps: 42594.27951 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27622.08204 - tps: 13656.34151 + dps: 29185.15016 + tps: 15013.89176 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35292.76916 - tps: 15642.24113 + dps: 39372.64349 + tps: 18700.89866 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 61150.49212 - tps: 53471.51603 + dps: 57793.41492 + tps: 49235.58829 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39398.6526 - tps: 19173.08109 + dps: 41113.83337 + tps: 20364.35885 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57985.01933 - tps: 26377.76423 + dps: 60029.91119 + tps: 27388.27541 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40575.20765 - tps: 37799.82858 + dps: 49608.33268 + tps: 44945.28273 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27786.26884 - tps: 13377.66229 + dps: 29510.74936 + tps: 14645.97841 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36078.87589 - tps: 15389.09273 + dps: 40113.54793 + tps: 18334.74574 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 56968.76724 - tps: 47226.22336 + dps: 51523.66532 + tps: 42014.7145 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37477.2759 - tps: 18514.85469 + dps: 37112.7246 + tps: 18071.68933 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 55823.39222 - tps: 25410.26071 + dps: 56882.34888 + tps: 26114.76979 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 39610.85805 - tps: 34797.86575 + dps: 44757.49735 + tps: 38779.68725 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26799.83629 - tps: 13074.17381 + dps: 26940.57925 + tps: 12970.19502 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34571.17235 - tps: 15025.80758 + dps: 37403.81826 + tps: 16608.40029 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 60801.76257 - tps: 52749.93446 + dps: 56786.62783 + tps: 47735.85184 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38644.67952 - tps: 18698.49633 + dps: 40453.06544 + tps: 19980.35683 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57012.98881 - tps: 25594.36891 + dps: 58855.1628 + tps: 26675.22819 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 39930.35374 - tps: 37309.34691 + dps: 48792.66061 + tps: 44107.0741 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27223.04286 - tps: 12887.34338 + dps: 28847.78388 + tps: 14123.31409 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35648.5014 - tps: 15130.70903 + dps: 39187.31076 + tps: 17515.21928 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57524.91965 - tps: 48223.98603 + dps: 57151.63717 + tps: 47259.64013 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38270.77013 - tps: 19214.42702 + dps: 40999.46679 + tps: 21073.01979 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57626.54142 - tps: 27076.12868 + dps: 60366.64469 + tps: 28754.09277 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 39608.44625 - tps: 34441.32651 + dps: 48682.82114 + tps: 42147.89298 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27420.61722 - tps: 13589.71014 + dps: 28985.48562 + tps: 14768.08761 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35057.51675 - tps: 15359.34472 + dps: 39143.27583 + tps: 18423.98029 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 61120.9446 - tps: 53202.30783 + dps: 57385.22192 + tps: 48093.5939 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39186.32738 - tps: 19074.61348 + dps: 41035.08572 + tps: 20450.76442 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57423.89245 - tps: 26146.07455 + dps: 59569.78688 + tps: 27334.14394 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40461.9475 - tps: 37552.79504 + dps: 49043.87639 + tps: 44210.46537 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27698.28883 - tps: 13300.09822 + dps: 29276.25864 + tps: 14475.92319 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35790.32565 - tps: 15296.03323 + dps: 39779.32747 + tps: 18010.92709 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 56925.93859 - tps: 47438.33586 + dps: 51014.49214 + tps: 41080.72529 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37512.3387 - tps: 18607.70259 + dps: 37132.0408 + tps: 18098.84645 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 55657.58855 - tps: 25453.84657 + dps: 56392.12733 + tps: 25376.40084 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 39347.43495 - tps: 34412.2665 + dps: 44255.95256 + tps: 37834.55861 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26603.50458 - tps: 13025.77505 + dps: 26842.22352 + tps: 12824.10773 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34254.68108 - tps: 14959.63548 + dps: 37221.0084 + tps: 16575.40868 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 62037.49638 - tps: 52990.54975 + dps: 57905.98184 + tps: 48207.91504 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39540.85241 - tps: 18823.85587 + dps: 41456.78461 + tps: 20188.7546 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58955.13748 - tps: 25950.10622 + dps: 60786.16267 + tps: 27064.27246 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40721.1874 - tps: 37488.13818 + dps: 50096.26524 + tps: 44655.71506 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27912.10252 - tps: 12967.14714 + dps: 29682.47165 + tps: 14301.5212 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37069.18276 - tps: 15352.47213 + dps: 40655.1601 + tps: 17792.22806 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58799.43729 - tps: 49074.60728 + dps: 58318.52137 + tps: 47587.87851 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39186.17769 - tps: 19372.01096 + dps: 42001.88525 + tps: 21284.36987 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59388.9197 - tps: 27438.05754 + dps: 62317.64548 + tps: 29145.21617 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40718.1787 - tps: 34916.28755 + dps: 49934.49842 + tps: 42607.64853 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28159.57065 - tps: 13704.35006 + dps: 29823.50967 + tps: 14928.91753 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36468.37579 - tps: 15590.61938 + dps: 40636.12953 + tps: 18717.32526 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 62382.06282 - tps: 53641.3439 + dps: 58678.849 + tps: 48794.15162 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40028.819 - tps: 19149.36628 + dps: 41940.95125 + tps: 20654.69268 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59336.94009 - tps: 26493.29363 + dps: 61512.419 + tps: 27736.29162 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 41415.38905 - tps: 37983.17445 + dps: 50288.26597 + tps: 44688.05238 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28381.72146 - tps: 13366.76735 + dps: 30189.85009 + tps: 14654.51164 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37201.38759 - tps: 15518.79987 + dps: 41253.43596 + tps: 18291.84556 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58218.86957 - tps: 47979.9808 + dps: 52367.08222 + tps: 41411.58942 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38427.52805 - tps: 18756.03849 + dps: 38102.13894 + tps: 18284.84228 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 57483.80585 - tps: 25799.91205 + dps: 58339.79288 + tps: 25768.43106 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40458.77023 - tps: 34831.02652 + dps: 45474.68812 + tps: 38260.20507 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27330.50154 - tps: 13135.44623 + dps: 27605.66513 + tps: 12958.01857 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35646.35585 - tps: 15190.7574 + dps: 38723.34761 + tps: 16854.02011 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 63177.10549 - tps: 55041.42043 + dps: 57504.33768 + tps: 48167.88948 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39214.83906 - tps: 19020.67121 + dps: 40795.94437 + tps: 20093.92371 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58762.80714 - tps: 26847.93909 + dps: 60561.78672 + tps: 27154.67451 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 41918.45698 - tps: 39107.84503 + dps: 49958.12438 + tps: 45485.84003 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27546.92313 - tps: 13051.70691 + dps: 29390.23767 + tps: 14424.70939 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36916.61718 - tps: 15590.57085 + dps: 41291.48561 + tps: 18712.64005 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 59704.29788 - tps: 50003.07301 + dps: 57947.01102 + tps: 47552.10983 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38704.85408 - tps: 19516.9826 + dps: 41393.01178 + tps: 21362.07215 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59020.68407 - tps: 28275.10231 + dps: 61857.22655 + tps: 29388.74758 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 41425.27896 - tps: 36513.35288 + dps: 50641.77049 + tps: 44303.99155 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28097.35357 - tps: 13890.27172 + dps: 29691.00385 + tps: 15165.19846 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37204.34519 - tps: 16634.48497 + dps: 41175.14188 + tps: 19518.59722 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 63453.31575 - tps: 55496.50692 + dps: 58217.35221 + tps: 48754.25717 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39739.62143 - tps: 19488.6811 + dps: 41445.44713 + tps: 20594.14887 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59513.62846 - tps: 27597.46138 + dps: 61497.37423 + tps: 28106.90671 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42195.69708 - tps: 39096.78832 + dps: 50772.46835 + tps: 46096.42463 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27797.39043 - tps: 13362.61738 + dps: 29959.58275 + tps: 14878.68156 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37186.58409 - tps: 15804.66775 + dps: 41916.18244 + tps: 19100.60193 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58727.56078 - tps: 49188.46306 + dps: 51739.24236 + tps: 41553.46916 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37749.57273 - tps: 18776.53967 + dps: 37372.75777 + tps: 18270.05791 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56996.43632 - tps: 26627.83209 + dps: 58238.81417 + tps: 26684.74723 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 40737.38364 - tps: 35921.00935 + dps: 45689.88096 + tps: 38966.89542 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27196.10311 - tps: 13269.11846 + dps: 27068.82624 + tps: 13083.13294 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36295.45611 - tps: 15884.8477 + dps: 38352.36092 + tps: 17264.69407 } } dps_results: { key: "TestDemonology-SwitchInFrontOfTarget-Default" value: { - dps: 39020.56339 - tps: 19372.01096 + dps: 40012.75367 + tps: 20110.3434 } } diff --git a/sim/warlock/demonology/demonology_test.go b/sim/warlock/demonology/demonology_test.go index f07b3f8479..9b45417cca 100644 --- a/sim/warlock/demonology/demonology_test.go +++ b/sim/warlock/demonology/demonology_test.go @@ -460,12 +460,13 @@ func TestDemonology(t *testing.T) { } core.RunTestSuite(t, t.Name(), core.FullCharacterTestSuiteGenerator(core.CharacterSuiteConfig{ - Class: proto.Class_ClassWarlock, - Race: proto.Race_RaceOrc, - OtherRaces: []proto.Race{proto.Race_RaceTroll, proto.Race_RaceGoblin, proto.Race_RaceHuman}, - GearSet: core.GetGearSet("../../../ui/warlock/demonology/gear_sets", "p3"), - Talents: demonologyTalentsShadowBolt, - Glyphs: demonologyGlyphsShadowBolt, + Class: proto.Class_ClassWarlock, + Race: proto.Race_RaceOrc, + OtherRaces: []proto.Race{proto.Race_RaceTroll, proto.Race_RaceGoblin, proto.Race_RaceHuman}, + GearSet: core.GetGearSet("../../../ui/warlock/demonology/gear_sets", "p3"), + ItemSwapSet: core.GetItemSwapGearSet("../../../ui/warlock/demonology/gear_sets", "p3_item_swap"), + Talents: demonologyTalentsShadowBolt, + Glyphs: demonologyGlyphsShadowBolt, OtherTalentSets: []core.TalentsCombo{ { Label: "Incinerate", diff --git a/ui/warlock/demonology/apls/incinerate.apl.json b/ui/warlock/demonology/apls/incinerate.apl.json index c297b66908..44a8513ff3 100644 --- a/ui/warlock/demonology/apls/incinerate.apl.json +++ b/ui/warlock/demonology/apls/incinerate.apl.json @@ -1,37 +1,61 @@ { "type": "TypeAPL", "prepullActions": [ + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-60s"}}}, + {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-22.5"}}}, {"action":{"castSpell":{"spellId":{"spellId":30146}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":77801}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":74434}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":691}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":59672}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":29722}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":348}}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castAllStatBuffCooldowns":{"statType1":3,"statType2":14,"statType3":-1}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":33697}}},"doAtValue":{"const":{"val":"-0.7s"}}} + {"action":{"castSpell":{"spellId":{"spellId":77801}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":74434}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":691}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":59672}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":29722}}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":33697}}},"doAtValue":{"const":{"val":"-0.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":348}}},"doAtValue":{"const":{"val":"-0.5s"}}} ], "priorityList": [ - {"action":{"castAllStatBuffCooldowns":{"statType1":3,"statType2":14,"statType3":-1}}}, {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":89937}}},{"auraIsActive":{"auraId":{"spellId":89937}}}]}},"castSpell":{"spellId":{"spellId":77799}}}}, - {"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":11}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":11}},"rhs":{"const":{"val":"1s"}}}},{"and":{"vals":[{"auraIsActive":{"auraId":{"itemId":58091}}},{"or":{"vals":[{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"itemId":58091}}},"rhs":{"const":{"val":"1s"}}}}]}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"120s"}}}}]}},{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":11}}]}},{"and":{"vals":[{"auraIsActive":{"auraId":{"itemId":58091}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"itemId":58091}}},"rhs":{"const":{"val":"3s"}}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":18540}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":18540}}}]}}}, - {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":59672}}},"castSpell":{"spellId":{"itemId":58091}}}}, - {"action":{"condition":{"and":{}},"sequence":{"name":"burst","actions":[{"castSpell":{"spellId":{"spellId":77801}}},{"castSpell":{"spellId":{"spellId":74434}}},{"castSpell":{"spellId":{"spellId":691}}},{"castSpell":{"spellId":{"spellId":59672}}},{"castSpell":{"spellId":{"spellId":603}}},{"castSpell":{"spellId":{"spellId":348}}},{"castSpell":{"spellId":{"spellId":172}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"70s"}}}}]}},"castSpell":{"spellId":{"spellId":59672}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"40s"}}}},{"cmp":{"op":"OpGe","lhs":{"auraRemainingTime":{"auraId":{"spellId":59672}}},"rhs":{"const":{"val":"25s"}}}}]}},"castSpell":{"spellId":{"spellId":50589}}}}, + {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":59672}}},{"cmp":{"op":"OpLe","lhs":{"auraInternalCooldown":{"auraId":{"spellId":92318}}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":59672}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":79462}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{"auraIsActive":{"auraId":{"spellId":79463}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":33697}}}]}},"castSpell":{"spellId":{"spellId":77801}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":77801}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":82174}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"dotIsActive":{"spellId":{"spellId":47897}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"8s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":74434}}},{"castSpell":{"spellId":{"spellId":691}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":74241}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":92318}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":47897}}}}},{"auraIsActive":{"auraId":{"spellId":89091}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":18540}}},{"castSpell":{"spellId":{"spellId":603}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":59672}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":33697}}}]}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":59672}}},"castSpell":{"spellId":{"spellId":10060,"tag":-1}}}}, + {"action":{"condition":{"and":{}},"sequence":{"name":"burst","actions":[{"castSpell":{"spellId":{"spellId":77801}}},{"castSpell":{"spellId":{"itemId":70142}}},{"castSpell":{"spellId":{"spellId":59672}}},{"castSpell":{"spellId":{"spellId":603}}},{"castSpell":{"spellId":{"spellId":348}}},{"castSpell":{"spellId":{"spellId":172}}}]}}}, {"action":{"condition":{"and":{"vals":[{"sequenceIsComplete":{"sequenceName":"burst"}},{"spellCanCast":{"spellId":{"spellId":77801}}},{"spellCanCast":{"spellId":{"spellId":59672}}}]}},"resetSequence":{"sequenceName":"burst"}}}, - {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":77801}}},"rhs":{"const":{"val":"20"}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"60"}}}}]}},"castSpell":{"spellId":{"spellId":59672}}}}, - {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":77801}}},{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":59672}}},"rhs":{"remainingTime":{}}}}]}},"castSpell":{"spellId":{"spellId":77801}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"currentMana":{}},"rhs":{"const":{"val":"67000"}}}},{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":1454}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"spellCastTime":{"spellId":{"spellId":30146}}}}},{"cmp":{"op":"OpLe","lhs":{"spellCpm":{"spellId":{"spellId":30146}}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":77801}}},"rhs":{"const":{"val":"10"}}}},{"cmp":{"op":"OpLe","lhs":{"spellTimeToReady":{"spellId":{"spellId":59672}}},"rhs":{"const":{"val":"10"}}}},{"cmp":{"op":"OpGe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30"}}}}]}},"castSpell":{"spellId":{"spellId":30146}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"and":{"vals":[{"sequenceIsComplete":{"sequenceName":"burst"}},{"spellCanCast":{"spellId":{"spellId":77801}}},{"spellCanCast":{"spellId":{"spellId":59672}}},{"spellCanCast":{"spellId":{"itemId":70142}}}]}},"castSpell":{"spellId":{"itemId":70142}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"170s"}}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":59672}}},"rhs":{"const":{"val":"20s"}}}},{"auraIsActive":{"auraId":{"spellId":89091}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"currentMana":{}},"rhs":{"const":{"val":"7100"}}}},{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"10s"}}}},{"not":{"val":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":2825,"tag":-1}}},{"auraIsActive":{"auraId":{"spellId":33697}}},{"auraIsActive":{"auraId":{"spellId":92318}}},{"auraIsActive":{"auraId":{"spellId":59672}}},{"auraIsActive":{"auraId":{"spellId":89091}}},{"auraIsActive":{"auraId":{"itemId":58091}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{}]}}}}]}},"castSpell":{"spellId":{"spellId":1454}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"61s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"spellCastTime":{"spellId":{"spellId":30146}}}}},{"cmp":{"op":"OpLe","lhs":{"spellCpm":{"spellId":{"spellId":30146}}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":30146}}}}, {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":348,"tag":1}}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":348}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":348,"tag":1}}}}}}},"castSpell":{"spellId":{"spellId":348}}}}, {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":172}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":172}}}}},"castSpell":{"spellId":{"spellId":172}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"3s"}}}},{"not":{"val":{"dotIsActive":{"spellId":{"spellId":47897}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"45s"}}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"90s"}}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{"auraIsActive":{"auraId":{"spellId":59672}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpLt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":980}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"itemId":58091}}},"castSpell":{"spellId":{"spellId":50589}}}}, {"action":{"condition":{"spellIsReady":{"spellId":{"spellId":71521}}},"castSpell":{"spellId":{"spellId":71521}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":89937}}},{"auraIsActive":{"auraId":{"spellId":89937}}}]}},"castSpell":{"spellId":{"spellId":77799}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":89937}}},{"auraIsActive":{"auraId":{"spellId":89937}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"8s"}}}},{"not":{"val":{"spellCanCast":{"spellId":{"spellId":18540}}}}}]}},"castSpell":{"spellId":{"spellId":77799}}}}, {"action":{"condition":{"spellIsReady":{"spellId":{"spellId":47897}}},"castSpell":{"spellId":{"spellId":47897}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"math":{"op":"OpMul","lhs":{"dotTickFrequency":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"2"}}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, - {"action":{"castSpell":{"spellId":{"spellId":50589}}}}, + {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},"castSpell":{"spellId":{"spellId":603}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"math":{"op":"OpMul","lhs":{"dotTickFrequency":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"2"}}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":71165}}},{"auraIsActive":{"auraId":{"spellId":71165}}}]}},"castSpell":{"spellId":{"spellId":29722}}}}, {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}}]}},"castSpell":{"spellId":{"spellId":6353}}}}, {"action":{"castSpell":{"spellId":{"spellId":29722}}}}, diff --git a/ui/warlock/demonology/apls/shadow-bolt.apl.json b/ui/warlock/demonology/apls/shadow-bolt.apl.json index 3d108a513f..35c9a9800a 100644 --- a/ui/warlock/demonology/apls/shadow-bolt.apl.json +++ b/ui/warlock/demonology/apls/shadow-bolt.apl.json @@ -1,36 +1,62 @@ { "type": "TypeAPL", "prepullActions": [ + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-60s"}}}, + {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-22.5"}}}, {"action":{"castSpell":{"spellId":{"spellId":30146}}},"doAtValue":{"const":{"val":"-10s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":77801}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":74434}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":691}}},"doAtValue":{"const":{"val":"-4.0s"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":59672}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":686}}},"doAtValue":{"const":{"val":"-2.5s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":348}}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castAllStatBuffCooldowns":{"statType1":3,"statType2":14,"statType3":-1}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-0.7s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":33697}}},"doAtValue":{"const":{"val":"-0.7s"}}} + {"action":{"castSpell":{"spellId":{"spellId":77801}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":74434}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":691}}},"doAtValue":{"const":{"val":"-4.01s"}},"hide":true}, + {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":59672}}},"doAtValue":{"const":{"val":"-2.51s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":82174}}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":686}}},"doAtValue":{"const":{"val":"-2.49s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":33697}}},"doAtValue":{"const":{"val":"-0.5s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":348}}},"doAtValue":{"const":{"val":"-0.5s"}}} ], "priorityList": [ - {"action":{"castAllStatBuffCooldowns":{"statType1":3,"statType2":14,"statType3":-1}}}, {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"condition":{"and":{"vals":[{"or":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":11}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":11}},"rhs":{"const":{"val":"1s"}}}},{"and":{"vals":[{"auraIsActive":{"auraId":{"itemId":58091}}},{"or":{"vals":[{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"itemId":58091}}},"rhs":{"const":{"val":"1s"}}}}]}},{"cmp":{"op":"OpLe","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"120s"}}}}]}},{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":11}}]}},{"and":{"vals":[{"auraIsActive":{"auraId":{"itemId":58091}}},{"cmp":{"op":"OpLe","lhs":{"auraRemainingTime":{"auraId":{"itemId":58091}}},"rhs":{"const":{"val":"3s"}}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":18540}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":18540}}}]}}}, - {"action":{"condition":{"and":{}},"sequence":{"name":"burst","actions":[{"castSpell":{"spellId":{"spellId":77801}}},{"castSpell":{"spellId":{"spellId":74434}}},{"castSpell":{"spellId":{"spellId":691}}},{"castSpell":{"spellId":{"spellId":59672}}},{"castSpell":{"spellId":{"spellId":603}}},{"castSpell":{"spellId":{"spellId":348}}},{"castSpell":{"spellId":{"spellId":172}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"70s"}}}}]}},"castSpell":{"spellId":{"spellId":59672}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"40s"}}}},{"cmp":{"op":"OpGe","lhs":{"auraRemainingTime":{"auraId":{"spellId":59672}}},"rhs":{"const":{"val":"25s"}}}}]}},"castSpell":{"spellId":{"spellId":50589}}}}, + {"action":{"condition":{"and":{"vals":[{"spellIsReady":{"spellId":{"spellId":59672}}},{"cmp":{"op":"OpLe","lhs":{"auraInternalCooldown":{"auraId":{"spellId":92318}}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":59672}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":79462}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{"auraIsActive":{"auraId":{"spellId":79463}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":33697}}}]}},"castSpell":{"spellId":{"spellId":77801}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpLt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":77801}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":82174}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"dotIsActive":{"spellId":{"spellId":47897}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"8s"}}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":74434}}},{"castSpell":{"spellId":{"spellId":691}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":74241}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":92318}}},{"not":{"val":{"spellIsReady":{"spellId":{"spellId":47897}}}}},{"auraIsActive":{"auraId":{"spellId":89091}}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":18540}}},{"castSpell":{"spellId":{"spellId":603}}}]}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":59672}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"isExecutePhase":{"threshold":"E25"}}]}},"strictSequence":{"actions":[{"castSpell":{"spellId":{"spellId":33697}}}]}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":59672}}},"castSpell":{"spellId":{"spellId":10060,"tag":-1}}}}, + {"action":{"condition":{"and":{}},"sequence":{"name":"burst","actions":[{"castSpell":{"spellId":{"spellId":77801}}},{"castSpell":{"spellId":{"itemId":70142}}},{"castSpell":{"spellId":{"spellId":59672}}},{"castSpell":{"spellId":{"spellId":603}}},{"castSpell":{"spellId":{"spellId":348}}},{"castSpell":{"spellId":{"spellId":172}}}]}}}, {"action":{"condition":{"and":{"vals":[{"sequenceIsComplete":{"sequenceName":"burst"}},{"spellCanCast":{"spellId":{"spellId":77801}}},{"spellCanCast":{"spellId":{"spellId":59672}}}]}},"resetSequence":{"sequenceName":"burst"}}}, - {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"auraIsKnown":{"auraId":{"spellId":59672}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"currentMana":{}},"rhs":{"const":{"val":"67000"}}}},{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"10s"}}}}]}},"castSpell":{"spellId":{"spellId":1454}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"spellCastTime":{"spellId":{"spellId":30146}}}}},{"cmp":{"op":"OpLe","lhs":{"spellCpm":{"spellId":{"spellId":30146}}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":30146}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"121s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":33697}}}}, + {"action":{"condition":{"and":{"vals":[{"sequenceIsComplete":{"sequenceName":"burst"}},{"spellCanCast":{"spellId":{"spellId":77801}}},{"spellCanCast":{"spellId":{"spellId":59672}}},{"spellCanCast":{"spellId":{"itemId":70142}}}]}},"castSpell":{"spellId":{"itemId":70142}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"170s"}}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"auraIsActive":{"auraId":{"spellId":59672}}},{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"spellTimeToReady":{"spellId":{"spellId":59672}}},"rhs":{"const":{"val":"20s"}}}},{"auraIsActive":{"auraId":{"spellId":89091}}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"currentMana":{}},"rhs":{"const":{"val":"7100"}}}},{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"10s"}}}},{"not":{"val":{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":2825,"tag":-1}}},{"auraIsActive":{"auraId":{"spellId":33697}}},{"auraIsActive":{"auraId":{"spellId":92318}}},{"auraIsActive":{"auraId":{"spellId":59672}}},{"auraIsActive":{"auraId":{"spellId":89091}}},{"auraIsActive":{"auraId":{"itemId":58091}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{}]}}}}]}},"castSpell":{"spellId":{"spellId":1454}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"const":{"val":"61s"}}}},{"cmp":{"op":"OpGt","lhs":{"currentTime":{}},"rhs":{"const":{"val":"60s"}}}}]}},"castSpell":{"spellId":{"spellId":82174}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLe","lhs":{"sequenceTimeToReady":{"sequenceName":"burst"}},"rhs":{"spellCastTime":{"spellId":{"spellId":30146}}}}},{"cmp":{"op":"OpLe","lhs":{"spellCpm":{"spellId":{"spellId":30146}}},"rhs":{"const":{"val":"1"}}}}]}},"castSpell":{"spellId":{"spellId":30146}}}}, {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":348,"tag":1}}},"rhs":{"math":{"op":"OpAdd","lhs":{"spellCastTime":{"spellId":{"spellId":348}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":348,"tag":1}}}}}}},"castSpell":{"spellId":{"spellId":348}}}}, {"action":{"condition":{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":172}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":172}}}}},"castSpell":{"spellId":{"spellId":172}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"3s"}}}},{"not":{"val":{"dotIsActive":{"spellId":{"spellId":47897}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"45s"}}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"90s"}}}},{"auraIsActive":{"auraId":{"spellId":79460}}},{"auraIsActive":{"auraId":{"spellId":59672}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpLt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"30s"}}}}]}},"castSpell":{"spellId":{"spellId":980}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"itemId":58091}}},"castSpell":{"spellId":{"spellId":50589}}}}, {"action":{"condition":{"spellIsReady":{"spellId":{"spellId":71521}}},"castSpell":{"spellId":{"spellId":71521}}}}, {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":89937}}},{"auraIsActive":{"auraId":{"spellId":89937}}}]}},"castSpell":{"spellId":{"spellId":77799}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":89937}}},{"auraIsActive":{"auraId":{"spellId":89937}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"8s"}}}},{"not":{"val":{"spellCanCast":{"spellId":{"spellId":18540}}}}}]}},"castSpell":{"spellId":{"spellId":77799}}}}, {"action":{"condition":{"spellIsReady":{"spellId":{"spellId":47897}}},"castSpell":{"spellId":{"spellId":47897}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"math":{"op":"OpMul","lhs":{"dotTickFrequency":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"2"}}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, - {"action":{"castSpell":{"spellId":{"spellId":50589}}}}, - {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":17941}}},{"auraIsActive":{"auraId":{"spellId":17941}}}]}},"castSpell":{"spellId":{"spellId":686}}}}, + {"action":{"condition":{"not":{"val":{"dotIsActive":{"spellId":{"spellId":603}}}}},"castSpell":{"spellId":{"spellId":603}}}}, + {"hide":true,"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"dotRemainingTime":{"spellId":{"spellId":603}}},"rhs":{"dotTickFrequency":{"spellId":{"spellId":603}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"math":{"op":"OpMul","lhs":{"dotTickFrequency":{"spellId":{"spellId":603}}},"rhs":{"const":{"val":"2"}}}}}}]}},"castSpell":{"spellId":{"spellId":603}}}}, + {"action":{"condition":{"auraIsActive":{"auraId":{"spellId":17941}}},"castSpell":{"spellId":{"spellId":686}}}}, {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":71165}}},{"auraIsActive":{"auraId":{"spellId":71165}}}]}},"castSpell":{"spellId":{"spellId":29722}}}}, {"action":{"condition":{"and":{"vals":[{"auraIsKnown":{"auraId":{"spellId":63167}}},{"auraIsActive":{"auraId":{"spellId":63167}}}]}},"castSpell":{"spellId":{"spellId":6353}}}}, {"action":{"castSpell":{"spellId":{"spellId":686}}}}, diff --git a/ui/warlock/demonology/gear_sets/p3_item_swap.gear.json b/ui/warlock/demonology/gear_sets/p3_item_swap.gear.json new file mode 100644 index 0000000000..ed2a3a17c0 --- /dev/null +++ b/ui/warlock/demonology/gear_sets/p3_item_swap.gear.json @@ -0,0 +1,72 @@ +{ + "items": [ + { + "id": 71595, + "enchant": 4208, + "gems": [52289, 52219] + }, + { + "id": 71563 + }, + { + "id": 70318, + "enchant": 4204, + "gems": [52219] + }, + { + "id": 60232, + "enchant": 4096, + "gems": [52219] + }, + { + "id": 71407, + "enchant": 4102, + "gems": [52219, 52219] + }, + { + "id": 60238, + "enchant": 4257, + "gems": [52219, 0] + }, + { + "id": 71614, + "enchant": 4107, + "gems": [52205, 0], + "reforging": 147 + }, + { + "id": 71613, + "gems": [52219, 52219] + }, + { + "id": 71596, + "enchant": 4112, + "gems": [52219, 52219] + }, + { + "id": 65116, + "enchant": 4094, + "gems": [52219] + }, + { + "id": 60226, + "gems": [52219] + }, + { + "id": 71449 + }, + { + "id": 70142 + }, + {}, + { + "id": 71797, + "enchant": 4083, + "gems": [52219] + }, + {}, + { + "id": 71579 + } + ] +} diff --git a/ui/warlock/demonology/presets.ts b/ui/warlock/demonology/presets.ts index 4f202a3cb3..5090a12593 100644 --- a/ui/warlock/demonology/presets.ts +++ b/ui/warlock/demonology/presets.ts @@ -27,6 +27,7 @@ import IncinerateAPL from './apls/incinerate.apl.json'; import ShadowBoltAPL from './apls/shadow-bolt.apl.json'; import P1Gear from './gear_sets/p1.gear.json'; import P3Gear from './gear_sets/p3.gear.json'; +import ItemSwapP3 from './gear_sets/p3_item_swap.gear.json'; import PreraidGear from './gear_sets/preraid.gear.json'; // Preset options for this spec. @@ -37,6 +38,8 @@ export const PRERAID_PRESET = PresetUtils.makePresetGear('Pre-raid', PreraidGear export const P1_PRESET = PresetUtils.makePresetGear('P1 - BIS', P1Gear); export const P3_PRESET = PresetUtils.makePresetGear('P3 - BIS', P3Gear); +export const P3_ITEM_SWAP = PresetUtils.makePresetItemSwapGear('P3 - Item Swap - Mastery', ItemSwapP3); + export const APL_ShadowBolt = PresetUtils.makePresetAPLRotation('Shadow Bolt', ShadowBoltAPL); export const APL_Incinerate = PresetUtils.makePresetAPLRotation('Incinerate', IncinerateAPL); diff --git a/ui/warlock/demonology/sim.ts b/ui/warlock/demonology/sim.ts index 1217872c85..6ccd05ccd2 100644 --- a/ui/warlock/demonology/sim.ts +++ b/ui/warlock/demonology/sim.ts @@ -146,6 +146,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDemonologyWarlock, { // Preset gear configurations that the user can quickly select. gear: [Presets.PRERAID_PRESET, Presets.P1_PRESET, Presets.P3_PRESET], + itemSwaps: [Presets.P3_ITEM_SWAP], builds: [Presets.PRESET_BUILD_SHADOWBOLT, Presets.PRESET_BUILD_INCINERATE], }, From ce893931038bbf88b13ecfb90eb6ea64a61346a8 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 13 Dec 2024 14:30:27 +0100 Subject: [PATCH 026/127] Fix Armor spec logging & faulty item CD trigger when not swapping --- sim/core/character.go | 9 ++++++++ sim/core/item_swaps.go | 51 ++++++++++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/sim/core/character.go b/sim/core/character.go index 5b55fb548b..2c2b3854ee 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -777,10 +777,15 @@ func (character *Character) MeetsArmorSpecializationRequirement(armorType proto. func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { armorSpecializationDepdency := character.NewDynamicMultiplyStat(primaryStat, 1.05) + var isEnabled bool enableArmorSpecialization := func(sim *Simulation) { character.EnableBuildPhaseStatDep(sim, armorSpecializationDepdency) + if isEnabled { + return + } + isEnabled = true if sim.Log != nil { sim.Log("Armor Specialization: Active") } @@ -788,6 +793,10 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta disableArmorSpecialization := func(sim *Simulation) { character.DisableBuildPhaseStatDep(sim, armorSpecializationDepdency) + if !isEnabled { + return + } + isEnabled = false if sim.Log != nil { sim.Log("Armor Specialization: Inactive") } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 944d8813ac..4f05a74926 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -195,14 +195,23 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aur func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots []proto.ItemSlot) { character := swap.character character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { - idEquipped := character.Equipment[slot].ID + isSwapItem := swap.ItemExistsInSwapSet(itemID) + if !isSwapItem { + return + } + hasItemEquipped := swap.HasItemEquipped(itemID) + itemSlot := swap.GetItemSwapItemSlot(itemID) + if itemSlot == -1 { + return + } + equippedItemID := swap.GetEquippedItemBySlot(itemSlot).ID spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { aura := character.GetAuraByID(spell.ActionID) if aura.IsActive() { aura.Deactivate(sim) } - if idEquipped != itemID { + if !hasItemEquipped { spell.Flags |= SpellFlagSwapped return } @@ -210,8 +219,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots [ if !swap.initialized { return } - idSwapped := swap.unEquippedItems[slot].ID - if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { + swappedItemID := swap.GetUnequippedItemBySlot(slot).ID + + if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { spell.CD.Set(sim.CurrentTime + time.Second*30) } } @@ -221,14 +231,15 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots [ // Helper for handling Enchant On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterOnSwapItemForEnchantOnUseEffect(spell *Spell, slots []proto.ItemSlot) { character := swap.character + character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { if spell != nil { - idEquipped := character.Equipment[slot].ID - idSwapped := swap.unEquippedItems[slot].ID + equippedItemID := swap.GetEquippedItemBySlot(slot).ID + swappedItemID := swap.GetUnequippedItemBySlot(slot).ID if !swap.initialized { return } - if idSwapped == idEquipped && spell.CD.IsReady(sim) || idSwapped != idEquipped { + if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { spell.CD.Set(sim.CurrentTime + time.Second*30) } } @@ -252,13 +263,29 @@ func (swap *ItemSwap) HasItemEquipped(itemID int32) bool { return false } +func (swap *ItemSwap) GetEquippedItemBySlot(slot proto.ItemSlot) *Item { + return &swap.character.Equipment[slot] +} + func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { - if slot < 0 { - panic("Not able to swap Item " + slot.String() + " not supported") - } return &swap.unEquippedItems[slot] } +func (swap *ItemSwap) GetItemSwapItemSlot(itemID int32) proto.ItemSlot { + var slotsToCheck Equipment + if swap.IsSwapped() { + slotsToCheck = swap.originalEquip + } else { + slotsToCheck = swap.swapEquip + } + for slot, item := range slotsToCheck { + if item.ID == itemID { + return proto.ItemSlot(slot) + } + } + return -1 +} + func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { for _, item := range swap.unEquippedItems { if item.ID == itemID { @@ -271,7 +298,7 @@ func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { newStats := stats.Stats{} for _, slot := range slots { - oldItemStats := swap.getItemStats(swap.character.Equipment[slot]) + oldItemStats := swap.getItemStats(*swap.GetEquippedItemBySlot(slot)) newItemStats := swap.getItemStats(*swap.GetUnequippedItemBySlot(slot)) newStats = newStats.Add(newItemStats.Subtract(oldItemStats)) } @@ -331,7 +358,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (bool, stats.Stats) { - oldItem := swap.character.Equipment[slot] + oldItem := *swap.GetEquippedItemBySlot(slot) var newItem *Item if isReset { newItem = &swap.originalEquip[slot] From 71eca5d4e6a989ab84a24cb44ec01f8c4f23df9a Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 13 Dec 2024 14:42:29 +0100 Subject: [PATCH 027/127] Update tests --- sim/warlock/demonology/TestDemonology.results | 126 ++--- sim/warrior/fury/TestFury.results | 512 +++++++++--------- 2 files changed, 319 insertions(+), 319 deletions(-) diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 545a4ddcee..45b0e7ac47 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -2078,8 +2078,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49608.33268 - tps: 44945.28273 + dps: 49641.74745 + tps: 44969.91181 } } dps_results: { @@ -2169,7 +2169,7 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28847.78388 + dps: 28852.19529 tps: 14123.31409 } } @@ -2183,14 +2183,14 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57151.63717 + dps: 57157.34582 tps: 47259.64013 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40999.46679 + dps: 41004.88934 tps: 21073.01979 } } @@ -2204,15 +2204,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48682.82114 - tps: 42147.89298 + dps: 48694.7594 + tps: 42170.84466 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28985.48562 - tps: 14768.08761 + dps: 28988.55453 + tps: 14762.5163 } } dps_results: { @@ -2246,14 +2246,14 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49043.87639 - tps: 44210.46537 + dps: 49062.25333 + tps: 44220.49921 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29276.25864 + dps: 29280.72923 tps: 14475.92319 } } @@ -2288,15 +2288,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44255.95256 - tps: 37834.55861 + dps: 44262.61088 + tps: 37834.24023 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26842.22352 - tps: 12824.10773 + dps: 26817.65752 + tps: 12816.35151 } } dps_results: { @@ -2309,15 +2309,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57905.98184 - tps: 48207.91504 + dps: 58138.7318 + tps: 48300.58261 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41456.78461 - tps: 20188.7546 + dps: 41617.44471 + tps: 20222.84046 } } dps_results: { @@ -2330,15 +2330,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50096.26524 - tps: 44655.71506 + dps: 50162.51216 + tps: 44607.63024 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29682.47165 - tps: 14301.5212 + dps: 29731.87216 + tps: 14280.22436 } } dps_results: { @@ -2351,15 +2351,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58318.52137 - tps: 47587.87851 + dps: 58482.01174 + tps: 47630.68562 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 42001.88525 - tps: 21284.36987 + dps: 42133.56543 + tps: 21299.59206 } } dps_results: { @@ -2372,15 +2372,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49934.49842 - tps: 42607.64853 + dps: 50003.83045 + tps: 42547.45762 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29823.50967 - tps: 14928.91753 + dps: 29873.2466 + tps: 14954.357 } } dps_results: { @@ -2393,15 +2393,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58678.849 - tps: 48794.15162 + dps: 58896.70608 + tps: 48887.90418 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41940.95125 - tps: 20654.69268 + dps: 42095.91652 + tps: 20690.64198 } } dps_results: { @@ -2414,15 +2414,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50288.26597 - tps: 44688.05238 + dps: 50385.19333 + tps: 44745.60496 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30189.85009 - tps: 14654.51164 + dps: 30241.29935 + tps: 14682.9301 } } dps_results: { @@ -2435,15 +2435,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 52367.08222 - tps: 41411.58942 + dps: 52524.26686 + tps: 41460.36288 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38102.13894 - tps: 18284.84228 + dps: 38224.03362 + tps: 18304.04967 } } dps_results: { @@ -2456,15 +2456,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45474.68812 - tps: 38260.20507 + dps: 45668.34687 + tps: 38414.06553 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27605.66513 - tps: 12958.01857 + dps: 27705.23367 + tps: 12971.29278 } } dps_results: { @@ -2477,14 +2477,14 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57504.33768 + dps: 57508.18226 tps: 48167.88948 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40795.94437 + dps: 40800.58854 tps: 20093.92371 } } @@ -2498,15 +2498,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49958.12438 - tps: 45485.84003 + dps: 50049.9926 + tps: 45614.12423 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29390.23767 - tps: 14424.70939 + dps: 29414.40327 + tps: 14426.74194 } } dps_results: { @@ -2519,7 +2519,7 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57947.01102 + dps: 57951.83699 tps: 47552.10983 } } @@ -2547,8 +2547,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29691.00385 - tps: 15165.19846 + dps: 29683.2886 + tps: 15164.2742 } } dps_results: { @@ -2561,14 +2561,14 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58217.35221 + dps: 58226.90822 tps: 48754.25717 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41445.44713 + dps: 41450.02816 tps: 20594.14887 } } @@ -2589,8 +2589,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29959.58275 - tps: 14878.68156 + dps: 30012.37888 + tps: 14897.02053 } } dps_results: { @@ -2631,8 +2631,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27068.82624 - tps: 13083.13294 + dps: 27066.09023 + tps: 13084.52621 } } dps_results: { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 160a918e50..377a6994c9 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2148,15 +2148,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99211.02704 - tps: 107441.53918 + dps: 100704.61683 + tps: 109005.63461 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39069.06232 - tps: 33029.49233 + dps: 39706.93445 + tps: 33473.77773 } } dps_results: { @@ -2169,15 +2169,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67420.70452 - tps: 73892.94365 + dps: 67641.49713 + tps: 74068.2799 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24189.02873 - tps: 19989.61546 + dps: 24542.51429 + tps: 20154.49504 } } dps_results: { @@ -2190,15 +2190,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99434.28356 - tps: 107683.99087 + dps: 100927.87335 + tps: 109248.08631 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39153.29374 - tps: 33104.40255 + dps: 39791.16587 + tps: 33548.68796 } } dps_results: { @@ -2211,15 +2211,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67549.02221 - tps: 74034.30858 + dps: 67769.81482 + tps: 74209.64484 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24230.24028 - tps: 20024.55654 + dps: 24583.72583 + tps: 20189.43612 } } dps_results: { @@ -2232,15 +2232,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99211.02704 - tps: 107441.53918 + dps: 100704.61683 + tps: 109005.63461 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38436.40091 - tps: 31946.27358 + dps: 38979.85104 + tps: 32293.54811 } } dps_results: { @@ -2253,15 +2253,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67420.70452 - tps: 73892.94365 + dps: 67641.49713 + tps: 74068.2799 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23822.33706 - tps: 19328.60672 + dps: 24330.14251 + tps: 19607.74072 } } dps_results: { @@ -2274,15 +2274,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99434.28356 - tps: 107683.99087 + dps: 100927.87335 + tps: 109248.08631 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38520.44791 - tps: 32020.40318 + dps: 39063.89804 + tps: 32367.67771 } } dps_results: { @@ -2295,15 +2295,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67549.02221 - tps: 74034.30858 + dps: 67769.81482 + tps: 74209.64484 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23863.37147 - tps: 19363.17854 + dps: 24371.17693 + tps: 19642.31254 } } dps_results: { @@ -2316,15 +2316,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82038.90917 - tps: 89483.40729 + dps: 82365.98605 + tps: 89645.09633 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31173.4777 - tps: 26965.24758 + dps: 31703.05064 + tps: 27219.95622 } } dps_results: { @@ -2337,15 +2337,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55916.58576 - tps: 61786.12039 + dps: 56131.036 + tps: 61893.4419 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19330.66615 - tps: 16522.61677 + dps: 19748.75557 + tps: 16750.31057 } } dps_results: { @@ -2358,15 +2358,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82225.15656 - tps: 89686.6483 + dps: 82552.23344 + tps: 89848.33734 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31242.60514 - tps: 27028.12266 + dps: 31772.17807 + tps: 27282.8313 } } dps_results: { @@ -2379,15 +2379,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56022.53855 - tps: 61903.72232 + dps: 56236.98879 + tps: 62011.04383 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19364.03526 - tps: 16551.65477 + dps: 19782.12468 + tps: 16779.34857 } } dps_results: { @@ -2400,15 +2400,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82038.90917 - tps: 89483.40729 + dps: 82365.98605 + tps: 89645.09633 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31306.04576 - tps: 26479.41786 + dps: 31685.97215 + tps: 26617.24563 } } dps_results: { @@ -2421,15 +2421,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55916.58576 - tps: 61786.12039 + dps: 56131.036 + tps: 61893.4419 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19331.01771 - tps: 16034.51161 + dps: 19718.56882 + tps: 16298.54355 } } dps_results: { @@ -2442,15 +2442,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82225.15656 - tps: 89686.6483 + dps: 82552.23344 + tps: 89848.33734 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31375.46275 - tps: 26541.74698 + dps: 31755.38913 + tps: 26679.57475 } } dps_results: { @@ -2463,15 +2463,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56022.53855 - tps: 61903.72232 + dps: 56236.98879 + tps: 62011.04383 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19364.12939 - tps: 16062.94103 + dps: 19751.68051 + tps: 16326.97296 } } dps_results: { @@ -2484,15 +2484,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150302.42224 - tps: 165303.47722 + dps: 151204.54082 + tps: 166178.35353 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50032.54808 - tps: 41206.89482 + dps: 50918.30251 + tps: 41528.29159 } } dps_results: { @@ -2505,15 +2505,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106141.39456 - tps: 118260.18406 + dps: 106636.49927 + tps: 118721.30576 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32046.12782 - tps: 25569.35157 + dps: 32674.52677 + tps: 25972.57465 } } dps_results: { @@ -2526,15 +2526,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150637.61668 - tps: 165671.4405 + dps: 151539.73526 + tps: 166546.31682 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50142.45912 - tps: 41300.35434 + dps: 51028.21354 + tps: 41621.75111 } } dps_results: { @@ -2547,15 +2547,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106343.79662 - tps: 118485.73189 + dps: 106838.90133 + tps: 118946.8536 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32102.52191 - tps: 25614.37191 + dps: 32730.92086 + tps: 26017.595 } } dps_results: { @@ -2568,15 +2568,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150302.42224 - tps: 165303.47722 + dps: 151204.54082 + tps: 166178.35353 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50122.27803 - tps: 40111.824 + dps: 50780.44348 + tps: 40463.62281 } } dps_results: { @@ -2589,15 +2589,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106141.39456 - tps: 118260.18406 + dps: 106636.49927 + tps: 118721.30576 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32058.3287 - tps: 24996.73181 + dps: 32656.31319 + tps: 25171.87865 } } dps_results: { @@ -2610,15 +2610,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150637.61668 - tps: 165671.4405 + dps: 151539.73526 + tps: 166546.31682 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50231.00007 - tps: 40203.36918 + dps: 50889.16552 + tps: 40555.16799 } } dps_results: { @@ -2631,15 +2631,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106343.79662 - tps: 118485.73189 + dps: 106838.90133 + tps: 118946.8536 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32114.12017 - tps: 25040.30142 + dps: 32712.10467 + tps: 25215.44826 } } dps_results: { @@ -2652,15 +2652,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123990.74603 - tps: 137565.33663 + dps: 125249.04384 + tps: 138815.43494 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40205.78337 - tps: 34142.47648 + dps: 40945.03019 + tps: 34584.38011 } } dps_results: { @@ -2673,15 +2673,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87962.38947 - tps: 98717.01964 + dps: 88621.28512 + tps: 99360.54444 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25325.45217 - tps: 20987.86556 + dps: 25762.2889 + tps: 21164.92535 } } dps_results: { @@ -2694,15 +2694,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124266.45005 - tps: 137869.71969 + dps: 125524.74786 + tps: 139119.81799 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40292.99608 - tps: 34218.19414 + dps: 41032.2429 + tps: 34660.09778 } } dps_results: { @@ -2715,15 +2715,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88130.62745 - tps: 98906.09083 + dps: 88789.5231 + tps: 99549.61564 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25370.51427 - tps: 21025.0931 + dps: 25807.35099 + tps: 21202.15288 } } dps_results: { @@ -2736,15 +2736,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123990.74603 - tps: 137565.33663 + dps: 125249.04384 + tps: 138815.43494 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40490.87354 - tps: 33130.52675 + dps: 41139.02737 + tps: 33397.44475 } } dps_results: { @@ -2757,15 +2757,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87962.38947 - tps: 98717.01964 + dps: 88621.28512 + tps: 99360.54444 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25650.79168 - tps: 20555.68076 + dps: 26032.39568 + tps: 20725.52598 } } dps_results: { @@ -2778,15 +2778,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124266.45005 - tps: 137869.71969 + dps: 125524.74786 + tps: 139119.81799 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40577.94843 - tps: 33204.90502 + dps: 41226.10226 + tps: 33471.82303 } } dps_results: { @@ -2799,15 +2799,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88130.62745 - tps: 98906.09083 + dps: 88789.5231 + tps: 99549.61564 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25696.07725 - tps: 20592.26147 + dps: 26077.68125 + tps: 20762.10668 } } dps_results: { @@ -2820,15 +2820,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99757.03457 - tps: 108141.13011 + dps: 100509.66867 + tps: 108669.92633 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39025.02955 - tps: 32812.02114 + dps: 39767.85176 + tps: 33163.78501 } } dps_results: { @@ -2841,15 +2841,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68387.62506 - tps: 75014.96339 + dps: 68489.15718 + tps: 75096.76206 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24150.98404 - tps: 19938.70794 + dps: 24528.72979 + tps: 20147.81239 } } dps_results: { @@ -2862,15 +2862,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99976.13937 - tps: 108379.47491 + dps: 100728.77347 + tps: 108908.27114 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39106.31618 - tps: 32884.19678 + dps: 39849.13839 + tps: 33235.96064 } } dps_results: { @@ -2883,15 +2883,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68511.82454 - tps: 75151.88376 + dps: 68613.35666 + tps: 75233.68242 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24190.76865 - tps: 19972.44476 + dps: 24568.5144 + tps: 20181.54922 } } dps_results: { @@ -2904,15 +2904,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99757.03457 - tps: 108141.13011 + dps: 100509.66867 + tps: 108669.92633 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38327.31801 - tps: 31747.73627 + dps: 39110.0777 + tps: 32273.82621 } } dps_results: { @@ -2925,15 +2925,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68387.62506 - tps: 75014.96339 + dps: 68489.15718 + tps: 75096.76206 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24005.26155 - tps: 19483.35092 + dps: 24461.58088 + tps: 19722.24527 } } dps_results: { @@ -2946,15 +2946,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99976.13937 - tps: 108379.47491 + dps: 100728.77347 + tps: 108908.27114 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38407.37719 - tps: 31818.1934 + dps: 39190.13689 + tps: 32344.28335 } } dps_results: { @@ -2967,15 +2967,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68511.82454 - tps: 75151.88376 + dps: 68613.35666 + tps: 75233.68242 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24044.4382 - tps: 19516.16279 + dps: 24500.75752 + tps: 19755.05714 } } dps_results: { @@ -2988,15 +2988,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82768.75209 - tps: 90319.85774 + dps: 83401.34936 + tps: 90776.69589 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31240.66184 - tps: 26962.23215 + dps: 32120.2647 + tps: 27547.55633 } } dps_results: { @@ -3009,15 +3009,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56104.65224 - tps: 62050.47397 + dps: 56118.24871 + tps: 61998.88995 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19570.06581 - tps: 16697.41969 + dps: 19877.44362 + tps: 16876.86544 } } dps_results: { @@ -3030,15 +3030,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82950.15416 - tps: 90518.17866 + dps: 83582.75142 + tps: 90975.01681 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31306.45962 - tps: 27021.84798 + dps: 32186.06249 + tps: 27607.17216 } } dps_results: { @@ -3051,15 +3051,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56207.64635 - tps: 62164.84459 + dps: 56221.24282 + tps: 62113.26058 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19602.45457 - tps: 16725.60712 + dps: 19909.83238 + tps: 16905.05287 } } dps_results: { @@ -3072,15 +3072,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82768.75209 - tps: 90319.85774 + dps: 83401.34936 + tps: 90776.69589 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31020.1061 - tps: 26177.09129 + dps: 31755.65473 + tps: 26572.12156 } } dps_results: { @@ -3093,15 +3093,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56104.65224 - tps: 62050.47397 + dps: 56118.24871 + tps: 61998.88995 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19488.94795 - tps: 16080.99475 + dps: 19862.33986 + tps: 16300.89755 } } dps_results: { @@ -3114,15 +3114,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82950.15416 - tps: 90518.17866 + dps: 83582.75142 + tps: 90975.01681 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31086.87903 - tps: 26236.89234 + dps: 31822.42766 + tps: 26631.9226 } } dps_results: { @@ -3135,15 +3135,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56207.64635 - tps: 62164.84459 + dps: 56221.24282 + tps: 62113.26058 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19520.72308 - tps: 16108.03058 + dps: 19894.11499 + tps: 16327.93338 } } dps_results: { @@ -3156,15 +3156,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149775.45575 - tps: 165126.33125 + dps: 151530.98758 + tps: 166872.70552 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49609.7778 - tps: 40625.00693 + dps: 50581.47122 + tps: 41164.38129 } } dps_results: { @@ -3177,15 +3177,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106335.57406 - tps: 118382.94203 + dps: 107137.84711 + tps: 119169.00639 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32047.09952 - tps: 25601.04217 + dps: 32557.51354 + tps: 25884.28718 } } dps_results: { @@ -3198,15 +3198,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150099.37892 - tps: 165482.93005 + dps: 151854.91076 + tps: 167229.30433 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49712.4737 - tps: 40711.03891 + dps: 50684.16711 + tps: 41250.41327 } } dps_results: { @@ -3219,15 +3219,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106534.98067 - tps: 118605.55639 + dps: 107337.25373 + tps: 119391.62075 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32101.87101 - tps: 25644.49286 + dps: 32612.28503 + tps: 25927.73786 } } dps_results: { @@ -3240,15 +3240,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149775.45575 - tps: 165126.33125 + dps: 151530.98758 + tps: 166872.70552 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49846.6356 - tps: 39800.73183 + dps: 50605.37013 + tps: 40111.63275 } } dps_results: { @@ -3261,15 +3261,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106335.57406 - tps: 118382.94203 + dps: 107137.84711 + tps: 119169.00639 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32258.40248 - tps: 25067.0997 + dps: 32953.47915 + tps: 25431.90718 } } dps_results: { @@ -3282,15 +3282,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150099.37892 - tps: 165482.93005 + dps: 151854.91076 + tps: 167229.30433 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49949.52053 - tps: 39885.99347 + dps: 50708.25506 + tps: 40196.89439 } } dps_results: { @@ -3303,15 +3303,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106534.98067 - tps: 118605.55639 + dps: 107337.25373 + tps: 119391.62075 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32312.85669 - tps: 25109.59371 + dps: 33007.93335 + tps: 25474.4012 } } dps_results: { @@ -3324,15 +3324,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123559.71053 - tps: 136944.95692 + dps: 124585.70425 + tps: 137972.544 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39443.45494 - tps: 33277.97974 + dps: 40344.40353 + tps: 33942.40453 } } dps_results: { @@ -3345,15 +3345,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88288.13706 - tps: 99105.10789 + dps: 88770.62353 + tps: 99612.4096 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25176.12747 - tps: 20728.23232 + dps: 25705.63998 + tps: 21056.74015 } } dps_results: { @@ -3366,15 +3366,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123828.36109 - tps: 137242.05538 + dps: 124854.35481 + tps: 138269.64246 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39526.26036 - tps: 33349.39316 + dps: 40427.20895 + tps: 34013.81795 } } dps_results: { @@ -3387,15 +3387,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88452.93884 - tps: 99290.37326 + dps: 88935.4253 + tps: 99797.67497 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25220.64679 - tps: 20764.48368 + dps: 25750.1593 + tps: 21092.99152 } } dps_results: { @@ -3408,15 +3408,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123559.71053 - tps: 136944.95692 + dps: 124585.70425 + tps: 137972.544 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40225.04449 - tps: 32979.70174 + dps: 40888.77686 + tps: 33209.83775 } } dps_results: { @@ -3429,15 +3429,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88288.13706 - tps: 99105.10789 + dps: 88770.62353 + tps: 99612.4096 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25909.41891 - tps: 20666.82123 + dps: 26382.81781 + tps: 20872.08823 } } dps_results: { @@ -3450,15 +3450,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123828.36109 - tps: 137242.05538 + dps: 124854.35481 + tps: 138269.64246 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40308.01473 - tps: 33049.91329 + dps: 40971.7471 + tps: 33280.04931 } } dps_results: { @@ -3471,15 +3471,15 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88452.93884 - tps: 99290.37326 + dps: 88935.4253 + tps: 99797.67497 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25953.42884 - tps: 20701.98855 + dps: 26426.82774 + tps: 20907.25555 } } dps_results: { From dc53ed1bc74b62cd472af1b4ee5fb4acc50a1af6 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 16 Dec 2024 12:30:03 +0100 Subject: [PATCH 028/127] PR feedback #1 --- makefile | 2 +- sim/common/shared/shared_utils.go | 4 +- sim/core/apl_actions_casting.go | 13 +- sim/core/character.go | 1 - sim/core/item_swaps.go | 16 +- sim/core/test_generators.go | 4 +- sim/death_knight/blood/TestBlood.results | 48 +-- sim/death_knight/frost/TestFrost.results | 72 ++--- sim/death_knight/unholy/TestUnholy.results | 24 +- sim/druid/balance/TestBalance.results | 48 +-- sim/druid/feral/TestFeral.results | 288 +++++++++--------- sim/druid/guardian/TestGuardian.results | 24 +- sim/hunter/beast_mastery/TestBM.results | 48 +-- sim/hunter/marksmanship/TestMM.results | 24 +- sim/hunter/survival/TestSV.results | 48 +-- sim/mage/arcane/TestArcane.results | 12 +- sim/mage/fire/TestFire.results | 24 +- sim/paladin/protection/TestProtection.results | 24 +- .../retribution/TestRetribution.results | 108 +++---- sim/priest/shadow/TestShadow.results | 36 +-- .../assassination/TestAssassination.results | 288 +++++++++--------- sim/rogue/combat/TestCombat.results | 288 +++++++++--------- sim/rogue/subtlety/TestSubtlety.results | 288 +++++++++--------- sim/shaman/elemental/TestElemental.results | 216 ++++++------- .../enhancement/TestEnhancement.results | 36 +-- sim/warlock/affliction/TestAffliction.results | 48 +-- sim/warlock/demonology/TestDemonology.results | 192 ++++++------ .../destruction/TestDestruction.results | 48 +-- sim/warrior/arms/TestArms.results | 48 +-- .../protection/TestProtectionWarrior.results | 72 ++--- 30 files changed, 1192 insertions(+), 1200 deletions(-) diff --git a/makefile b/makefile index 9abb8cbf64..b8b02800d9 100644 --- a/makefile +++ b/makefile @@ -241,7 +241,7 @@ sim/core/items/all_items.go: $(call rwildcard,tools/database,*.go) $(call rwildc .PHONY: test test: $(OUT_DIR)/lib.wasm binary_dist/dist.go - go test --tags=with_db ./sim/... + go test --tags=with_db ./sim/paladin/retribution/... .PHONY: update-tests update-tests: diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index a52a276495..27884cb216 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -88,7 +88,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c var itemSwapProcCondition core.CustomStatBuffProcCondition if character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(config.ID) { - itemSwapProcCondition = func(sim *core.Simulation, aura *core.Aura) bool { + itemSwapProcCondition = func(_ *core.Simulation, aura *core.Aura) bool { return character.ItemSwap.HasItemEquipped(config.ID) } } @@ -107,7 +107,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c procAura.CustomProcCondition = itemSwapProcCondition } - if config.CustomProcCondition != nil { + if procAura.CustomProcCondition != nil { customHandler = func(sim *core.Simulation, procAura *core.StatBuffAura) { if procAura.CanProc(sim) { procAura.Activate(sim) diff --git a/sim/core/apl_actions_casting.go b/sim/core/apl_actions_casting.go index f719c95c2d..79d84ecff4 100644 --- a/sim/core/apl_actions_casting.go +++ b/sim/core/apl_actions_casting.go @@ -302,13 +302,13 @@ func (action *APLActionCastAllStatBuffCooldowns) processMajorCooldowns() { } }) } -func (action *APLActionCastAllStatBuffCooldowns) getEquippedSubActions(actions []*APLActionCastSpell) []*APLActionCastSpell { - return FilterSlice(actions, func(subAction *APLActionCastSpell) bool { +func (action *APLActionCastAllStatBuffCooldowns) getEquippedSubActions() []*APLActionCastSpell { + return FilterSlice(action.allSubactions, func(subAction *APLActionCastSpell) bool { return !subAction.spell.Flags.Matches(SpellFlagSwapped) }) } func (action *APLActionCastAllStatBuffCooldowns) IsReady(sim *Simulation) bool { - action.allEquippedSubactions = action.getEquippedSubActions(action.allSubactions) + action.allEquippedSubactions = action.getEquippedSubActions() action.readySubactions = FilterSlice(action.allEquippedSubactions, func(subAction *APLActionCastSpell) bool { return subAction.IsReady(sim) }) @@ -316,8 +316,11 @@ func (action *APLActionCastAllStatBuffCooldowns) IsReady(sim *Simulation) bool { return Ternary(action.character.Rotation.inSequence, len(action.readySubactions) == len(action.allEquippedSubactions), len(action.readySubactions) > 0) } func (action *APLActionCastAllStatBuffCooldowns) Execute(sim *Simulation) { - action.allEquippedSubactions = action.getEquippedSubActions(action.allSubactions) - actionSetToUse := Ternary(sim.CurrentTime < 0, action.allEquippedSubactions, action.readySubactions) + actionSetToUse := action.readySubactions + + if sim.CurrentTime < 0 { + actionSetToUse = action.getEquippedSubActions() + } for _, subaction := range actionSetToUse { subaction.Execute(sim) diff --git a/sim/core/character.go b/sim/core/character.go index 59f9a9259b..de30dd2964 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -643,7 +643,6 @@ func (character *Character) doneIteration(sim *Simulation) { character.Metrics.AddFinalPetMetrics(&pet.Metrics) } - character.ItemSwap.doneIteration(sim) character.Unit.doneIteration(sim) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 4f05a74926..cb31af3046 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -272,12 +272,7 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { } func (swap *ItemSwap) GetItemSwapItemSlot(itemID int32) proto.ItemSlot { - var slotsToCheck Equipment - if swap.IsSwapped() { - slotsToCheck = swap.originalEquip - } else { - slotsToCheck = swap.swapEquip - } + slotsToCheck := Ternary(swap.IsSwapped(), swap.originalEquip, swap.swapEquip) for slot, item := range slotsToCheck { if item.ID == itemID { return proto.ItemSlot(slot) @@ -349,8 +344,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap // If GCD is ready then use the GCD, otherwise we assume it's being used along side a spell. if character.GCD.IsReady(sim) { - newGCD := sim.CurrentTime + 1500*time.Millisecond - character.SetGCDTimer(sim, newGCD) + character.ExtendGCDUntil(sim, max(character.NextGCDAt(), sim.CurrentTime+GCDDefault)) } } @@ -432,12 +426,6 @@ func (swap *ItemSwap) reset(sim *Simulation) { swap.initialized = true } -func (swap *ItemSwap) doneIteration(_ *Simulation) { - if !swap.IsEnabled() || !swap.IsSwapped() { - return - } -} - func toItem(itemSpec *proto.ItemSpec) Item { if itemSpec == nil || itemSpec.Id == 0 { return Item{} diff --git a/sim/core/test_generators.go b/sim/core/test_generators.go index fc25c95c27..0c6f979c1e 100644 --- a/sim/core/test_generators.go +++ b/sim/core/test_generators.go @@ -167,7 +167,9 @@ func (combos *SettingsCombos) GetTest(testIdx int) (string, *proto.ComputeStatsR testIdx /= len(combos.ItemSwapSets) itemSwapSetCombo = combos.ItemSwapSets[itemSwapSetIdx] enableItemSwap = true - testNameParts = append(testNameParts, itemSwapSetCombo.Label) + if len(combos.ItemSwapSets) > 1 { + testNameParts = append(testNameParts, itemSwapSetCombo.Label) + } } buffsIdx := testIdx % len(combos.Buffs) diff --git a/sim/death_knight/blood/TestBlood.results b/sim/death_knight/blood/TestBlood.results index 655c1dd3d8..9e8860c33a 100644 --- a/sim/death_knight/blood/TestBlood.results +++ b/sim/death_knight/blood/TestBlood.results @@ -2293,7 +2293,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24669.85523 tps: 120643.56874 @@ -2301,7 +2301,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 19505.877 tps: 95924.98705 @@ -2309,7 +2309,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 26132.02139 tps: 118365.59295 @@ -2317,7 +2317,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19154.14953 tps: 93195.9648 @@ -2325,7 +2325,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15069.29914 tps: 73750.28449 @@ -2333,7 +2333,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p1-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p1-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18672.63407 tps: 82987.33494 @@ -2341,7 +2341,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28660.19622 tps: 140958.48133 @@ -2349,7 +2349,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23217.93007 tps: 115632.32683 @@ -2357,7 +2357,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29683.00038 tps: 139281.23777 @@ -2365,7 +2365,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22478.78068 tps: 109939.54051 @@ -2373,7 +2373,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17966.08172 tps: 88880.86551 @@ -2381,7 +2381,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Orc-p3-balanced-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21208.05933 tps: 97602.19451 @@ -2389,7 +2389,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24547.23525 tps: 120980.30688 @@ -2397,7 +2397,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 19379.42536 tps: 96063.81141 @@ -2405,7 +2405,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 25750.72802 tps: 117377.23303 @@ -2413,7 +2413,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19043.36736 tps: 93479.17461 @@ -2421,7 +2421,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14973.94396 tps: 73871.71197 @@ -2429,7 +2429,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p1-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p1-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18370.65141 tps: 82020.75562 @@ -2437,7 +2437,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28559.46187 tps: 141535.1594 @@ -2445,7 +2445,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23105.86989 tps: 116023.44281 @@ -2453,7 +2453,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29366.16779 tps: 138656.3931 @@ -2461,7 +2461,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22348.36641 tps: 110172.54885 @@ -2469,7 +2469,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17875.78122 tps: 89159.12178 @@ -2477,7 +2477,7 @@ dps_results: { } } dps_results: { - key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBlood-Settings-Worgen-p3-balanced-Basic-simple-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20955.23537 tps: 97032.37878 diff --git a/sim/death_knight/frost/TestFrost.results b/sim/death_knight/frost/TestFrost.results index b9dbbffedc..e174e0fa58 100644 --- a/sim/death_knight/frost/TestFrost.results +++ b/sim/death_knight/frost/TestFrost.results @@ -2356,7 +2356,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 137721.33838 tps: 135182.56896 @@ -2364,7 +2364,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40728.43781 tps: 38217.19253 @@ -2372,7 +2372,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50528.20297 tps: 44368.01304 @@ -2380,7 +2380,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 91005.76327 tps: 89207.51451 @@ -2388,7 +2388,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27186.03875 tps: 25424.62637 @@ -2396,7 +2396,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31712.56899 tps: 27222.6271 @@ -2404,7 +2404,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 131634.45728 tps: 129092.96936 @@ -2412,7 +2412,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40142.58753 tps: 37674.18284 @@ -2420,7 +2420,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49970.06375 tps: 43827.96731 @@ -2428,7 +2428,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 87361.11696 tps: 85586.8902 @@ -2436,7 +2436,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27002.45946 tps: 25255.54418 @@ -2444,7 +2444,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31505.08336 tps: 26986.62098 @@ -2452,7 +2452,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 122767.5033 tps: 120345.57298 @@ -2460,7 +2460,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30553.16477 tps: 28106.04307 @@ -2468,7 +2468,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38835.93118 tps: 32747.02713 @@ -2476,7 +2476,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80683.31556 tps: 78981.71336 @@ -2484,7 +2484,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 20151.55211 tps: 18448.08132 @@ -2492,7 +2492,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Orc-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 23929.81508 tps: 19436.86871 @@ -2500,7 +2500,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 138356.07867 tps: 135876.49837 @@ -2508,7 +2508,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40388.36613 tps: 37956.53571 @@ -2516,7 +2516,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50111.0823 tps: 44112.02541 @@ -2524,7 +2524,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 90558.62791 tps: 88820.87306 @@ -2532,7 +2532,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27037.26977 tps: 25324.42741 @@ -2540,7 +2540,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DefaultTalents-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31461.53397 tps: 27060.24209 @@ -2548,7 +2548,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 132109.842 tps: 129640.43576 @@ -2556,7 +2556,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40204.49601 tps: 37768.96736 @@ -2564,7 +2564,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49320.11947 tps: 43312.14648 @@ -2572,7 +2572,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 86798.38196 tps: 85090.43778 @@ -2580,7 +2580,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26837.90326 tps: 25128.15421 @@ -2588,7 +2588,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-DualWield-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31325.83897 tps: 26893.18841 @@ -2596,7 +2596,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 122551.09528 tps: 120229.85276 @@ -2604,7 +2604,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30300.37543 tps: 27935.4463 @@ -2612,7 +2612,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38366.37359 tps: 32412.13267 @@ -2620,7 +2620,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 80034.1915 tps: 78378.67504 @@ -2628,7 +2628,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 20055.40831 tps: 18402.23803 @@ -2636,7 +2636,7 @@ dps_results: { } } dps_results: { - key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFrost-Settings-Worgen-p3.masterfrost-TwoHand-Basic-masterfrost-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 23817.1829 tps: 19389.9972 diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 9cd3f6a15c..2b27b5fe84 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -2292,7 +2292,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 74276.71771 tps: 88202.02112 @@ -2300,7 +2300,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42032.12841 tps: 31192.40381 @@ -2308,7 +2308,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 55251.6112 tps: 35507.81174 @@ -2316,7 +2316,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 47136.68691 tps: 55693.50917 @@ -2324,7 +2324,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26785.48412 tps: 20231.50952 @@ -2332,7 +2332,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Orc-p3.bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Orc-p3.bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31978.40811 tps: 21924.5209 @@ -2340,7 +2340,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 73897.48002 tps: 88441.98205 @@ -2348,7 +2348,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41582.23045 tps: 31241.51489 @@ -2356,7 +2356,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54271.66732 tps: 35416.34748 @@ -2364,7 +2364,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 47002.09355 tps: 56003.19612 @@ -2372,7 +2372,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26615.1603 tps: 20322.05493 @@ -2380,7 +2380,7 @@ dps_results: { } } dps_results: { - key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestUnholy-Settings-Worgen-p3.bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31593.31655 tps: 21851.88132 diff --git a/sim/druid/balance/TestBalance.results b/sim/druid/balance/TestBalance.results index 53efc19b02..ab065d9eb1 100644 --- a/sim/druid/balance/TestBalance.results +++ b/sim/druid/balance/TestBalance.results @@ -2076,168 +2076,168 @@ dps_results: { } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 34242.97212 tps: 42646.49644 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29087.53113 tps: 29109.91469 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37864.75401 tps: 37117.04129 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23052.41762 tps: 31102.27381 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19371.9344 tps: 19524.06328 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t11--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20169.69037 tps: 20026.31941 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 34254.61251 tps: 42702.03228 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29069.49744 tps: 29095.08398 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37935.3411 tps: 37190.20525 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23120.36448 tps: 31194.68044 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19405.9333 tps: 19559.16505 } } dps_results: { - key: "TestBalance-Settings-NightElf-t11-Default-t12--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t11-Default-t12-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20168.8907 tps: 20027.48307 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52158.10466 tps: 51010.03837 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38693.42443 tps: 35530.49664 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47482.88079 tps: 42986.92394 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35336.17272 tps: 37806.66736 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26347.90242 tps: 24203.42655 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t11--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t11-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26896.28273 tps: 24391.07684 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52195.59824 tps: 51760.63211 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38920.06884 tps: 35897.99273 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47541.13119 tps: 43399.18718 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-LongMultiTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35743.70826 tps: 38241.79304 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-LongSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26352.92629 tps: 24304.8779 } } dps_results: { - key: "TestBalance-Settings-NightElf-t12-Default-t12--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestBalance-Settings-NightElf-t12-Default-t12-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 26958.63748 tps: 24633.07138 diff --git a/sim/druid/feral/TestFeral.results b/sim/druid/feral/TestFeral.results index f819981408..27c9cdc23f 100644 --- a/sim/druid/feral/TestFeral.results +++ b/sim/druid/feral/TestFeral.results @@ -2076,1008 +2076,1008 @@ dps_results: { } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 86292.03346 tps: 118500.8143 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20970.62858 tps: 37294.36815 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24707.0993 tps: 33995.72405 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58755.87266 tps: 82348.848 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12882.95466 tps: 23135.27449 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13225.96312 tps: 22706.37043 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39360.24626 tps: 51328.31672 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39048.05284 tps: 51769.5999 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50455.38315 tps: 43161.69317 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25055.31254 tps: 33287.01434 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25313.9951 tps: 36100.23259 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28190.16666 tps: 26903.98973 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38352.92932 tps: 27232.84045 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38118.37241 tps: 27064.04441 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49740.79453 tps: 35315.96411 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24019.47012 tps: 17056.18667 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24190.13987 tps: 17175.20947 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27841.50702 tps: 19768.03798 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 85955.7798 tps: 118431.25768 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20810.86501 tps: 36280.64342 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24524.35176 tps: 32547.8982 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58414.12487 tps: 81735.49585 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12787.19186 tps: 22826.73124 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13213.72333 tps: 23274.03432 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38498.35903 tps: 49229.12315 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38144.38129 tps: 48726.93602 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48683.78869 tps: 41484.40671 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24529.97483 tps: 32244.28671 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24680.53841 tps: 32446.32967 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27124.58676 tps: 24868.04213 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 37686.00003 tps: 26759.32066 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37275.8464 tps: 26465.85094 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48377.68065 tps: 34348.15326 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23603.43675 tps: 16760.80297 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 23677.18868 tps: 16811.01412 } } dps_results: { - key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26854.57624 tps: 19067.31713 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 78247.04285 tps: 108393.35403 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17981.77233 tps: 30858.15887 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 21383.40409 tps: 27093.10343 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52512.91425 tps: 75252.76175 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 11021.59613 tps: 19772.26994 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11369.52015 tps: 18565.21784 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 33421.02321 tps: 47042.89264 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 33149.28611 tps: 47582.65367 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 41412.68011 tps: 41938.56382 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 20910.18842 tps: 30390.9821 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 21144.82648 tps: 31826.73714 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22972.25377 tps: 25221.30858 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32371.66289 tps: 22986.14129 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31752.1838 tps: 22544.0505 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40440.20439 tps: 28712.54512 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19940.34532 tps: 14160.00806 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20066.65269 tps: 14247.53357 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22418.59778 tps: 15917.77243 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 78000.17217 tps: 110492.29064 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17858.12543 tps: 30223.63576 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 21130.12504 tps: 26448.3554 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52170.41365 tps: 73791.30283 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10927.66354 tps: 19284.64691 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11267.92074 tps: 18701.15693 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32916.87371 tps: 47154.3542 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 32203.61274 tps: 45965.75615 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40815.67099 tps: 41133.08591 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 20295.70718 tps: 28921.52771 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20502.06699 tps: 30347.72199 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22271.61635 tps: 24903.60554 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 31703.80861 tps: 22511.96475 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31130.40875 tps: 22102.59021 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39898.55068 tps: 28327.97098 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19433.61796 tps: 13800.23163 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19505.21525 tps: 13848.91299 } } dps_results: { - key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Troll-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 21846.47003 tps: 15511.56172 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 86026.40476 tps: 118416.76541 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20878.88027 tps: 36867.76597 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24511.1196 tps: 34741.70326 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58922.22321 tps: 84460.02523 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12934.79932 tps: 23864.45666 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13052.84442 tps: 23268.1739 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39495.2722 tps: 52972.76594 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39097.0607 tps: 51899.5222 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49778.04677 tps: 44285.73108 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24975.05701 tps: 33565.0638 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25394.17898 tps: 35843.29309 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27846.34598 tps: 27522.05444 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38342.08465 tps: 27225.14074 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37903.99639 tps: 26911.83744 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 49260.74102 tps: 34975.12612 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24122.06499 tps: 17129.02902 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24238.6946 tps: 17209.68332 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27504.48667 tps: 19528.75354 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 85568.31855 tps: 119900.91686 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 20818.57341 tps: 36065.28934 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 24137.66298 tps: 32057.31373 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 58825.18782 tps: 84893.238 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 12894.97603 tps: 23123.94507 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 13061.60631 tps: 23211.79672 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38592.52738 tps: 50261.6846 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38148.80757 tps: 50197.35442 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 48098.57458 tps: 42079.20521 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 24315.06425 tps: 32218.73384 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 24506.07496 tps: 33892.97251 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26725.06359 tps: 25297.44611 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 37604.92001 tps: 26701.75384 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37058.34666 tps: 26311.42613 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 47845.80387 tps: 33970.52074 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 23496.76745 tps: 16685.06777 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 23586.41283 tps: 16746.56327 } } dps_results: { - key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-p3-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 26447.78298 tps: 18778.49392 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 78098.4913 tps: 109817.63661 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17969.50991 tps: 31565.48041 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 20873.98316 tps: 27436.53246 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52997.93474 tps: 76888.80568 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10941.62643 tps: 19913.36998 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11164.20146 tps: 19159.50472 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 33351.44339 tps: 47003.12191 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 33039.01896 tps: 47925.46561 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 40918.91613 tps: 42132.5583 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 20830.79563 tps: 30166.32385 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20943.15484 tps: 31507.23917 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22651.37779 tps: 26349.54927 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32231.03239 tps: 22886.29364 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 31693.72241 tps: 22502.54291 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39880.92147 tps: 28315.45424 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19950.57448 tps: 14167.27076 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19992.96983 tps: 14195.21874 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-DefaultTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22187.27908 tps: 15753.53615 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 77256.82522 tps: 108340.98968 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 17799.55346 tps: 30720.79932 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 20785.72101 tps: 26325.2336 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 52727.9922 tps: 76621.2923 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 10973.06732 tps: 19995.63943 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-aoe-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 11067.14016 tps: 20351.84002 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 32617.97455 tps: 45589.2227 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 32018.25831 tps: 45082.36252 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39760.9316 tps: 40401.80493 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 20297.83841 tps: 29049.22276 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 20418.02566 tps: 29973.4874 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 22049.23212 tps: 25258.82049 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 31532.29716 tps: 22390.19163 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 30870.32492 tps: 21917.9307 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 39072.42468 tps: 27741.42152 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongMultiTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 19368.10438 tps: 13753.71699 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-LongSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 19462.16591 tps: 13818.34796 } } dps_results: { - key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestFeral-Settings-Worgen-preraid-HybridTalents-ExternalBleed-monocat-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 21588.61736 tps: 15328.48632 diff --git a/sim/druid/guardian/TestGuardian.results b/sim/druid/guardian/TestGuardian.results index b12734503b..935fce971b 100644 --- a/sim/druid/guardian/TestGuardian.results +++ b/sim/druid/guardian/TestGuardian.results @@ -2365,7 +2365,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29403.35693 tps: 147863.97881 @@ -2373,7 +2373,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 12818.07747 tps: 64164.11358 @@ -2381,7 +2381,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 14854.11787 tps: 74350.4081 @@ -2389,7 +2389,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 20235.5556 tps: 102408.6405 @@ -2397,7 +2397,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 8500.69959 tps: 42584.4238 @@ -2405,7 +2405,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-p3-Default-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-p3-Default-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 8745.58682 tps: 43816.70078 @@ -2413,7 +2413,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26137.59873 tps: 131478.83696 @@ -2421,7 +2421,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 10927.10046 tps: 54703.99314 @@ -2429,7 +2429,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12716.35061 tps: 63657.51139 @@ -2437,7 +2437,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17897.2269 tps: 90651.56115 @@ -2445,7 +2445,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7367.8858 tps: 36916.19732 @@ -2453,7 +2453,7 @@ dps_results: { } } dps_results: { - key: "TestGuardian-Settings-Worgen-preraid-Default-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestGuardian-Settings-Worgen-preraid-Default-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7460.07698 tps: 37383.25992 diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index 5cfe035684..cf69f34b53 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -2191,168 +2191,168 @@ dps_results: { } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30726.06928 tps: 19671.02786 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18466.81112 tps: 11362.90752 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24956.12702 tps: 16060.04019 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30726.06928 tps: 19671.02786 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17057.2308 tps: 10853.50557 } } dps_results: { - key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Dwarf-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18466.81112 tps: 11362.90752 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31653.06666 tps: 19823.34671 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19122.56502 tps: 11487.28282 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 25512.49225 tps: 16084.64157 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31653.06666 tps: 19823.34671 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongMultiTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-LongSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17470.14077 tps: 10862.9549 } } dps_results: { - key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestBM-Settings-Orc-preraid_bm-Basic-bm_advanced-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19122.56502 tps: 11487.28282 diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index 2f02eeb327..5fc4ea4fe9 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -2191,84 +2191,84 @@ dps_results: { } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25234.67259 tps: 22939.59865 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 23926.16484 tps: 21620.21352 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 30602.78207 tps: 27550.4884 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17078.18121 tps: 15441.49219 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16140.95943 tps: 14529.4337 } } dps_results: { - key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Dwarf-preraid_mm-Basic-mm-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18686.74121 tps: 16847.20962 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 25499.34834 tps: 23061.2516 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24101.199 tps: 21653.78721 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 31187.00626 tps: 27927.49919 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongMultiTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 17237.49841 tps: 15504.65828 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-LongSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16265.91268 tps: 14556.98283 } } dps_results: { - key: "TestMM-Settings-Orc-preraid_mm-Basic-mm--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestMM-Settings-Orc-preraid_mm-Basic-mm-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 19007.11435 tps: 17038.34883 diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 0c39e41f82..2cf33f5c9d 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -2191,168 +2191,168 @@ dps_results: { } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 141350.48112 tps: 114532.75506 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 23838.18081 tps: 21134.21672 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 28606.75417 tps: 25061.00716 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 101432.61349 tps: 82041.63252 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 16908.69529 tps: 15060.59128 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18082.37819 tps: 15996.81466 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 32695.80736 tps: 29931.06022 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 29950.60203 tps: 27197.95645 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 35957.46745 tps: 32517.93922 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 22889.25171 tps: 20965.75785 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 21138.21538 tps: 19221.97155 } } dps_results: { - key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 23133.41368 tps: 20987.39868 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 141988.12159 tps: 115062.45123 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 24029.05099 tps: 21177.25416 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 28992.65963 tps: 25218.25242 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 101929.59512 tps: 82477.88376 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 17046.36052 tps: 15078.90179 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 18390.66544 tps: 16166.60864 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { dps: 33031.54048 tps: 30102.03081 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { dps: 30154.19972 tps: 27237.63164 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--FullBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { dps: 36434.92152 tps: 32771.89303 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongMultiTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { dps: 23119.03409 tps: 21079.14836 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-LongSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { dps: 21276.27813 tps: 19244.58352 } } dps_results: { - key: "TestSV-Settings-Orc-preraid_sv-Basic-sv--NoBuffs-5.1yards-ShortSingleTarget" + key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { dps: 23447.13315 tps: 21159.45718 diff --git a/sim/mage/arcane/TestArcane.results b/sim/mage/arcane/TestArcane.results index fd3963d458..619d7f470f 100644 --- a/sim/mage/arcane/TestArcane.results +++ b/sim/mage/arcane/TestArcane.results @@ -2058,42 +2058,42 @@ dps_results: { } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-LongMultiTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39369.26986 tps: 52234.00664 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-LongSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39387.35327 tps: 36087.42152 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58246.22784 tps: 54148.68182 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-LongMultiTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25161.59514 tps: 38550.61187 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-LongSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25161.59514 tps: 22996.26214 } } dps_results: { - key: "TestArcane-Settings-Troll-p3-Arcane-arcane--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArcane-Settings-Troll-p3-Arcane-arcane-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31962.09909 tps: 29595.29282 diff --git a/sim/mage/fire/TestFire.results b/sim/mage/fire/TestFire.results index 5d11c87495..80153672ab 100644 --- a/sim/mage/fire/TestFire.results +++ b/sim/mage/fire/TestFire.results @@ -2058,84 +2058,84 @@ dps_results: { } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 97578.28393 tps: 62069.46862 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39234.46869 tps: 34964.17853 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50200.88547 tps: 45055.37509 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 68170.16139 tps: 45334.71048 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27446.2762 tps: 24335.30703 } } dps_results: { - key: "TestFire-Settings-Troll-p3_fire-Fire-fire--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Troll-p3_fire-Fire-fire-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30223.26691 tps: 26647.08263 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 92850.97693 tps: 60029.84011 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37884.23584 tps: 33670.35537 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45202.68398 tps: 40046.9221 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-LongMultiTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 68585.37495 tps: 45378.81765 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-LongSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26414.36298 tps: 23393.68201 } } dps_results: { - key: "TestFire-Settings-Worgen-p3_fire-Fire-fire--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestFire-Settings-Worgen-p3_fire-Fire-fire-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 27767.59615 tps: 24433.67382 diff --git a/sim/paladin/protection/TestProtection.results b/sim/paladin/protection/TestProtection.results index c95300ebb8..223c1d6c2c 100644 --- a/sim/paladin/protection/TestProtection.results +++ b/sim/paladin/protection/TestProtection.results @@ -2047,84 +2047,84 @@ dps_results: { } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 50806.89786 tps: 260888.77446 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 11278.21562 tps: 56693.81531 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12987.66802 tps: 65259.3785 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 29057.0603 tps: 151459.28518 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7076.26055 tps: 35675.0222 } } dps_results: { - key: "TestProtection-Settings-BloodElf-T12-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-BloodElf-T12-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7729.57184 tps: 38919.35605 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 50499.47065 tps: 259173.95323 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 11289.17862 tps: 56744.36519 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 12992.2414 tps: 65276.178 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28687.61387 tps: 149466.34101 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 7019.45558 tps: 35382.92059 } } dps_results: { - key: "TestProtection-Settings-Human-T12-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtection-Settings-Human-T12-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 7707.0907 tps: 38795.39057 diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index 6cadb98aa7..66d36157ee 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -2048,378 +2048,378 @@ dps_results: { } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 36714.4505 tps: 40967.21073 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 32034.29745 tps: 31920.38175 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44634.27709 tps: 43078.51416 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21072.43497 tps: 25214.36209 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19266.08949 tps: 19171.41363 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24839.73797 tps: 23440.61198 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37341.91121 tps: 41607.99136 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 32453.57829 tps: 32344.41421 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43780.24692 tps: 42244.60904 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21084.32526 tps: 25199.86828 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19354.01471 tps: 19259.37284 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24182.53713 tps: 22786.19293 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 36013.23729 tps: 40291.47893 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31579.48682 tps: 31471.12742 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44169.09252 tps: 42624.39821 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21315.99669 tps: 25734.8604 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18766.42311 tps: 18684.34107 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24220.92272 tps: 22825.02187 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 43548.05123 tps: 47303.62101 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39265.25774 tps: 39135.04001 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54180.27596 tps: 52557.29137 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25905.33336 tps: 29696.56442 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23939.03358 tps: 23825.58482 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30444.60314 tps: 29010.2181 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 43082.23065 tps: 46955.82357 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38574.31156 tps: 38439.95287 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54162.49471 tps: 52534.01735 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25556.35426 tps: 29286.72754 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23558.73598 tps: 23452.63207 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30710.57761 tps: 29284.19784 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 43082.23065 tps: 46955.82357 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38574.31156 tps: 38439.95287 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54162.49471 tps: 52534.01735 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25556.35426 tps: 29286.72754 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23558.73598 tps: 23452.63207 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30710.57761 tps: 29284.19784 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 57499.24171 tps: 59496.61194 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 51226.04298 tps: 48558.59482 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 67472.92644 tps: 63776.0585 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35712.68649 tps: 38040.56499 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32457.2443 tps: 30200.03345 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 39166.72939 tps: 36342.93073 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 56838.47866 tps: 58839.94676 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 50897.3513 tps: 48219.60456 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 67614.35071 tps: 63910.3396 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35309.00372 tps: 37620.34709 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32111.99676 tps: 29829.4619 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 38438.01954 tps: 35600.99278 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 57028.12142 tps: 59075.01679 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 51033.16842 tps: 48378.70495 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-FullBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 69010.03043 tps: 65313.16249 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongMultiTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 35481.80244 tps: 37792.26394 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-LongSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32424.63528 tps: 30147.80274 } } dps_results: { - key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-item_swap_4p_t11-NoBuffs-0.0yards-ShortSingleTarget" + key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 39986.17815 tps: 37155.76544 diff --git a/sim/priest/shadow/TestShadow.results b/sim/priest/shadow/TestShadow.results index edb38dbc8d..89efbe84e3 100644 --- a/sim/priest/shadow/TestShadow.results +++ b/sim/priest/shadow/TestShadow.results @@ -2048,126 +2048,126 @@ dps_results: { } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39682.46219 tps: 51935.46238 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39682.46219 tps: 33956.52477 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48184.47905 tps: 39884.02351 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23919.8001 tps: 35435.62113 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23919.8001 tps: 21233.98435 } } dps_results: { - key: "TestShadow-Settings-Draenei-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Draenei-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24213.35994 tps: 21210.13735 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 39610.92563 tps: 51747.73404 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39610.92563 tps: 33907.65967 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48025.1565 tps: 39742.9917 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 23971.91555 tps: 35469.16616 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23971.91555 tps: 21280.41262 } } dps_results: { - key: "TestShadow-Settings-NightElf-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-NightElf-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24230.50036 tps: 21222.74355 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 40517.66577 tps: 52636.95808 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40517.66577 tps: 34635.03559 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50643.9405 tps: 41876.33492 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 24343.82459 tps: 36155.08076 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 24343.82459 tps: 21675.31682 } } dps_results: { - key: "TestShadow-Settings-Troll-p3-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestShadow-Settings-Troll-p3-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25286.78427 tps: 22257.85173 diff --git a/sim/rogue/assassination/TestAssassination.results b/sim/rogue/assassination/TestAssassination.results index a52c58e3ba..ff2e6aaf69 100644 --- a/sim/rogue/assassination/TestAssassination.results +++ b/sim/rogue/assassination/TestAssassination.results @@ -2099,1008 +2099,1008 @@ dps_results: { } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29596.56595 tps: 21013.56183 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29596.56595 tps: 21013.56183 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 38946.02753 tps: 27651.67954 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17438.70973 tps: 12381.48391 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17438.70973 tps: 12381.48391 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19394.33365 tps: 13769.97689 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22288.51319 tps: 15824.84437 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22288.51319 tps: 15824.84437 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29380.24212 tps: 20859.9719 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13285.15138 tps: 9432.45748 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13285.15138 tps: 9432.45748 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15061.95727 tps: 10693.98966 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30156.78355 tps: 21411.31632 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30156.78355 tps: 21411.31632 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 39743.70334 tps: 28218.02937 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17741.53066 tps: 12596.48677 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17741.53066 tps: 12596.48677 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19722.04797 tps: 14002.65406 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 17677.15944 tps: 12550.7832 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 17677.15944 tps: 12550.7832 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 22387.60517 tps: 15895.19967 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 10133.49643 tps: 7194.78247 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 10133.49643 tps: 7194.78247 } } dps_results: { - key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 11134.1558 tps: 7905.25062 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37055.64483 tps: 26309.50783 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37055.64483 tps: 26309.50783 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48929.20945 tps: 34739.73871 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21897.98304 tps: 15547.56796 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21897.98304 tps: 15547.56796 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24605.30902 tps: 17469.7694 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27828.6146 tps: 19758.31636 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27828.6146 tps: 19758.31636 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36961.14281 tps: 26242.4114 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16522.30395 tps: 11730.83581 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16522.30395 tps: 11730.83581 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18879.08438 tps: 13404.14991 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37795.54457 tps: 26834.83664 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37795.54457 tps: 26834.83664 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50164.41943 tps: 35616.73779 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22319.12476 tps: 15846.57858 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22319.12476 tps: 15846.57858 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25104.09513 tps: 17823.90754 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 21858.21424 tps: 15519.33211 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 21858.21424 tps: 15519.33211 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 27745.70105 tps: 19699.44775 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 12726.02223 tps: 9035.47578 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 12726.02223 tps: 9035.47578 } } dps_results: { - key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14029.72429 tps: 9961.10424 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 54499.60733 tps: 38694.7212 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 54499.60733 tps: 38694.7212 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 69793.2058 tps: 49553.17612 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33205.09094 tps: 23575.61457 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33205.09094 tps: 23575.61457 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36442.0357 tps: 25873.84534 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 41793.6737 tps: 29673.50833 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41793.6737 tps: 29673.50833 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 53464.88687 tps: 37960.06968 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25534.59521 tps: 18129.5626 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25534.59521 tps: 18129.5626 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28327.09226 tps: 20112.2355 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 55485.05494 tps: 39394.389 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 55485.05494 tps: 39394.389 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 71209.64337 tps: 50558.84679 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33753.29927 tps: 23964.84248 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33753.29927 tps: 23964.84248 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37029.19334 tps: 26290.72727 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28199.69053 tps: 20021.78028 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28199.69053 tps: 20021.78028 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35994.77997 tps: 25556.29378 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16517.95383 tps: 11727.74722 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16517.95383 tps: 11727.74722 } } dps_results: { - key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 18812.8833 tps: 13357.14715 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29884.33208 tps: 21217.87578 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29884.33208 tps: 21217.87578 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 39547.36896 tps: 28078.63196 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17613.77413 tps: 12505.77963 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17613.77413 tps: 12505.77963 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19731.48048 tps: 14009.35114 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22505.69062 tps: 15979.04034 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22505.69062 tps: 15979.04034 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 29840.4938 tps: 21186.75059 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13419.64489 tps: 9527.94787 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13419.64489 tps: 9527.94787 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15327.34755 tps: 10882.41676 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30448.66994 tps: 21618.55566 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30448.66994 tps: 21618.55566 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40358.82262 tps: 28654.76406 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17922.08937 tps: 12724.68346 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17922.08937 tps: 12724.68346 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20063.43605 tps: 14245.0396 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 17844.4751 tps: 12669.57732 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 17844.4751 tps: 12669.57732 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 22760.73262 tps: 16160.12016 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 10238.60275 tps: 7269.40795 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 10238.60275 tps: 7269.40795 } } dps_results: { - key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p1_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 11348.5134 tps: 8057.44451 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37381.53615 tps: 26540.89067 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37381.53615 tps: 26540.89067 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49630.9119 tps: 35237.94745 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22105.90991 tps: 15695.19604 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22105.90991 tps: 15695.19604 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 24986.45483 tps: 17740.38293 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28070.54006 tps: 19930.08345 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28070.54006 tps: 19930.08345 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 37496.13084 tps: 26622.2529 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16677.02191 tps: 11840.68555 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16677.02191 tps: 11840.68555 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19174.73269 tps: 13614.06021 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38125.67838 tps: 27069.23165 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38125.67838 tps: 27069.23165 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50885.3974 tps: 36128.63215 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22533.74573 tps: 15998.95947 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22533.74573 tps: 15998.95947 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25493.9846 tps: 18100.72906 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 22062.05223 tps: 15664.05708 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 22062.05223 tps: 15664.05708 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 28158.6327 tps: 19992.62922 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 12850.44261 tps: 9123.81425 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 12850.44261 tps: 9123.81425 } } dps_results: { - key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p3_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14264.17789 tps: 10127.5663 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 54878.55017 tps: 38963.77062 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 54878.55017 tps: 38963.77062 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 70531.55198 tps: 50077.40191 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 33463.59075 tps: 23759.14943 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33463.59075 tps: 23759.14943 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36868.00399 tps: 26176.28283 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 42071.8844 tps: 29871.03792 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42071.8844 tps: 29871.03792 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54023.98863 tps: 38357.03193 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 25727.64097 tps: 18266.62509 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 25727.64097 tps: 18266.62509 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28655.80416 tps: 20345.62095 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 55869.26282 tps: 39667.1766 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 55869.26282 tps: 39667.1766 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 71966.77245 tps: 51096.40844 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 34015.2566 tps: 24150.83218 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 34015.2566 tps: 24150.83218 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37465.06298 tps: 26600.19471 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28392.88629 tps: 20158.94926 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 28392.88629 tps: 20158.94926 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36405.3604 tps: 25847.80588 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongMultiTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16664.21745 tps: 11831.59439 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-LongSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16664.21745 tps: 11831.59439 } } dps_results: { - key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19050.45258 tps: 13525.82133 diff --git a/sim/rogue/combat/TestCombat.results b/sim/rogue/combat/TestCombat.results index 7d2c7f8175..c08dba76b7 100644 --- a/sim/rogue/combat/TestCombat.results +++ b/sim/rogue/combat/TestCombat.results @@ -2132,1008 +2132,1008 @@ dps_results: { } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29882.24948 tps: 21216.39713 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30156.67815 tps: 21411.24149 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36588.9866 tps: 25978.18049 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17050.10833 tps: 12105.57692 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17211.4354 tps: 12220.11914 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17189.01358 tps: 12204.19964 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25962.40978 tps: 18433.31094 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 25888.53227 tps: 18380.85791 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31501.42247 tps: 22366.00995 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15031.42022 tps: 10672.30836 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14959.9265 tps: 10621.54781 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15011.74375 tps: 10658.33806 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 28868.39014 tps: 20496.557 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29110.93188 tps: 20668.76163 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35291.51557 tps: 25056.97606 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16545.291 tps: 11747.15661 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16665.44088 tps: 11832.46303 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16591.64005 tps: 11780.06444 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27122.5906 tps: 19257.03933 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27414.30112 tps: 19464.15379 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 33968.62615 tps: 24117.72457 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14957.96439 tps: 10620.15472 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15072.6503 tps: 10701.58171 } } dps_results: { - key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15261.46226 tps: 10835.6382 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38000.46776 tps: 26980.33211 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38380.88409 tps: 27250.4277 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 45939.63665 tps: 32617.14202 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21984.23943 tps: 15608.81 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22143.03498 tps: 15721.55484 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22559.10713 tps: 16016.96606 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33463.48548 tps: 23759.07469 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33477.35054 tps: 23768.91888 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40119.19857 tps: 28484.63098 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19620.12822 tps: 13930.29104 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19561.62805 tps: 13888.75592 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20007.39855 tps: 14205.25297 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 36762.02124 tps: 26101.03508 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37125.90309 tps: 26359.3912 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44384.5274 tps: 31513.01445 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21405.2518 tps: 15197.72877 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21562.5713 tps: 15309.42563 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21929.36507 tps: 15569.8492 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 35012.38836 tps: 24858.79573 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 35411.79454 tps: 25142.37412 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43066.10362 tps: 30576.93357 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19543.25766 tps: 13875.71294 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19718.2986 tps: 13999.992 } } dps_results: { - key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20292.55681 tps: 14407.71533 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53050.26594 tps: 37665.68882 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53483.10592 tps: 37973.0052 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61415.21065 tps: 43604.79956 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31594.08807 tps: 22431.80253 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31861.46471 tps: 22621.63994 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31305.65224 tps: 22227.01309 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 47291.52185 tps: 33576.98051 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47160.61685 tps: 33484.03797 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54049.67912 tps: 38375.27217 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28529.58876 tps: 20256.00802 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28353.13763 tps: 20130.72771 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 27990.37516 tps: 19873.16636 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 52979.7404 tps: 37615.61569 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53379.77655 tps: 37899.64135 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61308.01769 tps: 43528.69256 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31655.02054 tps: 22475.06458 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31855.43154 tps: 22617.3564 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31312.42513 tps: 22231.82184 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49052.90674 tps: 34827.56378 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49521.81321 tps: 35160.48738 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57519.64892 tps: 40838.95074 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28148.90711 tps: 19985.72405 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28374.61997 tps: 20145.98018 } } dps_results: { - key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Human-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28113.8273 tps: 19960.81738 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 30153.36198 tps: 21408.88701 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 30424.80614 tps: 21601.61236 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 36900.86635 tps: 26199.61511 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17256.1623 tps: 12251.87524 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17425.72277 tps: 12372.26316 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 17453.99977 tps: 12392.33983 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26213.63927 tps: 18611.68388 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26132.12811 tps: 18553.81096 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 31768.82105 tps: 22555.86295 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15203.4532 tps: 10794.45177 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15143.18695 tps: 10751.66273 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15236.25934 tps: 10817.74413 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 29088.70521 tps: 20652.9807 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 29357.03868 tps: 20843.49746 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35584.29734 tps: 25264.85111 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16746.73165 tps: 11890.17947 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 16877.48046 tps: 11983.01113 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16844.51105 tps: 11959.60284 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 27377.41283 tps: 19437.96311 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 27674.58991 tps: 19648.95883 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34276.20721 tps: 24336.10712 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 15130.95692 tps: 10742.97941 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 15257.48852 tps: 10832.81685 } } dps_results: { - key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15540.11958 tps: 11033.4849 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 38307.04278 tps: 27198.00038 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 38694.40337 tps: 27473.02639 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46554.04543 tps: 33053.37225 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 22187.39856 tps: 15753.05298 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 22347.9868 tps: 15867.07063 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22929.13235 tps: 16279.68397 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33728.04115 tps: 23946.90922 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33747.66215 tps: 23960.84012 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40657.14247 tps: 28866.57116 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19799.45445 tps: 14057.61266 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19738.53781 tps: 14014.36184 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20333.94591 tps: 14437.10159 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37058.33819 tps: 26311.42012 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37426.73062 tps: 26572.97874 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44978.20715 tps: 31934.52708 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 21602.46767 tps: 15337.75205 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 21760.2115 tps: 15449.75017 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 22287.65519 tps: 15824.23519 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 35291.49727 tps: 25056.96306 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 35705.70735 tps: 25351.05222 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43662.75797 tps: 31000.55816 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19726.33898 tps: 14005.70068 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19902.07377 tps: 14130.47238 } } dps_results: { - key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20637.46955 tps: 14652.60338 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53389.61992 tps: 37906.63014 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53824.66731 tps: 38215.51379 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 62054.00421 tps: 44058.34299 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31821.59516 tps: 22593.33256 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32089.9671 tps: 22783.87664 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-Combat-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31674.62247 tps: 22488.98195 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 47589.68965 tps: 33788.67965 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 47455.62482 tps: 33693.49362 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 54609.36493 tps: 38772.6491 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28734.09635 tps: 20401.20841 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28553.80657 tps: 20273.20266 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28320.4738 tps: 20107.5364 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 53316.64633 tps: 37854.81889 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 53719.09557 tps: 38140.55785 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61947.36168 tps: 43982.62679 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 31883.55731 tps: 22637.32569 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32084.16242 tps: 22779.75532 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31683.41356 tps: 22495.22363 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49367.85121 tps: 35051.17436 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49838.67186 tps: 35385.45702 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58131.74945 tps: 41273.54211 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongMultiTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28354.39438 tps: 20131.62001 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-LongSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28580.77925 tps: 20292.35327 } } dps_results: { - key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestCombat-Settings-Orc-p4_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 28458.32202 tps: 20205.40863 diff --git a/sim/rogue/subtlety/TestSubtlety.results b/sim/rogue/subtlety/TestSubtlety.results index fc1b6c9499..4bcfe45caa 100644 --- a/sim/rogue/subtlety/TestSubtlety.results +++ b/sim/rogue/subtlety/TestSubtlety.results @@ -2062,1008 +2062,1008 @@ dps_results: { } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24023.73823 tps: 17056.85414 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 24023.73823 tps: 17056.85414 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32064.79482 tps: 22766.00432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13268.15503 tps: 9420.39007 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13268.15503 tps: 9420.39007 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14941.50931 tps: 10608.47161 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26036.27941 tps: 18485.75838 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26036.27941 tps: 18485.75838 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34044.86774 tps: 24171.8561 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14345.80469 tps: 10185.52133 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14345.80469 tps: 10185.52133 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15883.32638 tps: 11277.16173 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23666.75533 tps: 16803.39629 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23666.75533 tps: 16803.39629 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32137.80662 tps: 22817.8427 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13084.62054 tps: 9290.08058 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13084.62054 tps: 9290.08058 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 14913.69162 tps: 10588.72105 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26092.78957 tps: 18525.88059 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26092.78957 tps: 18525.88059 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34703.32715 tps: 24639.36228 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14205.79937 tps: 10086.11755 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14205.79937 tps: 10086.11755 } } dps_results: { - key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15529.64562 tps: 11026.04839 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31167.16498 tps: 22128.68714 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31167.16498 tps: 22128.68714 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41412.66458 tps: 29402.99185 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17587.02102 tps: 12486.78492 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17587.02102 tps: 12486.78492 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19595.94267 tps: 13913.11929 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33377.36016 tps: 23697.92572 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33377.36016 tps: 23697.92572 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44068.75757 tps: 31288.81787 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18926.38902 tps: 13437.73621 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 18926.38902 tps: 13437.73621 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21224.15534 tps: 15069.15029 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31137.94816 tps: 22107.9432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31137.94816 tps: 22107.9432 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41931.83441 tps: 29771.60243 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17397.58295 tps: 12352.28389 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17397.58295 tps: 12352.28389 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19943.85192 tps: 14160.13486 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33461.0569 tps: 23757.3504 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33461.0569 tps: 23757.3504 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44305.2215 tps: 31456.70726 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19057.25707 tps: 13530.65252 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19057.25707 tps: 13530.65252 } } dps_results: { - key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21225.19117 tps: 15069.88573 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45178.62892 tps: 32076.82653 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45178.62892 tps: 32076.82653 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 56859.46522 tps: 40370.22031 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26920.16372 tps: 19113.31624 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26920.16372 tps: 19113.31624 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29870.29713 tps: 21207.91096 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48487.09804 tps: 34425.83961 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48487.09804 tps: 34425.83961 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60262.54446 tps: 42786.40657 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28710.98473 tps: 20384.79916 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28710.98473 tps: 20384.79916 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31639.61607 tps: 22464.12741 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45348.60836 tps: 32197.51193 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45348.60836 tps: 32197.51193 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57525.2287 tps: 40842.91237 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26537.66582 tps: 18841.74273 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26537.66582 tps: 18841.74273 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29554.61962 tps: 20983.77993 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48731.17013 tps: 34599.13079 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48731.17013 tps: 34599.13079 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60994.88407 tps: 43306.36769 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28692.15384 tps: 20371.42922 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28692.15384 tps: 20371.42922 } } dps_results: { - key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31433.19882 tps: 22317.57116 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24259.80678 tps: 17224.46281 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 24259.80678 tps: 17224.46281 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32539.57435 tps: 23103.09779 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13389.3626 tps: 9506.44745 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13389.3626 tps: 9506.44745 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15199.98813 tps: 10791.99157 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26281.22684 tps: 18659.67105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26281.22684 tps: 18659.67105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 34551.81894 tps: 24531.79145 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14479.69358 tps: 10280.58244 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14479.69358 tps: 10280.58244 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 16146.48035 tps: 11464.00105 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23883.84739 tps: 16957.53164 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 23883.84739 tps: 16957.53164 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 32627.88795 tps: 23165.80045 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 13201.45224 tps: 9373.03109 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 13201.45224 tps: 9373.03109 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15159.67022 tps: 10763.36585 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 26329.62387 tps: 18694.03295 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 26329.62387 tps: 18694.03295 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 35207.60752 tps: 24997.40134 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 14328.46851 tps: 10173.21264 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 14328.46851 tps: 10173.21264 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 15775.73823 tps: 11200.77414 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31455.00875 tps: 22333.05621 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31455.00875 tps: 22333.05621 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41932.47562 tps: 29772.05769 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17744.5593 tps: 12598.6371 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17744.5593 tps: 12598.6371 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 19893.95477 tps: 14124.70788 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33666.21066 tps: 23903.00957 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33666.21066 tps: 23903.00957 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44612.40135 tps: 31674.80496 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19093.02293 tps: 13556.04628 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19093.02293 tps: 13556.04628 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21534.55449 tps: 15289.53369 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 31391.04381 tps: 22287.6411 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 31391.04381 tps: 22287.6411 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42460.41375 tps: 30146.89376 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17545.14485 tps: 12457.05284 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 17545.14485 tps: 12457.05284 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 20254.14477 tps: 14380.44278 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 33761.4205 tps: 23970.60855 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33761.4205 tps: 23970.60855 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 44854.34714 tps: 31846.58647 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 19222.08013 tps: 13647.67689 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 19222.08013 tps: 13647.67689 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 21541.38754 tps: 15294.38515 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45493.04743 tps: 32300.06368 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45493.04743 tps: 32300.06368 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 57412.62904 tps: 40762.96662 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 27082.61157 tps: 19228.65422 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 27082.61157 tps: 19228.65422 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30177.98045 tps: 21426.36612 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 48817.7266 tps: 34660.58588 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 48817.7266 tps: 34660.58588 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 60846.88949 tps: 43201.29154 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28977.19097 tps: 20573.80559 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28977.19097 tps: 20573.80559 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31967.46276 tps: 22696.89856 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 45669.40026 tps: 32425.27418 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 45669.40026 tps: 32425.27418 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 58098.13562 tps: 41249.67629 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 26716.80411 tps: 18968.93092 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 26716.80411 tps: 18968.93092 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 29854.27637 tps: 21196.53622 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 49069.58765 tps: 34839.40723 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 49069.58765 tps: 34839.40723 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 61578.67403 tps: 43720.85856 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongMultiTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28875.79312 tps: 20501.81312 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-LongSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28875.79312 tps: 20501.81312 } } dps_results: { - key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31781.18562 tps: 22564.64179 diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index 07a9d12128..a1e922025a 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -2104,756 +2104,756 @@ dps_results: { } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 109551.0542 tps: 46919.98782 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42999.25641 tps: 1817.53734 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49594.63809 tps: 2041.50541 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85191.16514 tps: 45159.2985 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33430.38976 tps: 1545.69372 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36727.49286 tps: 1612.62795 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68653.68372 tps: 13599.95558 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 43053.41515 tps: 1834.74733 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49902.0258 tps: 1955.77801 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52326.43231 tps: 12356.09823 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33309.37434 tps: 1543.56936 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36906.10938 tps: 1665.1489 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 76505.44362 tps: 11674.91038 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41953.72808 tps: 1770.58491 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48755.66929 tps: 1976.93628 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 59578.12853 tps: 10807.11852 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32515.98979 tps: 1499.97252 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35916.81838 tps: 1577.76753 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 168245.40155 tps: 83203.5513 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42605.94291 tps: 1830.04816 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49802.0821 tps: 2043.20178 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 136879.07472 tps: 76331.6609 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33069.47909 tps: 1553.2829 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36883.71192 tps: 1613.02379 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 tps: 13632.95104 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42573.14869 tps: 1799.97082 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50165.73077 tps: 1959.40374 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 tps: 12323.43786 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32765.03048 tps: 1536.87895 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37095.64305 tps: 1666.39519 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 70320.56562 tps: 11534.78928 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41126.68082 tps: 1789.80509 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48991.84118 tps: 1977.7694 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 55059.02431 tps: 10760.57942 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31885.41889 tps: 1520.04115 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36086.15713 tps: 1578.0019 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 151539.96327 tps: 81879.87775 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41182.56717 tps: 1793.08365 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48600.90908 tps: 2035.95837 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 123566.89054 tps: 75235.06515 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31892.66496 tps: 1551.70921 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35906.27685 tps: 1649.15113 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 tps: 13632.95104 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41178.82388 tps: 1813.23926 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49041.65946 tps: 2004.4551 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 tps: 12323.43786 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31865.35545 tps: 1537.37216 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35866.3283 tps: 1608.02755 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68952.49673 tps: 11357.44249 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39691.48837 tps: 1779.52637 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47057.13635 tps: 1981.40804 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 53958.60992 tps: 10693.75853 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 30647.95363 tps: 1483.83412 } } dps_results: { - key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 34767.8471 tps: 1566.13963 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 106945.615 tps: 47138.43057 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42708.96798 tps: 1861.92326 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49785.05407 tps: 2055.75816 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 83022.28107 tps: 45533.67284 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33055.42261 tps: 1559.55579 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36767.40917 tps: 1629.11946 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 66349.05733 tps: 13809.49756 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42765.90612 tps: 1844.4635 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49516.57831 tps: 2097.55019 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50346.3404 tps: 12382.89684 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32851.51641 tps: 1532.31207 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36165.73033 tps: 1631.42476 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 72825.55674 tps: 11592.55943 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41302.96544 tps: 1793.41823 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47927.62713 tps: 2007.00803 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 57760.12662 tps: 10843.6855 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32168.99618 tps: 1505.06875 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35433.46059 tps: 1569.33836 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 165440.06407 tps: 83589.94344 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41918.50679 tps: 1811.47032 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50019.69491 tps: 2058.28987 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 134720.21118 tps: 76353.54883 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32873.87863 tps: 1543.3958 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36941.38646 tps: 1629.81463 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 tps: 13689.94868 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42364.6583 tps: 1833.85574 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49794.42621 tps: 2099.73003 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 tps: 12278.74374 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32828.1348 tps: 1550.98754 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36355.97809 tps: 1632.50025 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 70055.39976 tps: 11646.63724 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40750.30024 tps: 1782.73226 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48138.78924 tps: 2008.24586 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 55950.94933 tps: 10815.31113 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32046.6382 tps: 1513.26098 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35592.9627 tps: 1569.63261 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 148204.04384 tps: 82113.58425 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40691.9033 tps: 1806.19632 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48073.42607 tps: 2016.67989 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 120749.30526 tps: 75459.60118 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31491.36783 tps: 1542.27765 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35195.71022 tps: 1620.69136 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 tps: 13689.94868 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40896.46641 tps: 1833.17132 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47825.30747 tps: 2066.46673 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 tps: 12278.74374 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31453.11319 tps: 1534.06122 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35363.27966 tps: 1602.53066 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68965.44744 tps: 11554.65106 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 39469.11662 tps: 1769.948 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 46541.54316 tps: 1951.95683 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongMultiTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 54775.46047 tps: 10712.63172 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-LongSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 30769.72723 tps: 1507.15884 } } dps_results: { - key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-unleash-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 33896.53927 tps: 1548.89793 diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 37154278d1..789f6c93e5 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -2111,126 +2111,126 @@ dps_results: { } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37418.55455 tps: 28258.17068 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 36873.72092 tps: 23583.28187 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42541.45081 tps: 26150.35923 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28732.54896 tps: 22979.49663 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28272.30208 tps: 18280.47389 } } dps_results: { - key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Draenei-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 31401.66533 tps: 19494.93683 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37717.08364 tps: 28445.59652 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37163.61024 tps: 23745.56833 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 42900.6381 tps: 26370.81037 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 29121.36704 tps: 23204.6786 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28653.06966 tps: 18488.90669 } } dps_results: { - key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32200.79264 tps: 19949.92009 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 37493.97995 tps: 28276.87014 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 37008.19915 tps: 23604.07612 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 43100.60544 tps: 26513.6274 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 28947.10962 tps: 23038.95748 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 28483.12507 tps: 18409.45984 } } dps_results: { - key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 32141.48105 tps: 20184.82185 diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index e76a4da448..1d57c5ae9a 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -1971,168 +1971,168 @@ dps_results: { } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39007.36069 tps: 34138.45669 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37844.84438 tps: 26679.42675 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 46297.09379 tps: 29827.53787 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25383.92023 tps: 25277.29592 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25383.92023 tps: 17655.67544 } } dps_results: { - key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28128.93913 tps: 17436.90164 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38554.58894 tps: 33789.0105 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37547.48034 tps: 26375.47272 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 45925.32118 tps: 29596.36276 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25248.83476 tps: 25039.30692 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25248.83476 tps: 17560.59183 } } dps_results: { - key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27425.59262 tps: 16803.38146 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 39239.49319 tps: 33989.57338 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38237.66409 tps: 26567.92871 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 45698.7195 tps: 30007.62743 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25724.00024 tps: 25154.72762 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25724.00024 tps: 17675.2608 } } dps_results: { - key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 27792.34666 tps: 17098.99538 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 38912.66742 tps: 34047.30369 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37891.74459 tps: 26736.13884 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 47214.37437 tps: 30775.93289 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 25412.54903 tps: 25387.37212 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 25412.54903 tps: 17765.75164 } } dps_results: { - key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28800.27225 tps: 17813.07169 diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 45b0e7ac47..ecafeb4b70 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1971,672 +1971,672 @@ dps_results: { } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57043.25884 tps: 48024.06105 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40663.77912 tps: 19903.84966 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59047.77094 tps: 26589.74346 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 48977.89462 tps: 44275.65804 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29080.88846 tps: 14333.80688 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 39543.26682 tps: 17874.15188 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57081.04956 tps: 47190.61888 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41045.40234 tps: 21094.17349 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 60035.63808 tps: 28904 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 48978.16608 tps: 42594.27951 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29185.15016 tps: 15013.89176 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 39372.64349 tps: 18700.89866 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57793.41492 tps: 49235.58829 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41113.83337 tps: 20364.35885 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 60029.91119 tps: 27388.27541 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 49641.74745 tps: 44969.91181 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29510.74936 tps: 14645.97841 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 40113.54793 tps: 18334.74574 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 51523.66532 tps: 42014.7145 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37112.7246 tps: 18071.68933 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 56882.34888 tps: 26114.76979 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 44757.49735 tps: 38779.68725 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26940.57925 tps: 12970.19502 } } dps_results: { - key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37403.81826 tps: 16608.40029 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 56786.62783 tps: 47735.85184 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40453.06544 tps: 19980.35683 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58855.1628 tps: 26675.22819 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 48792.66061 tps: 44107.0741 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 28852.19529 tps: 14123.31409 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 39187.31076 tps: 17515.21928 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57157.34582 tps: 47259.64013 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41004.88934 tps: 21073.01979 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 60366.64469 tps: 28754.09277 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 48694.7594 tps: 42170.84466 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 28988.55453 tps: 14762.5163 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 39143.27583 tps: 18423.98029 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57385.22192 tps: 48093.5939 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41035.08572 tps: 20450.76442 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 59569.78688 tps: 27334.14394 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 49062.25333 tps: 44220.49921 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29280.72923 tps: 14475.92319 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 39779.32747 tps: 18010.92709 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 51014.49214 tps: 41080.72529 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37132.0408 tps: 18098.84645 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 56392.12733 tps: 25376.40084 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 44262.61088 tps: 37834.24023 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26817.65752 tps: 12816.35151 } } dps_results: { - key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 37221.0084 tps: 16575.40868 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58138.7318 tps: 48300.58261 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41617.44471 tps: 20222.84046 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 60786.16267 tps: 27064.27246 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50162.51216 tps: 44607.63024 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29731.87216 tps: 14280.22436 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 40655.1601 tps: 17792.22806 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58482.01174 tps: 47630.68562 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 42133.56543 tps: 21299.59206 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 62317.64548 tps: 29145.21617 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50003.83045 tps: 42547.45762 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29873.2466 tps: 14954.357 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 40636.12953 tps: 18717.32526 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58896.70608 tps: 48887.90418 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 42095.91652 tps: 20690.64198 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 61512.419 tps: 27736.29162 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50385.19333 tps: 44745.60496 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 30241.29935 tps: 14682.9301 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 41253.43596 tps: 18291.84556 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 52524.26686 tps: 41460.36288 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 38224.03362 tps: 18304.04967 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58339.79288 tps: 25768.43106 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 45668.34687 tps: 38414.06553 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27705.23367 tps: 12971.29278 } } dps_results: { - key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 38723.34761 tps: 16854.02011 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57508.18226 tps: 48167.88948 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40800.58854 tps: 20093.92371 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 60561.78672 tps: 27154.67451 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50049.9926 tps: 45614.12423 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29414.40327 tps: 14426.74194 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 41291.48561 tps: 18712.64005 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 57951.83699 tps: 47552.10983 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41393.01178 tps: 21362.07215 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 61857.22655 tps: 29388.74758 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50641.77049 tps: 44303.99155 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 29683.2886 tps: 15164.2742 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 41175.14188 tps: 19518.59722 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 58226.90822 tps: 48754.25717 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 41450.02816 tps: 20594.14887 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 61497.37423 tps: 28106.90671 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 50772.46835 tps: 46096.42463 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 30012.37888 tps: 14897.02053 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 41916.18244 tps: 19100.60193 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 51739.24236 tps: 41553.46916 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 37372.75777 tps: 18270.05791 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 58238.81417 tps: 26684.74723 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongMultiTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 45689.88096 tps: 38966.89542 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-LongSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 27066.09023 tps: 13084.52621 } } dps_results: { - key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-p3_item_swap-NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 38352.36092 tps: 17264.69407 diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index 14eea0dd14..c9b42012be 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -1971,168 +1971,168 @@ dps_results: { } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41864.92935 tps: 42105.90851 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40031.20265 tps: 23943.78893 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50419.71466 tps: 28741.59809 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26214.48301 tps: 30138.44154 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26214.48301 tps: 15626.42597 } } dps_results: { - key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29047.15886 tps: 16008.59796 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 41787.23971 tps: 41991.24163 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 39785.19165 tps: 23771.24223 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 50507.4534 tps: 28586.63525 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26034.19234 tps: 29782.97466 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26034.19234 tps: 15405.86088 } } dps_results: { - key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 28756.09889 tps: 15763.87397 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 42439.69792 tps: 42147.27435 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40439.94755 tps: 23933.1579 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 51796.63467 tps: 28910.28009 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26498.86624 tps: 30001.32797 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26498.86624 tps: 15517.57679 } } dps_results: { - key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29568.80944 tps: 15934.33507 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { dps: 42134.2922 tps: 42384.79575 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { dps: 40367.40146 tps: 24190.57611 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--FullBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { dps: 52013.38851 tps: 29526.12647 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongMultiTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { dps: 26287.98385 tps: 30183.70785 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-LongSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { dps: 26287.98385 tps: 15616.17596 } } dps_results: { - key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default--NoBuffs-25.0yards-ShortSingleTarget" + key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { dps: 29630.53286 tps: 16430.73634 diff --git a/sim/warrior/arms/TestArms.results b/sim/warrior/arms/TestArms.results index c48e6579d8..0b5cb6b77b 100644 --- a/sim/warrior/arms/TestArms.results +++ b/sim/warrior/arms/TestArms.results @@ -2107,168 +2107,168 @@ dps_results: { } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 69704.87702 tps: 37227.38285 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33850.41216 tps: 22719.06521 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 41186.69888 tps: 26639.37681 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48136.06716 tps: 24158.03766 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23062.96975 tps: 15351.08717 } } dps_results: { - key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25242.48633 tps: 15842.81478 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 87335.88753 tps: 46141.07743 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42049.15923 tps: 28814.77014 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47607.75126 tps: 31488.73131 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 61545.89993 tps: 31140.73398 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 29569.55892 tps: 20059.51223 } } dps_results: { - key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Orc-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30997.74768 tps: 19867.21827 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 69836.63261 tps: 37142.53993 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 33916.55996 tps: 22766.33304 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 40826.99654 tps: 26364.52488 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48288.32482 tps: 24108.32799 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 23212.22874 tps: 15502.56209 } } dps_results: { - key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p1_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 25248.44492 tps: 15904.30802 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 87578.60384 tps: 46158.13288 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42139.83845 tps: 28863.71833 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47527.59926 tps: 31348.15486 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongMultiTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 61762.67916 tps: 31252.21345 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-LongSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 29623.74961 tps: 20147.11201 } } dps_results: { - key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestArms-Settings-Worgen-p3_arms_bis-Basic-arms-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 30711.97776 tps: 19673.53322 diff --git a/sim/warrior/protection/TestProtectionWarrior.results b/sim/warrior/protection/TestProtectionWarrior.results index fdfd7bf165..581694abe4 100644 --- a/sim/warrior/protection/TestProtectionWarrior.results +++ b/sim/warrior/protection/TestProtectionWarrior.results @@ -2109,252 +2109,252 @@ dps_results: { } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24264.91791 tps: 139053.44774 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5271.05018 tps: 32261.53542 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5765.25271 tps: 34900.62565 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17528.2548 tps: 100605.46506 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3455.09741 tps: 21378.4644 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p1_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3297.165 tps: 20517.29332 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25605.66527 tps: 145803.96636 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5785.51853 tps: 34794.13652 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 6250.91917 tps: 37247.68465 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18313.87458 tps: 104208.17508 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3822.36274 tps: 23231.29509 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3637.92645 tps: 22242.00207 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23573.79485 tps: 134997.17692 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5247.6378 tps: 31894.62084 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5727.35544 tps: 34446.68445 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16887.08099 tps: 96872.51812 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3437.55582 tps: 21112.50425 } } dps_results: { - key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Human-preraid-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3297.99839 tps: 20365.18955 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 24278.9745 tps: 139166.16025 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5268.83745 tps: 32270.28808 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5725.99151 tps: 34694.376 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 17512.87869 tps: 100483.53922 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3451.32686 tps: 21312.17133 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p1_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3268.15258 tps: 20335.23638 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 25546.85907 tps: 145455.82305 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5763.93175 tps: 34582.12463 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 6235.29311 tps: 37143.55364 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 18304.53384 tps: 104252.07318 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3802.93533 tps: 23115.13501 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3594.07413 tps: 21969.85196 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 23553.99325 tps: 134858.44962 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 5226.39416 tps: 31735.51033 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--FullBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 5682.83686 tps: 34167.25405 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-LongMultiTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 16877.15557 tps: 96789.77658 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-LongSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 3436.30448 tps: 21063.89509 } } dps_results: { - key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default--NoBuffs-0.0yards-ShortSingleTarget" + key: "TestProtectionWarrior-Settings-Orc-preraid-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 3267.26215 tps: 20161.14939 From 69281e2e032c167cc059826227dc3b98f6b67924 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 16 Dec 2024 17:24:30 +0100 Subject: [PATCH 029/127] PR Feedback #2 - create enchant proc stat bonus effect helper(s) --- makefile | 2 +- sim/common/cata/enchant_effects.go | 370 ++++++++++------------------- sim/common/shared/shared_utils.go | 157 +++++++++++- sim/core/aura_helpers.go | 20 +- sim/core/item_swaps.go | 1 - 5 files changed, 292 insertions(+), 258 deletions(-) diff --git a/makefile b/makefile index b8b02800d9..9abb8cbf64 100644 --- a/makefile +++ b/makefile @@ -241,7 +241,7 @@ sim/core/items/all_items.go: $(call rwildcard,tools/database,*.go) $(call rwildc .PHONY: test test: $(OUT_DIR)/lib.wasm binary_dist/dist.go - go test --tags=with_db ./sim/paladin/retribution/... + go test --tags=with_db ./sim/... .PHONY: update-tests update-tests: diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 5dbc2b7304..b71d2a05fb 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -3,6 +3,7 @@ package cata import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -68,7 +69,8 @@ func init() { // TODO: Verify PPM (currently based on elitist + simcraft) procMask := character.GetProcMaskForEnchant(4067) - ppmm := character.AutoAttacks.NewPPMManager(5.0, procMask) + ppm := 5.0 + ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) meleeIcd := &core.Cooldown{ Duration: time.Millisecond * 1, Timer: character.NewTimer(), @@ -114,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4067, 5.0, &ppmm, aura) + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4067, ppm, &ppmm, aura) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -139,18 +141,19 @@ func init() { // will result in significant lower PPM // TODO: Verify PPM procMask := character.GetProcMaskForEnchant(4074) + ppm := 2.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Elemental Slayer", Callback: core.CallbackOnSpellHitDealt, ProcMask: procMask, Outcome: core.OutcomeLanded, - PPM: 2.0, + PPM: ppm, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procSpell.Cast(sim, result.Target) }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4074, 2.0, aura.Ppmm, aura) + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4074, ppm, aura.Ppmm, aura) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -171,7 +174,8 @@ func init() { spAura := procBuilder("Hurricane Enchant Spell", 3) procMask := character.GetProcMaskForEnchant(4083) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) + ppm := 1.0 + ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) hurricaneSpellProc := func(sim *core.Simulation) { if mhAura.IsActive() { @@ -234,93 +238,59 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4083, 1.0, &ppmm, aura) + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4083, ppm, &ppmm, aura) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong - core.NewEnchantEffect(4084, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Heartsong Proc", - core.ActionID{SpellID: 74224}, - stats.Stats{stats.Spirit: 200}, - time.Second*15, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4084, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Heartsong", - ActionID: core.ActionID{SpellID: 74224}, + ID: 74224, + AuraID: 74224, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, Outcome: core.OutcomeLanded, ICD: time.Second * 20, ProcChance: 0.25, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4084, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + Bonus: stats.Stats{stats.Spirit: 200}, + Duration: time.Second * 15, + }, }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent - core.NewEnchantEffect(4097, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Power Torrent Proc", - core.ActionID{SpellID: 74241}, - stats.Stats{stats.Intellect: 500}, - time.Second*12, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4097, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Power Torrent", - ActionID: core.ActionID{SpellID: 74224}, + ID: 74241, + AuraID: 74241, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, Outcome: core.OutcomeLanded, ICD: time.Second * 45, ProcChance: 1.0 / 3.0, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4097, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + Bonus: stats.Stats{stats.Intellect: 500}, + Duration: time.Second * 12, + }, }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk - core.NewEnchantEffect(4098, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Windwalk Proc", - core.ActionID{SpellID: 74243}, - stats.Stats{stats.DodgeRating: 600}, - time.Second*10, - ) - - procMask := character.GetProcMaskForEnchant(4098) - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4098, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Windwalk", + ID: 74243, + AuraID: 74243, Callback: core.CallbackOnSpellHitDealt, - ProcMask: procMask, Outcome: core.OutcomeLanded, PPM: 1, // based on old Wowhead comments, TODO: measure in Classic - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4098, 2.5, aura.Ppmm, aura) + Bonus: stats.Stats{stats.DodgeRating: 600}, + Duration: time.Second * 10, + }, }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -342,12 +312,13 @@ func init() { ) procMask := character.GetProcMaskForEnchant(4099) + ppm := 1.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Landslide", Callback: core.CallbackOnSpellHitDealt, ProcMask: procMask, Outcome: core.OutcomeLanded, - PPM: 1.0, + PPM: ppm, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.IsMH() { mainHand.Activate(sim) @@ -357,123 +328,79 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4099, 1, aura.Ppmm, aura) + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4099, ppm, aura.Ppmm, aura) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery - core.NewEnchantEffect(4115, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Lightweave Embroidery Proc", - core.ActionID{SpellID: 75170}, - stats.Stats{stats.Intellect: 580}, - time.Second*15, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4115, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Lightweave Embroidery Cata", - ActionID: core.ActionID{SpellID: 75171}, + ID: 75171, + AuraID: 75170, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, Outcome: core.OutcomeLanded, ICD: time.Second * 64, ProcChance: 0.25, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4115, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) + Bonus: stats.Stats{stats.Intellect: 580}, + Duration: time.Second * 15, + }, }) // Enchant: 4116, Spell: 75175 - Darkglow Embroidery - core.NewEnchantEffect(4116, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Darkglow Embroidery Proc", - core.ActionID{SpellID: 75173}, - stats.Stats{stats.Spirit: 580}, - time.Second*15, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4116, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Darkglow Embroidery Cata", - ActionID: core.ActionID{SpellID: 75174}, + ID: 75174, + AuraID: 75173, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, Outcome: core.OutcomeLanded, ICD: time.Second * 57, ProcChance: 0.30, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4116, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) + Bonus: stats.Stats{stats.Spirit: 580}, + Duration: time.Second * 15, + }, }) // Enchant: 4118, Spell: 75178 - Swordguard Embroidery - core.NewEnchantEffect(4118, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Swordguard Embroidery Proc", - core.ActionID{SpellID: 75178}, - stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, - time.Second*15, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4118, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Swordguard Embroidery Cata", - ActionID: core.ActionID{SpellID: 75176}, + ID: 75176, + AuraID: 75178, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskMeleeOrRanged, Outcome: core.OutcomeLanded, ICD: time.Second * 55, ProcChance: 0.15, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4118, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) + Bonus: stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, + Duration: time.Second * 15, + }, }) // Enchant: 4175, Spell: 81932, Item: 59594 - Gnomish X-Ray Scope - core.NewEnchantEffect(4175, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "X-Ray Targeting", - core.ActionID{SpellID: 95712}, - stats.Stats{stats.RangedAttackPower: 800}, - time.Second*10, - ) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 4175, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Gnomish X-Ray Scope", - ActionID: core.ActionID{SpellID: 95712}, + ID: 95712, + AuraID: 95712, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskRanged, Outcome: core.OutcomeLanded, ICD: time.Second * 40, ProcChance: 0.1, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - }, - }) - - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(95712, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}) + Bonus: stats.Stats{stats.RangedAttackPower: 800}, + Duration: time.Second * 10, + }, }) // Enchant: 4176, Item: 59595 - R19 Threatfinder @@ -491,116 +418,71 @@ func init() { }) // Enchant: 4215, Spell: 92433, Item: 55055 - Elementium Shield Spike - core.NewEnchantEffect(4215, func(agent core.Agent) { - character := agent.GetCharacter() - actionID := core.ActionID{SpellID: 92432} - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultMeleeCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := sim.Roll(90, 133) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - }, - }) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Elementium Shield Spike", - Callback: core.CallbackOnSpellHitTaken, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeBlock, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procSpell.Cast(sim, spell.Unit) + shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + EnchantID: 4215, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, + ProcDamageEffect: shared.ProcDamageEffect{ + SpellID: 92432, + Trigger: core.ProcTrigger{ + Name: "Elementium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, }, - }) - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4215, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) - }) + School: core.SpellSchoolPhysical, + MinDmg: 90, + MaxDmg: 133, + Outcome: shared.OutcomeMeleeCanCrit, + IsMelee: true, + }}) // Enchant: 4216, Spell: 92437, Item: 55056 - Pyrium Shield Spike - core.NewEnchantEffect(4216, func(agent core.Agent) { - character := agent.GetCharacter() - actionID := core.ActionID{SpellID: 92436} - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultMeleeCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := sim.Roll(210, 350) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - }, - }) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Pyrium Shield Spike", - Callback: core.CallbackOnSpellHitTaken, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeBlock, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procSpell.Cast(sim, spell.Unit) + shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + EnchantID: 4216, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, + ProcDamageEffect: shared.ProcDamageEffect{ + SpellID: 92436, + Trigger: core.ProcTrigger{ + Name: "Pyrium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, }, - }) - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4216, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) + School: core.SpellSchoolPhysical, + Outcome: shared.OutcomeMeleeCanCrit, + MinDmg: 210, + MaxDmg: 350, + IsMelee: true, + }, }) // Enchant: 4267, Spell: 99623, Item: 70139 - Flintlocke's Woodchucker - core.NewEnchantEffect(4267, func(agent core.Agent) { - character := agent.GetCharacter() - - statAura := character.NewTemporaryStatsAura( - "Flintlocke's Woodchucker Proc", - core.ActionID{SpellID: 99621}, - stats.Stats{stats.Agility: 300}, - time.Second*10, - ) - - dmgProc := character.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 99621}, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultMeleeCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := sim.Roll(550, 1650) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeRangedHitAndCrit) - }, - }) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + shared.NewEnchantProcStatBonusEffectWithDamageProc(shared.EnchantProcStatBonusEffect{ + EnchantID: 4267, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ Name: "Flintlocke's Woodchucker", - ActionID: core.ActionID{SpellID: 99621}, + ID: 99621, + AuraID: 99621, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskRanged, Outcome: core.OutcomeLanded, ICD: time.Second * 40, ProcChance: 0.1, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - statAura.Activate(sim) - dmgProc.Cast(sim, result.Target) - }, + Bonus: stats.Stats{stats.Agility: 300}, + Duration: time.Second * 10, + }, + }, + shared.DamageEffect{ + SpellID: 99621, + School: core.SpellSchoolPhysical, + ProcMask: core.ProcMaskEmpty, + Outcome: shared.OutcomeRangedCanCrit, + MinDmg: 550, + MaxDmg: 1650, + IsMelee: true, }) - statAura.Icd = aura.Icd - - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4267, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}) - }) - movementSpeedEnchants := []int32{ 3232, // Enchant Boots - Tuskarr's Vitality 4104, // Enchant Boots - Lavawalker diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 27884cb216..02ce293729 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -1,9 +1,11 @@ package shared import ( + "slices" "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -34,7 +36,9 @@ type DamageEffect struct { MinDmg float64 MaxDmg float64 BonusCoefficient float64 + IsMelee bool ProcMask core.ProcMask + Outcome OutcomeType } type ExtraSpellInfo struct { @@ -165,9 +169,16 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c Handler: handler, }) + // if config.ICD != 0 { procAura.Icd = triggerAura.Icd - character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(config.ID, triggerAura, core.EligibleSlotsForItem(core.GetItemByID(config.ID), false)) + // } + + eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(config.ID), false) + if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) || slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket2) { + character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + } + + character.ItemSwap.RegisterOnSwapItemForItemProcEffect(config.ID, triggerAura, eligibleSlotsForItem) }) } @@ -402,6 +413,100 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { }) } +type EnchantProcStatBonusEffect struct { + EnchantID int32 + Slots []proto.ItemSlot + ProcStatBonusEffect +} + +func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpell func(agent core.Agent) ExtraSpellInfo) { + core.NewEnchantEffect(config.EnchantID, func(agent core.Agent) { + character := agent.GetCharacter() + + procID := core.ActionID{SpellID: config.AuraID} + if procID.IsEmptyAction() { + procID = core.ActionID{ItemID: config.ID} + } + procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) + + if config.PPM != 0 && config.ProcMask == core.ProcMaskUnknown { + config.ProcMask = character.GetProcMaskForEnchant(config.EnchantID) + } + + var procSpell ExtraSpellInfo + if extraSpell != nil { + procSpell = extraSpell(agent) + } + + handler := func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procAura.Activate(sim) + if procSpell.Spell != nil { + procSpell.Trigger(sim, spell, result) + } + } + + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + ActionID: core.ActionID{SpellID: config.ID}, + Name: config.Name, + Callback: config.Callback, + ProcMask: config.ProcMask, + Outcome: config.Outcome, + Harmful: config.Harmful, + ProcChance: config.ProcChance, + PPM: config.PPM, + ICD: config.ICD, + Handler: handler, + }) + + if config.ICD != 0 { + procAura.Icd = triggerAura.Icd + } + + if config.PPM != 0 { + character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura) + } else { + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(config.EnchantID, triggerAura, config.Slots) + } + }) +} + +func NewEnchantProcStatBonusEffect(config EnchantProcStatBonusEffect) { + factory_EnchantStatBonusEffect(config, nil) +} + +func NewEnchantProcStatBonusEffectWithDamageProc(config EnchantProcStatBonusEffect, damage DamageEffect) { + procMask := core.ProcMaskEmpty + if damage.ProcMask != core.ProcMaskUnknown { + procMask = damage.ProcMask + } + + factory_EnchantStatBonusEffect(config, func(agent core.Agent) ExtraSpellInfo { + character := agent.GetCharacter() + critMultiplier := core.TernaryFloat64(damage.IsMelee, character.DefaultMeleeCritMultiplier(), character.DefaultSpellCritMultiplier()) + + procSpell := character.RegisterSpell(core.SpellConfig{ + ActionID: core.ActionID{SpellID: damage.SpellID}, + SpellSchool: damage.School, + ProcMask: procMask, + DamageMultiplier: 1, + CritMultiplier: critMultiplier, + DamageMultiplierAdditive: 1, + ThreatMultiplier: 1, + BonusCoefficient: damage.BonusCoefficient, + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + spell.CalcAndDealDamage(sim, target, sim.Roll(damage.MinDmg, damage.MaxDmg), GetOutcome(spell, damage.Outcome)) + }, + }) + + return ExtraSpellInfo{ + Spell: procSpell, + Trigger: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procSpell.Cast(sim, result.Target) + }, + } + }) +} + type OutcomeType uint64 const ( @@ -412,6 +517,7 @@ const ( OutcomeSpellCanCrit OutcomeSpellNoCrit OutcomeSpellNoMissCanCrit + OutcomeRangedCanCrit ) type ProcDamageEffect struct { @@ -422,6 +528,7 @@ type ProcDamageEffect struct { School core.SpellSchool MinDmg float64 MaxDmg float64 + IsMelee bool Flags core.SpellFlag Outcome OutcomeType } @@ -440,6 +547,8 @@ func GetOutcome(spell *core.Spell, outcome OutcomeType) core.OutcomeApplier { return spell.OutcomeMagicCrit case OutcomeSpellNoCrit: return spell.OutcomeMagicHit + case OutcomeRangedCanCrit: + return spell.OutcomeRangedHitAndCrit default: return spell.OutcomeMagicHitAndCrit } @@ -478,3 +587,47 @@ func NewProcDamageEffect(config ProcDamageEffect) { core.MakeProcTriggerAura(&character.Unit, triggerConfig) }) } + +type EnchantProcDamageEffect struct { + ProcDamageEffect + EnchantID int32 + Slots []proto.ItemSlot +} + +func NewEnchantProcDamageEffect(config EnchantProcDamageEffect) { + core.NewEnchantEffect(config.EnchantID, func(agent core.Agent) { + character := agent.GetCharacter() + + critMultiplier := core.TernaryFloat64(config.IsMelee, character.DefaultMeleeCritMultiplier(), character.DefaultSpellCritMultiplier()) + + minDmg := config.MinDmg + maxDmg := config.MaxDmg + + if core.ActionID.IsEmptyAction(config.Trigger.ActionID) { + config.Trigger.ActionID = core.ActionID{SpellID: config.SpellID} + } + + damageSpell := character.RegisterSpell(core.SpellConfig{ + ActionID: core.ActionID{SpellID: config.SpellID}, + SpellSchool: config.School, + ProcMask: core.ProcMaskEmpty, + Flags: config.Flags, + + DamageMultiplier: 1, + CritMultiplier: critMultiplier, + ThreatMultiplier: 1, + + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + spell.CalcAndDealDamage(sim, target, sim.Roll(minDmg, maxDmg), GetOutcome(spell, config.Outcome)) + }, + }) + + triggerConfig := config.Trigger + triggerConfig.Handler = func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { + damageSpell.Cast(sim, character.CurrentTarget) + } + aura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) + + character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(config.EnchantID, aura, config.Slots) + }) +} diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index 22d90ec000..2622243af3 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -47,20 +47,20 @@ type ProcTrigger struct { ExtraCondition ProcExtraCondition } -func ApplyProcTriggerCallback(unit *Unit, aura *Aura, config ProcTrigger) { +func ApplyProcTriggerCallback(unit *Unit, procAura *Aura, config ProcTrigger) { var icd Cooldown if config.ICD != 0 { icd = Cooldown{ Timer: unit.NewTimer(), Duration: config.ICD, } - aura.Icd = &icd + procAura.Icd = &icd } var ppmm PPMManager if config.PPM > 0 { ppmm = unit.AutoAttacks.NewPPMManager(config.PPM, config.ProcMask) - aura.Ppmm = &ppmm + procAura.Ppmm = &ppmm } handler := config.Handler @@ -106,22 +106,22 @@ func ApplyProcTriggerCallback(unit *Unit, aura *Aura, config ProcTrigger) { } if config.Callback.Matches(CallbackOnSpellHitDealt) { - aura.OnSpellHitDealt = callback + procAura.OnSpellHitDealt = callback } if config.Callback.Matches(CallbackOnSpellHitTaken) { - aura.OnSpellHitTaken = callback + procAura.OnSpellHitTaken = callback } if config.Callback.Matches(CallbackOnPeriodicDamageDealt) { - aura.OnPeriodicDamageDealt = callback + procAura.OnPeriodicDamageDealt = callback } if config.Callback.Matches(CallbackOnHealDealt) { - aura.OnHealDealt = callback + procAura.OnHealDealt = callback } if config.Callback.Matches(CallbackOnPeriodicHealDealt) { - aura.OnPeriodicHealDealt = callback + procAura.OnPeriodicHealDealt = callback } if config.Callback.Matches(CallbackOnCastComplete) { - aura.OnCastComplete = func(aura *Aura, sim *Simulation, spell *Spell) { + procAura.OnCastComplete = func(aura *Aura, sim *Simulation, spell *Spell) { if config.SpellFlags != SpellFlagNone && !spell.Flags.Matches(config.SpellFlags) { return } @@ -148,7 +148,7 @@ func ApplyProcTriggerCallback(unit *Unit, aura *Aura, config ProcTrigger) { } } if config.Callback.Matches(CallbackOnApplyEffects) { - aura.OnApplyEffects = func(aura *Aura, sim *Simulation, target *Unit, spell *Spell) { + procAura.OnApplyEffects = func(aura *Aura, sim *Simulation, target *Unit, spell *Spell) { if config.SpellFlags != SpellFlagNone && !spell.Flags.Matches(config.SpellFlags) { return } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index cb31af3046..49f7282d67 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -163,7 +163,6 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Au character := swap.character character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForItem(itemID) - if procMask == ProcMaskUnknown { aura.Deactivate(sim) } else { From e8caedb51109086d81bb6cfbc644e1c90f78b3f5 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 16 Dec 2024 17:35:15 +0100 Subject: [PATCH 030/127] Add IsEnabled check to early return --- sim/core/item_swaps.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 49f7282d67..d4a293dc10 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -138,6 +138,9 @@ func (character *Character) RegisterOnItemSwap(slots []proto.ItemSlot, callback // Helper for handling Effects that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura) { character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) @@ -153,6 +156,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, // Helper for handling procs that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterOnSwapItemUpdateProcMaskWithPPMManager(procMask ProcMask, ppm float64, ppmm *PPMManager) { character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) @@ -161,6 +167,9 @@ func (swap *ItemSwap) RegisterOnSwapItemUpdateProcMaskWithPPMManager(procMask Pr // Helper for handling Item Effects that use the itemID to toggle the aura on and off func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForItem(itemID) if procMask == ProcMaskUnknown { @@ -179,6 +188,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Au // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) @@ -193,6 +205,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aur // Helper for handling Item On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots []proto.ItemSlot) { character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { isSwapItem := swap.ItemExistsInSwapSet(itemID) if !isSwapItem { @@ -230,7 +245,9 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots [ // Helper for handling Enchant On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterOnSwapItemForEnchantOnUseEffect(spell *Spell, slots []proto.ItemSlot) { character := swap.character - + if character == nil || !character.ItemSwap.IsEnabled() { + return + } character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { if spell != nil { equippedItemID := swap.GetEquippedItemBySlot(slot).ID From 8e3dfff7c3e1eabd3d32e8373d2fef6fb98cd086 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 16 Dec 2024 17:37:30 +0100 Subject: [PATCH 031/127] Uncomment ICD check --- sim/common/shared/shared_utils.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 02ce293729..5ea663f694 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -169,9 +169,9 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c Handler: handler, }) - // if config.ICD != 0 { - procAura.Icd = triggerAura.Icd - // } + if config.ICD != 0 { + procAura.Icd = triggerAura.Icd + } eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(config.ID), false) if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) || slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket2) { From 86c1718e5236699abfc375390db0edc5fb6063a4 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 17 Dec 2024 12:54:31 +0100 Subject: [PATCH 032/127] PR Feedback #3 --- sim/common/cata/damage_procs.go | 4 +- sim/common/cata/enchant_effects.go | 10 +- sim/common/cata/gurthalak.go | 2 +- sim/common/shared/shared_utils.go | 8 +- sim/common/tbc/enchant_effects.go | 8 +- sim/common/wotlk/enchant_effects.go | 12 +- sim/common/wotlk/other_effects.go | 2 +- sim/core/apl_actions_casting.go | 11 +- sim/core/apl_values_aura_sets.go | 8 +- sim/core/cast.go | 2 +- sim/core/character.go | 5 +- sim/core/constants.go | 4 + sim/core/consumes.go | 10 +- sim/core/item_effects.go | 2 +- sim/core/item_swaps.go | 133 ++- sim/death_knight/runeforging.go | 6 +- sim/death_knight/talents_frost.go | 2 +- sim/death_knight/talents_unholy.go | 2 +- sim/paladin/guardian_of_ancient_kings.go | 2 +- sim/rogue/ambush.go | 2 +- sim/rogue/rogue.go | 2 +- sim/rogue/subtlety/hemorrhage.go | 2 +- sim/shaman/enhancement/enhancement.go | 2 +- sim/shaman/weapon_imbues.go | 4 +- sim/warlock/demonology/TestDemonology.results | 384 ++++----- sim/warrior/fury/TestFury.results | 768 +++++++++--------- 26 files changed, 679 insertions(+), 718 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index 99990c4a2e..bbc2a37b6f 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -94,7 +94,7 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) + character.ItemSwap.RegisterProc(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -146,7 +146,7 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) + character.ItemSwap.RegisterProc(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) }) } diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index b71d2a05fb..2b558c3822 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -45,7 +45,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(4066, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + character.ItemSwap.RegisterEnchantProc(4066, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -116,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4067, ppm, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -153,7 +153,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4074, ppm, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -238,7 +238,7 @@ func init() { }, })) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4083, ppm, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -328,7 +328,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(4099, ppm, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index e75256c369..5d07d0ed34 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -88,7 +88,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(gurthalakItemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterProc(gurthalakItemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) } } diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 5ea663f694..b2a747f01e 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -178,7 +178,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) } - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(config.ID, triggerAura, eligibleSlotsForItem) + character.ItemSwap.RegisterProc(config.ID, triggerAura, eligibleSlotsForItem) }) } @@ -463,9 +463,9 @@ func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpel } if config.PPM != 0 { - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura) + character.ItemSwap.RegisterPPMEffect(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura) } else { - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(config.EnchantID, triggerAura, config.Slots) + character.ItemSwap.RegisterEnchantProc(config.EnchantID, triggerAura, config.Slots) } }) } @@ -628,6 +628,6 @@ func NewEnchantProcDamageEffect(config EnchantProcDamageEffect) { } aura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(config.EnchantID, aura, config.Slots) + character.ItemSwap.RegisterEnchantProc(config.EnchantID, aura, config.Slots) }) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index 0276481cac..2e4dfe3da1 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -90,7 +90,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(1900, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -130,7 +130,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(2673, 0.73, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -173,7 +173,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3225, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -215,7 +215,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3273, 2.15, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura) } core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 3fe6c31eda..852d88a376 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -56,7 +56,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3251, 4.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura) }) core.NewEnchantEffect(3239, func(agent core.Agent) { @@ -96,7 +96,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3239, 4.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura) }) core.NewEnchantEffect(3607, func(agent core.Agent) { @@ -144,7 +144,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3748, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterEnchantProc(3748, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) }) core.NewEnchantEffect(3247, func(agent core.Agent) { @@ -196,7 +196,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3789, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura) }) // TODO: These are stand-in values without any real reference. @@ -225,7 +225,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3241, 3.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura) }) core.NewEnchantEffect(3790, func(agent core.Agent) { @@ -259,7 +259,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3790, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterEnchantProc(3790, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) core.AddWeaponEffect(3843, func(agent core.Agent, _ proto.ItemSlot) { diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 587dedf810..ee5f85cbda 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -999,7 +999,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForItemProcEffect(itemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + character.ItemSwap.RegisterProc(itemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) }) }) diff --git a/sim/core/apl_actions_casting.go b/sim/core/apl_actions_casting.go index 79d84ecff4..18b73ba58c 100644 --- a/sim/core/apl_actions_casting.go +++ b/sim/core/apl_actions_casting.go @@ -261,9 +261,8 @@ type APLActionCastAllStatBuffCooldowns struct { statTypesToMatch []stats.Stat - allSubactions []*APLActionCastSpell - allEquippedSubactions []*APLActionCastSpell - readySubactions []*APLActionCastSpell + allSubactions []*APLActionCastSpell + readySubactions []*APLActionCastSpell } func (rot *APLRotation) newActionCastAllStatBuffCooldowns(config *proto.APLActionCastAllStatBuffCooldowns) APLActionImpl { @@ -308,12 +307,12 @@ func (action *APLActionCastAllStatBuffCooldowns) getEquippedSubActions() []*APLA }) } func (action *APLActionCastAllStatBuffCooldowns) IsReady(sim *Simulation) bool { - action.allEquippedSubactions = action.getEquippedSubActions() - action.readySubactions = FilterSlice(action.allEquippedSubactions, func(subAction *APLActionCastSpell) bool { + allEquippedSubactions := action.getEquippedSubActions() + action.readySubactions = FilterSlice(allEquippedSubactions, func(subAction *APLActionCastSpell) bool { return subAction.IsReady(sim) }) - return Ternary(action.character.Rotation.inSequence, len(action.readySubactions) == len(action.allEquippedSubactions), len(action.readySubactions) > 0) + return Ternary(action.character.Rotation.inSequence, len(action.readySubactions) == len(allEquippedSubactions), len(action.readySubactions) > 0) } func (action *APLActionCastAllStatBuffCooldowns) Execute(sim *Simulation) { actionSetToUse := action.readySubactions diff --git a/sim/core/apl_values_aura_sets.go b/sim/core/apl_values_aura_sets.go index cf7b750486..1888a1e4a4 100644 --- a/sim/core/apl_values_aura_sets.go +++ b/sim/core/apl_values_aura_sets.go @@ -194,16 +194,12 @@ type APLValueNumStatBuffCooldowns struct { matchingSpells []*Spell } -func (rot *APLRotation) newValueNumStatBuffCooldowns(config *proto.APLValueNumStatBuffCooldowns, uuid *proto.UUID) APLValue { +func (rot *APLRotation) newValueNumStatBuffCooldowns(config *proto.APLValueNumStatBuffCooldowns, _ *proto.UUID) APLValue { unit := rot.unit character := unit.Env.Raid.GetPlayerFromUnit(unit).GetCharacter() statTypesToMatch := stats.IntTupleToStatsList(config.StatType1, config.StatType2, config.StatType3) matchingSpells := character.GetMatchingStatBuffSpells(statTypesToMatch) - if len(matchingSpells) == 0 { - rot.ValidationMessageByUUID(uuid, proto.LogLevel_Warning, "No stat buff cooldowns found for: %s", StringFromStatTypes(statTypesToMatch)) - } - return &APLValueNumStatBuffCooldowns{ statTypesToMatch: statTypesToMatch, matchingSpells: matchingSpells, @@ -229,5 +225,5 @@ func (value *APLValueNumStatBuffCooldowns) Finalize(rot *APLRotation) { return spell.ActionID }) - rot.ValidationMessageByUUID(value.Uuid, proto.LogLevel_Information, "%s will check the following spell(s)/item(s): %s", value, StringFromActionIDs(actionIDs)) + rot.ValidationMessageByUUID(value.Uuid, proto.LogLevel_Information, "%s will count the currently equipped subset of: %s", value, StringFromActionIDs(actionIDs)) } diff --git a/sim/core/cast.go b/sim/core/cast.go index d6d096b1b7..e3d95b5c4c 100644 --- a/sim/core/cast.go +++ b/sim/core/cast.go @@ -101,7 +101,7 @@ func (spell *Spell) makeCastFunc(config CastConfig) CastSuccessFunc { if spell.Flags != 0 { if spell.Flags.Matches(SpellFlagSwapped) { - return spell.castFailureHelper(sim, "spell belong to a swapped item") + return spell.castFailureHelper(sim, "spell attached to an un-equipped item") } } diff --git a/sim/core/character.go b/sim/core/character.go index de30dd2964..e16453f3b9 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -630,9 +630,6 @@ func (character *Character) getProcMaskFor(pred func(item *Item) bool) ProcMask if pred(character.OffHand()) { mask |= ProcMaskMeleeOH } - if pred(character.Trinket1()) || pred(character.Trinket2()) || pred(character.Back()) { - mask |= ProcMaskProc - } return mask } @@ -833,7 +830,7 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta // However due to dynamic stats only being able to be added after finalize() // we need to maintain 2 stat dependencies to toggle the effect when swapping items if character.ItemSwap.IsEnabled() { - character.RegisterOnItemSwap([]proto.ItemSlot{ + character.RegisterItemSwapCallback([]proto.ItemSlot{ proto.ItemSlot_ItemSlotHead, proto.ItemSlot_ItemSlotShoulder, proto.ItemSlot_ItemSlotChest, diff --git a/sim/core/constants.go b/sim/core/constants.go index 6856544074..e28e7eb530 100644 --- a/sim/core/constants.go +++ b/sim/core/constants.go @@ -2,6 +2,8 @@ package core import ( "time" + + "github.com/wowsims/cata/sim/core/proto" ) const CharacterLevel = 85 @@ -36,3 +38,5 @@ const MainHand Hand = true const OffHand Hand = false const CombatTableCoverageCap = 1.024 // 102.4% chance to avoid an attack + +const NumItemSlots = proto.ItemSlot_ItemSlotRanged + 1 diff --git a/sim/core/consumes.go b/sim/core/consumes.go index 3b85a41a98..b2f57a8019 100644 --- a/sim/core/consumes.go +++ b/sim/core/consumes.go @@ -978,7 +978,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeDPS, }) - character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) + character.ItemSwap.ProcessTinker(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsQuickflipDeflectionPlates: // Enchant: 4180, Spell: 82176 - Quickflip Deflection Plates actionID := ActionID{SpellID: 82176} @@ -1011,7 +1011,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeSurvival, }) - character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) + character.ItemSwap.ProcessTinker(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsTazikShocker: // Enchant: 4181, Spell: 82180 - Tazik Shocker actionID := ActionID{SpellID: 82179} @@ -1038,7 +1038,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { spell.CalcAndDealDamage(sim, unit, sim.Roll(4320, 961), spell.OutcomeMagicHitAndCrit) }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) + character.ItemSwap.ProcessTinker(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) character.AddMajorCooldown(MajorCooldown{ Spell: spell, @@ -1080,7 +1080,7 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeSurvival, }) - character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) + character.ItemSwap.ProcessTinker(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) case proto.TinkerHands_TinkerHandsZ50ManaGulper: // Enchant: 4183, Spell: 82186 - Z50 Mana Gulper actionId := ActionID{SpellID: 82186} @@ -1121,6 +1121,6 @@ func registerTinkerHandsCD(agent Agent, consumes *proto.Consumes) { Priority: CooldownPriorityLow, Type: CooldownTypeMana, }) - character.ItemSwap.RegisterOnSwapItemForEnchantOnUseEffect(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) + character.ItemSwap.ProcessTinker(spell, []proto.ItemSlot{proto.ItemSlot_ItemSlotHands}) } } diff --git a/sim/core/item_effects.go b/sim/core/item_effects.go index a89272abbd..0877ddce06 100644 --- a/sim/core/item_effects.go +++ b/sim/core/item_effects.go @@ -118,7 +118,7 @@ func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration tim if otherEffects != nil { otherEffects(agent) } - agent.GetCharacter().ItemSwap.RegisterOnSwapItemForItemOnUseEffect(itemID, EligibleSlotsForItem(GetItemByID(itemID), false)) + agent.GetCharacter().ItemSwap.RegisterActive(itemID, EligibleSlotsForItem(GetItemByID(itemID), false)) }) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index d4a293dc10..8ca690db33 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -7,13 +7,11 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -type OnSwapItem func(*Simulation, proto.ItemSlot) - -const numberOfGearPieces = int32(17) +type OnItemSwap func(*Simulation, proto.ItemSlot) type ItemSwap struct { character *Character - onSwapCallbacks [numberOfGearPieces][]OnSwapItem + onSwapCallbacks [NumItemSlots][]OnItemSwap mhCritMultiplier float64 ohCritMultiplier float64 @@ -38,69 +36,38 @@ type ItemSwap struct { **/ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMultiplier float64, ohCritMultiplier float64, rangedCritMultiplier float64) { var slots []proto.ItemSlot - var hasItemSwap [numberOfGearPieces]bool var swapItems Equipment + hasItemSwap := make(map[proto.ItemSlot]bool) for slot, item := range itemSwap.Items { - hasItemSwap[slot] = item != nil && item.Id != 0 - swapItems[slot] = toItem(item) + itemSlot := proto.ItemSlot(slot) + hasItemSwap[itemSlot] = item != nil && item.Id != 0 + swapItems[itemSlot] = toItem(item) } has2H := swapItems[proto.ItemSlot_ItemSlotMainHand].HandType == proto.HandType_HandTypeTwoHand hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() - if hasItemSwap[proto.ItemSlot_ItemSlotHead] { - slots = append(slots, proto.ItemSlot_ItemSlotHead) - } - if hasItemSwap[proto.ItemSlot_ItemSlotNeck] { - slots = append(slots, proto.ItemSlot_ItemSlotNeck) - } - if hasItemSwap[proto.ItemSlot_ItemSlotShoulder] { - slots = append(slots, proto.ItemSlot_ItemSlotShoulder) - } - if hasItemSwap[proto.ItemSlot_ItemSlotBack] { - slots = append(slots, proto.ItemSlot_ItemSlotBack) - } - if hasItemSwap[proto.ItemSlot_ItemSlotChest] { - slots = append(slots, proto.ItemSlot_ItemSlotChest) - } - if hasItemSwap[proto.ItemSlot_ItemSlotWrist] { - slots = append(slots, proto.ItemSlot_ItemSlotWrist) - } - if hasItemSwap[proto.ItemSlot_ItemSlotHands] { - slots = append(slots, proto.ItemSlot_ItemSlotHands) - } - if hasItemSwap[proto.ItemSlot_ItemSlotWaist] { - slots = append(slots, proto.ItemSlot_ItemSlotWaist) - } - if hasItemSwap[proto.ItemSlot_ItemSlotLegs] { - slots = append(slots, proto.ItemSlot_ItemSlotLegs) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFeet] { - slots = append(slots, proto.ItemSlot_ItemSlotFeet) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFinger1] { - slots = append(slots, proto.ItemSlot_ItemSlotFinger1) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFinger2] { - slots = append(slots, proto.ItemSlot_ItemSlotFinger2) - } - if hasItemSwap[proto.ItemSlot_ItemSlotTrinket1] { - slots = append(slots, proto.ItemSlot_ItemSlotTrinket1) - } - if hasItemSwap[proto.ItemSlot_ItemSlotTrinket2] { - slots = append(slots, proto.ItemSlot_ItemSlotTrinket2) - } // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - if hasItemSwap[proto.ItemSlot_ItemSlotMainHand] || (hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh) { - slots = append(slots, proto.ItemSlot_ItemSlotMainHand) - } - if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] || (has2H && hasOh) { - slots = append(slots, proto.ItemSlot_ItemSlotOffHand) - } - if hasItemSwap[proto.ItemSlot_ItemSlotRanged] { - slots = append(slots, proto.ItemSlot_ItemSlotRanged) + hasItemSwap = FilterMap(hasItemSwap, func(itemSlot proto.ItemSlot, v bool) bool { + if itemSlot == proto.ItemSlot_ItemSlotMainHand || itemSlot == proto.ItemSlot_ItemSlotOffHand { + if itemSlot == proto.ItemSlot_ItemSlotMainHand || (itemSlot == proto.ItemSlot_ItemSlotOffHand && hasMh) { + return true + } else if itemSlot == proto.ItemSlot_ItemSlotOffHand || (has2H && hasOh) { + return true + } else { + return false + } + } else { + return true + } + }) + + for slot, hasSlotItemSwap := range hasItemSwap { + if hasSlotItemSwap { + slots = append(slots, slot) + } } if len(slots) == 0 { @@ -124,7 +91,7 @@ func (swap *ItemSwap) initialize(character *Character) { swap.character = character } -func (character *Character) RegisterOnItemSwap(slots []proto.ItemSlot, callback OnSwapItem) { +func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, callback OnItemSwap) { if character == nil || !character.ItemSwap.IsEnabled() { return } @@ -136,12 +103,12 @@ func (character *Character) RegisterOnItemSwap(slots []proto.ItemSlot, callback } // Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura) { +func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) @@ -154,44 +121,44 @@ func (swap *ItemSwap) RegisterOnSwapItemForEffectWithPPMManager(effectID int32, } // Helper for handling procs that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterOnSwapItemUpdateProcMaskWithPPMManager(procMask ProcMask, ppm float64, ppmm *PPMManager) { +func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) } // Helper for handling Item Effects that use the itemID to toggle the aura on and off -func (swap *ItemSwap) RegisterOnSwapItemForItemProcEffect(itemID int32, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { - procMask := character.GetProcMaskForItem(itemID) - if procMask == ProcMaskUnknown { - aura.Deactivate(sim) - } else { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + hasItemEquipped := swap.HasItemEquipped(itemID) + if hasItemEquipped { if !aura.IsActive() { aura.Activate(sim) if aura.Icd != nil { aura.Icd.Use(sim) } } + } else { + aura.Deactivate(sim) } }) } // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off -func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { procMask := character.GetProcMaskForEnchant(effectID) if procMask == ProcMaskUnknown { @@ -203,12 +170,12 @@ func (swap *ItemSwap) RegisterOnSwapItemForEnchantProcEffect(effectID int32, aur } // Helper for handling Item On Use effects to set a 30s cd on the related spell. -func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { isSwapItem := swap.ItemExistsInSwapSet(itemID) if !isSwapItem { return @@ -243,21 +210,19 @@ func (swap *ItemSwap) RegisterOnSwapItemForItemOnUseEffect(itemID int32, slots [ } // Helper for handling Enchant On Use effects to set a 30s cd on the related spell. -func (swap *ItemSwap) RegisterOnSwapItemForEnchantOnUseEffect(spell *Spell, slots []proto.ItemSlot) { +func (swap *ItemSwap) ProcessTinker(spell *Spell, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterOnItemSwap(slots, func(sim *Simulation, slot proto.ItemSlot) { - if spell != nil { - equippedItemID := swap.GetEquippedItemBySlot(slot).ID - swappedItemID := swap.GetUnequippedItemBySlot(slot).ID - if !swap.initialized { - return - } - if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { - spell.CD.Set(sim.CurrentTime + time.Second*30) - } + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + if spell == nil || !swap.initialized { + return + } + equippedItemID := swap.GetEquippedItemBySlot(slot).ID + swappedItemID := swap.GetUnequippedItemBySlot(slot).ID + if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { + spell.CD.Set(sim.CurrentTime + time.Second*30) } }) } @@ -288,7 +253,7 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { } func (swap *ItemSwap) GetItemSwapItemSlot(itemID int32) proto.ItemSlot { - slotsToCheck := Ternary(swap.IsSwapped(), swap.originalEquip, swap.swapEquip) + slotsToCheck := Ternary(swap.IsSwapped(), swap.swapEquip, swap.originalEquip) for slot, item := range slotsToCheck { if item.ID == itemID { return proto.ItemSlot(slot) diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 51627c1dda..9691afedbf 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -101,7 +101,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3368, 2.0, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura) }) // Rune of Cinderglacier @@ -162,7 +162,7 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(3369, 1.0, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura) }) // Rune of Razorice @@ -256,6 +256,6 @@ func init() { }, }) - character.ItemSwap.RegisterOnSwapItemForEnchantProcEffect(3370, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterEnchantProc(3370, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) } diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index f8bc69d54f..a0e388d460 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -232,7 +232,7 @@ func (dk *DeathKnight) applyKillingMachine() { }, }) - dk.ItemSwap.RegisterOnSwapItemUpdateProcMaskWithPPMManager(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) } func (dk *DeathKnight) applyMightOfTheFrozenWastes() { diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index a2789e5b0a..8744ccae74 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -331,7 +331,7 @@ func (dk *DeathKnight) applySuddenDoom() { }, }) - dk.ItemSwap.RegisterOnSwapItemUpdateProcMaskWithPPMManager(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) } func (dk *DeathKnight) applyShadowInfusion() *core.Aura { diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index 50256610b4..8340cb3871 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -221,7 +221,7 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor }) if paladin.ItemSwap.IsEnabled() { - paladin.RegisterOnItemSwap([]proto.ItemSlot{ + paladin.RegisterItemSwapCallback([]proto.ItemSlot{ proto.ItemSlot_ItemSlotHead, proto.ItemSlot_ItemSlotShoulder, proto.ItemSlot_ItemSlotChest, diff --git a/sim/rogue/ambush.go b/sim/rogue/ambush.go index ce11856654..f07374948f 100644 --- a/sim/rogue/ambush.go +++ b/sim/rogue/ambush.go @@ -57,7 +57,7 @@ func (rogue *Rogue) registerAmbushSpell() { }, }) - rogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { + rogue.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { // Recalculate Ambush's multiplier in case the MH weapon changed. rogue.Ambush.DamageMultiplier = core.TernaryFloat64(rogue.HasDagger(core.MainHand), 2.86, 1.97) }) diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 1134cb607e..c2f8200ff5 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -204,7 +204,7 @@ func (rogue *Rogue) Initialize() { rogue.T12ToTLastBuff = 3 // re-configure poisons when performing an item swap - rogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { + rogue.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { if !rogue.Options.ApplyPoisonsManually { if rogue.MainHand() == nil || rogue.OffHand() == nil { return diff --git a/sim/rogue/subtlety/hemorrhage.go b/sim/rogue/subtlety/hemorrhage.go index 7471eb2949..f74860a59d 100644 --- a/sim/rogue/subtlety/hemorrhage.go +++ b/sim/rogue/subtlety/hemorrhage.go @@ -100,7 +100,7 @@ func (subRogue *SubtletyRogue) registerHemorrhageSpell() { RelatedAuras: []core.AuraArray{hemoAuras}, }) - subRogue.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { + subRogue.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, func(s *core.Simulation, slot proto.ItemSlot) { // Recalculate Hemorrhage's multiplier in case the MH weapon changed. subRogue.Hemorrhage.DamageMultiplier = core.TernaryFloat64(subRogue.HasDagger(core.MainHand), 3.25, 2.24) }) diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index fe4aa2f7a1..e1794ecedf 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -103,7 +103,7 @@ func (enh *EnhancementShaman) Initialize() { if enh.ItemSwap.IsEnabled() { enh.ApplyFlametongueImbueSwap(enh.getImbueProcMask(proto.ShamanImbue_FlametongueWeapon)) - enh.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(_ *core.Simulation, slot proto.ItemSlot) { + enh.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(_ *core.Simulation, slot proto.ItemSlot) { enh.ApplySyncType(proto.ShamanSyncType_Auto) }) } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 643cec2556..a2036ca6ec 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -9,7 +9,7 @@ import ( ) func (shaman *Shaman) RegisterOnItemSwapWithImbue(effectID int32, procMask *core.ProcMask, aura *core.Aura) { - shaman.RegisterOnItemSwap([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { + shaman.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { mask := core.ProcMaskUnknown if shaman.MainHand().TempEnchant == effectID { mask |= core.ProcMaskMeleeMH @@ -312,7 +312,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterOnSwapItemForEffectWithPPMManager(2, 9.0, &ppmm, aura) + shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index ecafeb4b70..2add2dded8 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1973,673 +1973,673 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57043.25884 - tps: 48024.06105 + dps: 53774.73184 + tps: 46577.32425 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40663.77912 - tps: 19903.84966 + dps: 37492.3949 + tps: 19155.73929 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59047.77094 - tps: 26589.74346 + dps: 48699.37942 + tps: 25105.58719 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48977.89462 - tps: 44275.65804 + dps: 45761.40981 + tps: 42634.38936 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29080.88846 - tps: 14333.80688 + dps: 26773.43174 + tps: 13714.56266 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39543.26682 - tps: 17874.15188 + dps: 31441.66369 + tps: 16327.97119 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57081.04956 - tps: 47190.61888 + dps: 53901.0341 + tps: 46348.88577 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41045.40234 - tps: 21094.17349 + dps: 37948.92912 + tps: 20273.9018 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60035.63808 - tps: 28904 + dps: 49692.73579 + tps: 26956.48681 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48978.16608 - tps: 42594.27951 + dps: 45894.41306 + tps: 40479.31889 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29185.15016 - tps: 15013.89176 + dps: 26994.20439 + tps: 14421.18222 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39372.64349 - tps: 18700.89866 + dps: 31775.52591 + tps: 17492.00986 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57793.41492 - tps: 49235.58829 + dps: 54433.22549 + tps: 47352.88051 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41113.83337 - tps: 20364.35885 + dps: 38285.6779 + tps: 19760.1316 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60029.91119 - tps: 27388.27541 + dps: 49673.25069 + tps: 25972.22549 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49641.74745 - tps: 44969.91181 + dps: 46270.81618 + tps: 42737.662 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29510.74936 - tps: 14645.97841 + dps: 27200.41893 + tps: 14088.02936 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40113.54793 - tps: 18334.74574 + dps: 31950.45939 + tps: 16871.91949 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51523.66532 - tps: 42014.7145 + dps: 48061.03057 + tps: 40100.93316 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37112.7246 - tps: 18071.68933 + dps: 34067.4605 + tps: 17291.09267 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56882.34888 - tps: 26114.76979 + dps: 46001.52067 + tps: 24231.80177 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44757.49735 - tps: 38779.68725 + dps: 41736.74007 + tps: 37122.18769 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26940.57925 - tps: 12970.19502 + dps: 24729.44806 + tps: 12516.30419 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37403.81826 - tps: 16608.40029 + dps: 29787.38227 + tps: 15646.35629 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 56786.62783 - tps: 47735.85184 + dps: 53490.4495 + tps: 46164.24266 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40453.06544 - tps: 19980.35683 + dps: 37289.04782 + tps: 19031.49073 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58855.1628 - tps: 26675.22819 + dps: 48153.10316 + tps: 25027.91244 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48792.66061 - tps: 44107.0741 + dps: 45301.20075 + tps: 42057.0504 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28852.19529 - tps: 14123.31409 + dps: 26585.45776 + tps: 13677.44358 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39187.31076 - tps: 17515.21928 + dps: 31482.79355 + tps: 16438.13014 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57157.34582 - tps: 47259.64013 + dps: 53459.79653 + tps: 45591.36491 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41004.88934 - tps: 21073.01979 + dps: 37796.06036 + tps: 20236.46399 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60366.64469 - tps: 28754.09277 + dps: 49542.40348 + tps: 27079.89864 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48694.7594 - tps: 42170.84466 + dps: 45790.84756 + tps: 40417.11959 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28988.55453 - tps: 14762.5163 + dps: 26921.35373 + tps: 14381.72348 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39143.27583 - tps: 18423.98029 + dps: 31482.21484 + tps: 17241.23431 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57385.22192 - tps: 48093.5939 + dps: 54167.53111 + tps: 46697.90371 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41035.08572 - tps: 20450.76442 + dps: 37942.70327 + tps: 19547.61636 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59569.78688 - tps: 27334.14394 + dps: 49011.56763 + tps: 25727.88535 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49062.25333 - tps: 44220.49921 + dps: 46002.91143 + tps: 42668.82308 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29280.72923 - tps: 14475.92319 + dps: 26904.03864 + tps: 13953.04446 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39779.32747 - tps: 18010.92709 + dps: 32011.27196 + tps: 16825.22177 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51014.49214 - tps: 41080.72529 + dps: 48006.59483 + tps: 40117.53489 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37132.0408 - tps: 18098.84645 + dps: 34067.8731 + tps: 17395.7112 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56392.12733 - tps: 25376.40084 + dps: 45384.51598 + tps: 23972.15949 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44262.61088 - tps: 37834.24023 + dps: 41563.07312 + tps: 36791.50936 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26817.65752 - tps: 12816.35151 + dps: 24561.96022 + tps: 12397.19278 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 37221.0084 - tps: 16575.40868 + dps: 29671.02864 + tps: 15607.481 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58138.7318 - tps: 48300.58261 + dps: 54445.37832 + tps: 46355.78206 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41617.44471 - tps: 20222.84046 + dps: 38106.30822 + tps: 19179.67002 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60786.16267 - tps: 27064.27246 + dps: 49371.30908 + tps: 25418.86953 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50162.51216 - tps: 44607.63024 + dps: 46396.4843 + tps: 42437.19041 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29731.87216 - tps: 14280.22436 + dps: 27158.77086 + tps: 13791.10617 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40655.1601 - tps: 17792.22806 + dps: 32382.29819 + tps: 16711.83243 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58482.01174 - tps: 47630.68562 + dps: 54332.74997 + tps: 45836.7417 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 42133.56543 - tps: 21299.59206 + dps: 38566.62625 + tps: 20377.66206 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62317.64548 - tps: 29145.21617 + dps: 50800.60041 + tps: 27501.48996 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50003.83045 - tps: 42547.45762 + dps: 46914.50397 + tps: 40905.92677 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29873.2466 - tps: 14954.357 + dps: 27540.14083 + tps: 14484.51998 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40636.12953 - tps: 18717.32526 + dps: 32413.37779 + tps: 17529.16303 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58896.70608 - tps: 48887.90418 + dps: 55084.25625 + tps: 46737.36989 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 42095.91652 - tps: 20690.64198 + dps: 38789.17706 + tps: 19740.53369 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61512.419 - tps: 27736.29162 + dps: 50225.14735 + tps: 26114.78225 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50385.19333 - tps: 44745.60496 + dps: 46983.73848 + tps: 42908.26832 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30241.29935 - tps: 14682.9301 + dps: 27527.41023 + tps: 14121.33548 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 41253.43596 - tps: 18291.84556 + dps: 32919.75938 + tps: 17101.3418 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 52524.26686 - tps: 41460.36288 + dps: 48917.80831 + tps: 40274.35225 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38224.03362 - tps: 18304.04967 + dps: 34838.36215 + tps: 17531.90024 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58339.79288 - tps: 25768.43106 + dps: 46604.34036 + tps: 24388.20824 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45668.34687 - tps: 38414.06553 + dps: 42653.61417 + tps: 37106.21094 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27705.23367 - tps: 12971.29278 + dps: 25218.96463 + tps: 12545.91106 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 38723.34761 - tps: 16854.02011 + dps: 30605.95066 + tps: 15885.46505 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57508.18226 - tps: 48167.88948 + dps: 54226.68766 + tps: 46954.23373 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40800.58854 - tps: 20093.92371 + dps: 38026.08674 + tps: 19542.76235 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60561.78672 - tps: 27154.67451 + dps: 50466.10231 + tps: 25985.14482 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50049.9926 - tps: 45614.12423 + dps: 46790.30747 + tps: 43710.46391 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29414.40327 - tps: 14426.74194 + dps: 26971.27154 + tps: 13910.24333 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 41291.48561 - tps: 18712.64005 + dps: 32641.34481 + tps: 17337.13557 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57951.83699 - tps: 47552.10983 + dps: 54238.35458 + tps: 46021.00371 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41393.01178 - tps: 21362.07215 + dps: 38387.84304 + tps: 20592.89903 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61857.22655 - tps: 29388.74758 + dps: 51284.98123 + tps: 28091.31986 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50641.77049 - tps: 44303.99155 + dps: 47273.47577 + tps: 41909.49485 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29683.2886 - tps: 15164.2742 + dps: 27726.85247 + tps: 14827.45388 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 41175.14188 - tps: 19518.59722 + dps: 33859.60758 + tps: 18579.32593 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58226.90822 - tps: 48754.25717 + dps: 54994.08102 + tps: 47629.00916 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41450.02816 - tps: 20594.14887 + dps: 38655.81358 + tps: 20018.49863 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61497.37423 - tps: 28106.90671 + dps: 51286.08481 + tps: 26798.41373 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50772.46835 - tps: 46096.42463 + dps: 47458.71508 + tps: 43938.70572 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30012.37888 - tps: 14897.02053 + dps: 27391.74759 + tps: 14322.84015 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 41916.18244 - tps: 19100.60193 + dps: 32999.99988 + tps: 17650.95463 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51739.24236 - tps: 41553.46916 + dps: 48775.52508 + tps: 40323.52805 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37372.75777 - tps: 18270.05791 + dps: 34735.16442 + tps: 17608.47491 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58238.81417 - tps: 26684.74723 + dps: 47866.79097 + tps: 24894.9516 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45689.88096 - tps: 38966.89542 + dps: 42955.43658 + tps: 37457.46225 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27066.09023 - tps: 13084.52621 + dps: 24937.17776 + tps: 12619.88953 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 38352.36092 - tps: 17264.69407 + dps: 31105.46338 + tps: 16617.11186 } } dps_results: { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 377a6994c9..76eaedddd5 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2148,1345 +2148,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100704.61683 - tps: 109005.63461 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39706.93445 - tps: 33473.77773 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52208.70003 - tps: 43104.12436 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67641.49713 - tps: 74068.2799 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24542.51429 - tps: 20154.49504 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28265.65333 - tps: 22236.24281 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100927.87335 - tps: 109248.08631 + dps: 98178.22857 + tps: 106320.01191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39791.16587 - tps: 33548.68796 + dps: 38681.26468 + tps: 32684.83038 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52581.97479 - tps: 43438.11443 + dps: 50494.38684 + tps: 41573.23235 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67769.81482 - tps: 74209.64484 + dps: 66827.87496 + tps: 73239.79121 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24583.72583 - tps: 20189.43612 + dps: 23998.40322 + tps: 19827.83982 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28450.71567 - tps: 22394.9859 + dps: 27407.87806 + tps: 21500.67436 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100704.61683 - tps: 109005.63461 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38979.85104 - tps: 32293.54811 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51053.0471 - tps: 42053.55589 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67641.49713 - tps: 74068.2799 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24330.14251 - tps: 19607.74072 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28288.37552 - tps: 21982.88888 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100927.87335 - tps: 109248.08631 + dps: 98178.22857 + tps: 106320.01191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39063.89804 - tps: 32367.67771 + dps: 38049.28032 + tps: 31605.16788 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51421.20328 - tps: 42380.88929 + dps: 49347.78616 + tps: 40537.52961 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67769.81482 - tps: 74209.64484 + dps: 66827.87496 + tps: 73239.79121 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24371.17693 - tps: 19642.31254 + dps: 23633.4034 + tps: 19169.52846 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28472.81176 - tps: 22139.69787 + dps: 27436.245 + tps: 21259.23578 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82365.98605 - tps: 89645.09633 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31703.05064 - tps: 27219.95622 + dps: 23269.31918 + tps: 20423.76687 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42320.07515 - tps: 35934.20183 + dps: 30526.86593 + tps: 26611.37993 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56131.036 - tps: 61893.4419 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19748.75557 - tps: 16750.31057 + dps: 14308.05334 + tps: 12480.24319 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22706.07966 - tps: 18235.9627 + dps: 16736.77303 + tps: 13938.39489 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82552.23344 - tps: 89848.33734 + dps: 81178.17169 + tps: 88543.96292 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31772.17807 - tps: 27282.8313 + dps: 30854.6834 + tps: 26675.45451 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42624.10597 - tps: 36212.20132 + dps: 40913.62985 + tps: 34649.10133 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56236.98879 - tps: 62011.04383 + dps: 55426.52759 + tps: 61242.22445 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19782.12468 - tps: 16779.34857 + dps: 19176.28046 + tps: 16388.07976 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22852.68532 - tps: 18364.49279 + dps: 22027.7033 + tps: 17641.7698 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82365.98605 - tps: 89645.09633 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31685.97215 - tps: 26617.24563 + dps: 23269.31918 + tps: 20423.76687 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41827.01654 - tps: 34971.48746 + dps: 30526.86593 + tps: 26611.37993 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56131.036 - tps: 61893.4419 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19718.56882 - tps: 16298.54355 + dps: 14308.05334 + tps: 12480.24319 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22615.39749 - tps: 17881.24029 + dps: 16736.77303 + tps: 13938.39489 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82552.23344 - tps: 89848.33734 + dps: 81178.17169 + tps: 88543.96292 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31755.38913 - tps: 26679.57475 + dps: 30985.90986 + tps: 26192.22837 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42126.27626 - tps: 35241.41099 + dps: 40450.87201 + tps: 33732.87581 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56236.98879 - tps: 62011.04383 + dps: 55426.52759 + tps: 61242.22445 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19751.68051 - tps: 16326.97296 + dps: 19177.95573 + tps: 15903.03894 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22761.98844 - tps: 18007.79983 + dps: 21934.04182 + tps: 17293.15537 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151204.54082 - tps: 166178.35353 + dps: 148414.4034 + tps: 163231.11186 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50918.30251 - tps: 41528.29159 + dps: 49416.6154 + tps: 40683.52398 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66001.52402 - tps: 53068.85469 + dps: 63340.08782 + tps: 50790.21162 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106636.49927 - tps: 118721.30576 + dps: 105005.49415 + tps: 116994.23921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32674.52677 - tps: 25972.57465 + dps: 31729.90648 + tps: 25317.48291 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37124.75562 - tps: 28195.44144 + dps: 35739.65809 + tps: 27085.32088 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151539.73526 - tps: 166546.31682 + dps: 148749.59784 + tps: 163599.07515 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51028.21354 - tps: 41621.75111 + dps: 49526.52643 + tps: 40776.98349 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66475.95444 - tps: 53474.80222 + dps: 63814.51824 + tps: 51196.15915 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106838.90133 - tps: 118946.8536 + dps: 105207.8962 + tps: 117219.78705 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32730.92086 - tps: 26017.595 + dps: 31786.30057 + tps: 25362.50325 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37372.10887 - tps: 28393.87433 + dps: 35987.01135 + tps: 27283.75377 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151204.54082 - tps: 166178.35353 + dps: 148414.4034 + tps: 163231.11186 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50780.44348 - tps: 40463.62281 + dps: 49512.58247 + tps: 39599.03191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65463.2918 - tps: 52037.92917 + dps: 62816.38127 + tps: 49790.90577 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106636.49927 - tps: 118721.30576 + dps: 105005.49415 + tps: 116994.23921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32656.31319 - tps: 25171.87865 + dps: 31744.80589 + tps: 24752.10304 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36957.13924 - tps: 27360.41316 + dps: 35588.96812 + tps: 26282.7514 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151539.73526 - tps: 166546.31682 + dps: 148749.59784 + tps: 163599.07515 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50889.16552 - tps: 40555.16799 + dps: 49621.3045 + tps: 39690.57709 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65934.0809 - tps: 52437.47908 + dps: 63287.17037 + tps: 50190.45568 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106838.90133 - tps: 118946.8536 + dps: 105207.8962 + tps: 117219.78705 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32712.10467 - tps: 25215.44826 + dps: 31800.59737 + tps: 24795.67265 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37201.19732 - tps: 27553.15678 + dps: 35833.0262 + tps: 26475.49502 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 125249.04384 - tps: 138815.43494 + dps: 122436.8566 + tps: 135849.8381 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40945.03019 - tps: 34584.38011 + dps: 39715.84982 + tps: 33717.45621 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53101.52795 - tps: 44190.67531 + dps: 50936.94675 + tps: 42293.07016 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88621.28512 - tps: 99360.54444 + dps: 87016.28406 + tps: 97653.68904 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25762.2889 - tps: 21164.92535 + dps: 25073.12205 + tps: 20779.48845 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29929.55143 - tps: 23732.9559 + dps: 28811.16403 + tps: 22799.86535 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 125524.74786 - tps: 139119.81799 + dps: 122712.56062 + tps: 136154.22116 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 41032.2429 - tps: 34660.09778 + dps: 39803.06254 + tps: 33793.17387 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53487.34133 - tps: 44529.03393 + dps: 51322.76013 + tps: 42631.42878 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88789.5231 - tps: 99549.61564 + dps: 87184.52204 + tps: 97842.76023 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25807.35099 - tps: 21202.15288 + dps: 25118.18415 + tps: 20816.71599 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30128.26434 - tps: 23898.75781 + dps: 29009.87694 + tps: 22965.66726 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 125249.04384 - tps: 138815.43494 + dps: 122436.8566 + tps: 135849.8381 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 41139.02737 - tps: 33397.44475 + dps: 40001.93648 + tps: 32713.74634 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53461.87743 - tps: 43192.39802 + dps: 51296.11716 + tps: 41329.28001 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88621.28512 - tps: 99360.54444 + dps: 87016.28406 + tps: 97653.68904 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26032.39568 - tps: 20725.52598 + dps: 25397.42827 + tps: 20351.19916 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30151.61552 - tps: 23093.65722 + dps: 29044.32072 + tps: 22194.23573 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 125524.74786 - tps: 139119.81799 + dps: 122712.56062 + tps: 136154.22116 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 41226.10226 - tps: 33471.82303 + dps: 40089.01137 + tps: 32788.12461 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53848.54088 - tps: 43525.59161 + dps: 51682.78061 + tps: 41662.4736 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88789.5231 - tps: 99549.61564 + dps: 87184.52204 + tps: 97842.76023 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26077.68125 - tps: 20762.10668 + dps: 25442.71384 + tps: 20387.77986 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30349.03274 - tps: 23254.5272 + dps: 29241.73794 + tps: 22355.10571 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100509.66867 - tps: 108669.92633 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39767.85176 - tps: 33163.78501 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51422.27984 - tps: 42300.02899 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68489.15718 - tps: 75096.76206 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24528.72979 - tps: 20147.81239 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27918.96816 - tps: 21981.07812 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100728.77347 - tps: 108908.27114 + dps: 98744.14619 + tps: 107039.40762 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39849.13839 - tps: 33235.96064 + dps: 38648.92724 + tps: 32478.29517 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51783.43795 - tps: 42622.16754 + dps: 49745.78202 + tps: 40803.67715 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68613.35666 - tps: 75233.68242 + dps: 67811.34938 + tps: 74379.44245 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24568.5144 - tps: 20181.54922 + dps: 23967.0613 + tps: 19782.63223 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28098.23239 - tps: 22135.05335 + dps: 27091.96228 + tps: 21271.01109 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100509.66867 - tps: 108669.92633 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39110.0777 - tps: 32273.82621 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50640.4495 - tps: 41498.76027 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68489.15718 - tps: 75096.76206 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24461.58088 - tps: 19722.24527 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27172.10353 - tps: 20975.16722 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 100728.77347 - tps: 108908.27114 + dps: 98744.14619 + tps: 107039.40762 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39190.13689 - tps: 32344.28335 + dps: 37956.28099 + tps: 31421.13228 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50994.26836 - tps: 41811.73415 + dps: 49002.87625 + tps: 40051.39228 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68613.35666 - tps: 75233.68242 + dps: 67811.34938 + tps: 74379.44245 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24500.75752 - tps: 19755.05714 + dps: 23824.37311 + tps: 19331.93007 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27346.13402 - tps: 21122.02944 + dps: 26365.19788 + tps: 20295.00174 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83401.34936 - tps: 90776.69589 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32120.2647 - tps: 27547.55633 + dps: 23151.86269 + tps: 20373.26071 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41478.22336 - tps: 35058.9092 + dps: 30452.54721 + tps: 26214.14017 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56118.24871 - tps: 61998.88995 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19877.44362 - tps: 16876.86544 + dps: 14389.50509 + tps: 12463.91827 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22633.69829 - tps: 18113.03143 + dps: 16312.74086 + tps: 13469.28431 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83582.75142 - tps: 90975.01681 + dps: 81930.19324 + tps: 89402.91868 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32186.06249 - tps: 27607.17216 + dps: 30936.14756 + tps: 26686.09905 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41771.6663 - tps: 35326.74456 + dps: 40119.00512 + tps: 33818.23315 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56221.24282 - tps: 62113.26058 + dps: 55626.6456 + tps: 61519.50935 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19909.83238 - tps: 16905.05287 + dps: 19420.40373 + tps: 16567.18327 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22777.17162 - tps: 18239.09801 + dps: 21969.12395 + tps: 17529.84721 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83401.34936 - tps: 90776.69589 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31755.65473 - tps: 26572.12156 + dps: 23151.86269 + tps: 20373.26071 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41580.76715 - tps: 34813.91499 + dps: 30452.54721 + tps: 26214.14017 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56118.24871 - tps: 61998.88995 + dps: nan + tps: nan } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19862.33986 - tps: 16300.89755 + dps: 14389.50509 + tps: 12463.91827 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22465.7055 - tps: 17647.74224 + dps: 16312.74086 + tps: 13469.28431 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83582.75142 - tps: 90975.01681 + dps: 81930.19324 + tps: 89402.91868 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31822.42766 - tps: 26631.9226 + dps: 30710.94405 + tps: 25900.20912 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41872.55404 - tps: 35076.6089 + dps: 40222.19156 + tps: 33591.83471 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56221.24282 - tps: 62113.26058 + dps: 55626.6456 + tps: 61519.50935 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19894.11499 - tps: 16327.93338 + dps: 19341.81911 + tps: 15955.82891 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22607.95076 - tps: 17770.8409 + dps: 21807.09238 + tps: 17078.63835 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151530.98758 - tps: 166872.70552 + dps: 147953.41447 + tps: 163120.53574 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50581.47122 - tps: 41164.38129 + dps: 49031.0626 + tps: 40140.53588 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65042.00485 - tps: 52012.40054 + dps: 62478.8772 + tps: 49847.41409 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107137.84711 - tps: 119169.00639 + dps: 105215.30891 + tps: 117132.2391 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32557.51354 - tps: 25884.28718 + dps: 31740.26862 + tps: 25357.4732 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36633.71854 - tps: 27923.00885 + dps: 35289.46555 + tps: 26847.27979 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151854.91076 - tps: 167229.30433 + dps: 148277.33765 + tps: 163477.13455 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50684.16711 - tps: 41250.41327 + dps: 49133.7585 + tps: 40226.56785 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65497.58745 - tps: 52397.89902 + dps: 62934.45979 + tps: 50232.91257 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107337.25373 - tps: 119391.62075 + dps: 105414.71553 + tps: 117354.85346 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32612.28503 - tps: 25927.73786 + dps: 31795.04011 + tps: 25400.92388 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36872.37166 - tps: 28114.04705 + dps: 35528.11867 + tps: 27038.31799 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151530.98758 - tps: 166872.70552 + dps: 147953.41447 + tps: 163120.53574 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50605.37013 - tps: 40111.63275 + dps: 49268.85566 + tps: 39322.44748 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64408.24912 - tps: 50581.50562 + dps: 61838.38311 + tps: 48435.69067 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107137.84711 - tps: 119169.00639 + dps: 105215.30891 + tps: 117132.2391 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32953.47915 - tps: 25431.90718 + dps: 31954.74987 + tps: 24830.71665 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36668.74493 - tps: 27281.0588 + dps: 35341.51833 + tps: 26235.51884 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 151854.91076 - tps: 167229.30433 + dps: 148277.33765 + tps: 163477.13455 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50708.25506 - tps: 40196.89439 + dps: 49371.74058 + tps: 39407.70911 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64864.17833 - tps: 50962.62967 + dps: 62294.31232 + tps: 48816.81472 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107337.25373 - tps: 119391.62075 + dps: 105414.71553 + tps: 117354.85346 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 33007.93335 - tps: 25474.4012 + dps: 32009.20407 + tps: 24873.21067 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36905.28849 - tps: 27467.87124 + dps: 35578.06189 + tps: 26422.33127 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124585.70425 - tps: 137972.544 + dps: 122049.3185 + tps: 135274.27313 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40344.40353 - tps: 33942.40453 + dps: 38978.60335 + tps: 32877.24507 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52798.15735 - tps: 43795.0391 + dps: 50677.13775 + tps: 41936.7494 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88770.62353 - tps: 99612.4096 + dps: 87360.72619 + tps: 98062.79662 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25705.63998 - tps: 21056.74015 + dps: 24926.71134 + tps: 20525.21924 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29382.74324 - tps: 22751.95932 + dps: 28303.53891 + tps: 21868.97288 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124854.35481 - tps: 138269.64246 + dps: 122317.96905 + tps: 135571.37158 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40427.20895 - tps: 34013.81795 + dps: 39061.40877 + tps: 32948.65848 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53175.09113 - tps: 44125.35438 + dps: 51054.07153 + tps: 42267.06469 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88935.4253 - tps: 99797.67497 + dps: 87525.52796 + tps: 98248.06199 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25750.1593 - tps: 21092.99152 + dps: 24971.23066 + tps: 20561.4706 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29573.45761 - tps: 22908.03352 + dps: 28494.25328 + tps: 22025.04707 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124585.70425 - tps: 137972.544 + dps: 122049.3185 + tps: 135274.27313 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40888.77686 - tps: 33209.83775 + dps: 39758.25496 + tps: 32584.924 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52148.12656 - tps: 42125.88227 + dps: 50101.19556 + tps: 40376.30849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88770.62353 - tps: 99612.4096 + dps: 87360.72619 + tps: 98062.79662 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26382.81781 - tps: 20872.08823 + dps: 25662.11591 + tps: 20469.30428 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29240.22453 - tps: 22040.37661 + dps: 28165.3942 + tps: 21176.99312 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124854.35481 - tps: 138269.64246 + dps: 122317.96905 + tps: 135571.37158 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40971.7471 - tps: 33280.04931 + dps: 39841.2252 + tps: 32655.13555 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52512.44797 - tps: 42437.91852 + dps: 50465.51697 + tps: 40688.34474 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88935.4253 - tps: 99797.67497 + dps: 87525.52796 + tps: 98248.06199 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26426.82774 - tps: 20907.25555 + dps: 25706.12584 + tps: 20504.47159 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29430.27516 - tps: 22193.17167 + dps: 28355.44484 + tps: 21329.78818 } } dps_results: { From 9cff8362b52ecd9808a7502f5e3c8e51e6fdeaf0 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 17 Dec 2024 19:19:20 +0100 Subject: [PATCH 033/127] Fix multithreading issue by reverting slots logic --- sim/common/cata/damage_procs.go | 4 +- sim/core/item_swaps.go | 96 ++- sim/warlock/demonology/TestDemonology.results | 384 ++++----- sim/warrior/fury/TestFury.results | 768 +++++++++--------- 4 files changed, 643 insertions(+), 609 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index bbc2a37b6f..5082e34c58 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -94,7 +94,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) + character.ItemSwap.RegisterProc(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -146,7 +146,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket1}) + character.ItemSwap.RegisterProc(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}) }) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 8ca690db33..69c1f4ef94 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -49,25 +49,57 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() + if hasItemSwap[proto.ItemSlot_ItemSlotHead] { + slots = append(slots, proto.ItemSlot_ItemSlotHead) + } + if hasItemSwap[proto.ItemSlot_ItemSlotNeck] { + slots = append(slots, proto.ItemSlot_ItemSlotNeck) + } + if hasItemSwap[proto.ItemSlot_ItemSlotShoulder] { + slots = append(slots, proto.ItemSlot_ItemSlotShoulder) + } + if hasItemSwap[proto.ItemSlot_ItemSlotBack] { + slots = append(slots, proto.ItemSlot_ItemSlotBack) + } + if hasItemSwap[proto.ItemSlot_ItemSlotChest] { + slots = append(slots, proto.ItemSlot_ItemSlotChest) + } + if hasItemSwap[proto.ItemSlot_ItemSlotWrist] { + slots = append(slots, proto.ItemSlot_ItemSlotWrist) + } + if hasItemSwap[proto.ItemSlot_ItemSlotHands] { + slots = append(slots, proto.ItemSlot_ItemSlotHands) + } + if hasItemSwap[proto.ItemSlot_ItemSlotWaist] { + slots = append(slots, proto.ItemSlot_ItemSlotWaist) + } + if hasItemSwap[proto.ItemSlot_ItemSlotLegs] { + slots = append(slots, proto.ItemSlot_ItemSlotLegs) + } + if hasItemSwap[proto.ItemSlot_ItemSlotFeet] { + slots = append(slots, proto.ItemSlot_ItemSlotFeet) + } + if hasItemSwap[proto.ItemSlot_ItemSlotFinger1] { + slots = append(slots, proto.ItemSlot_ItemSlotFinger1) + } + if hasItemSwap[proto.ItemSlot_ItemSlotFinger2] { + slots = append(slots, proto.ItemSlot_ItemSlotFinger2) + } + if hasItemSwap[proto.ItemSlot_ItemSlotTrinket1] { + slots = append(slots, proto.ItemSlot_ItemSlotTrinket1) + } + if hasItemSwap[proto.ItemSlot_ItemSlotTrinket2] { + slots = append(slots, proto.ItemSlot_ItemSlotTrinket2) + } // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - hasItemSwap = FilterMap(hasItemSwap, func(itemSlot proto.ItemSlot, v bool) bool { - if itemSlot == proto.ItemSlot_ItemSlotMainHand || itemSlot == proto.ItemSlot_ItemSlotOffHand { - if itemSlot == proto.ItemSlot_ItemSlotMainHand || (itemSlot == proto.ItemSlot_ItemSlotOffHand && hasMh) { - return true - } else if itemSlot == proto.ItemSlot_ItemSlotOffHand || (has2H && hasOh) { - return true - } else { - return false - } - } else { - return true - } - }) - - for slot, hasSlotItemSwap := range hasItemSwap { - if hasSlotItemSwap { - slots = append(slots, slot) - } + if hasItemSwap[proto.ItemSlot_ItemSlotMainHand] || (hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh) { + slots = append(slots, proto.ItemSlot_ItemSlotMainHand) + } + if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] || (has2H && hasOh) { + slots = append(slots, proto.ItemSlot_ItemSlotOffHand) + } + if hasItemSwap[proto.ItemSlot_ItemSlotRanged] { + slots = append(slots, proto.ItemSlot_ItemSlotRanged) } if len(slots) == 0 { @@ -253,17 +285,18 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { } func (swap *ItemSwap) GetItemSwapItemSlot(itemID int32) proto.ItemSlot { - slotsToCheck := Ternary(swap.IsSwapped(), swap.swapEquip, swap.originalEquip) - for slot, item := range slotsToCheck { - if item.ID == itemID { - return proto.ItemSlot(slot) + for _, slot := range swap.slots { + if swap.swapEquip[slot].ID == itemID { + return slot + } else if swap.originalEquip[slot].ID == itemID { + return slot } } return -1 } func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { - for _, item := range swap.unEquippedItems { + for _, item := range swap.swapEquip { if item.ID == itemID { return true } @@ -283,7 +316,7 @@ func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { } func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, slots []proto.ItemSlot, isReset bool) { - if !swap.IsEnabled() || swap.swapSet == swapSet { + if !swap.IsEnabled() || swap.swapSet == swapSet && !isReset { return } @@ -386,19 +419,20 @@ func (swap *ItemSwap) swapWeapon(slot proto.ItemSlot) { } func (swap *ItemSwap) reset(sim *Simulation) { + swap.initialized = false if !swap.IsEnabled() { return } swap.SwapItems(sim, proto.APLActionItemSwap_Main, swap.slots, true) - if !swap.initialized || swap.IsSwapped() { - for _, slot := range swap.slots { - for _, onSwap := range swap.onSwapCallbacks[slot] { - onSwap(sim, slot) - } - } - } + // if !swap.initialized || swap.IsSwapped() { + // for _, slot := range swap.slots { + // for _, onSwap := range swap.onSwapCallbacks[slot] { + // onSwap(sim, slot) + // } + // } + // } swap.unEquippedItems = swap.swapEquip diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 2add2dded8..681d9c6022 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1973,673 +1973,673 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 53774.73184 - tps: 46577.32425 + dps: 54502.54434 + tps: 47048.64584 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37492.3949 - tps: 19155.73929 + dps: 38177.66288 + tps: 19581.92379 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 48699.37942 - tps: 25105.58719 + dps: 52024.75453 + tps: 27150.26259 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45761.40981 - tps: 42634.38936 + dps: 46775.08858 + tps: 43449.02328 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26773.43174 - tps: 13714.56266 + dps: 27188.54564 + tps: 13996.4697 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31441.66369 - tps: 16327.97119 + dps: 33440.65854 + tps: 17667.09198 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 53901.0341 - tps: 46348.88577 + dps: 54661.64876 + tps: 46863.8407 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37948.92912 - tps: 20273.9018 + dps: 38655.54092 + tps: 20734.9052 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49692.73579 - tps: 26956.48681 + dps: 53144.30953 + tps: 29183.46286 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45894.41306 - tps: 40479.31889 + dps: 46903.36817 + tps: 41314.73045 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26994.20439 - tps: 14421.18222 + dps: 27404.49177 + tps: 14719.41075 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31775.52591 - tps: 17492.00986 + dps: 33743.97373 + tps: 18906.705 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54433.22549 - tps: 47352.88051 + dps: 55176.76825 + tps: 47837.36977 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38285.6779 - tps: 19760.1316 + dps: 38988.61567 + tps: 20200.8395 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49673.25069 - tps: 25972.22549 + dps: 53086.97475 + tps: 28089.51787 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46270.81618 - tps: 42737.662 + dps: 47278.97097 + tps: 43552.3154 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27200.41893 - tps: 14088.02936 + dps: 27611.7537 + tps: 14374.45694 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31950.45939 - tps: 16871.91949 + dps: 33930.73726 + tps: 18233.64295 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48061.03057 - tps: 40100.93316 + dps: 48764.11033 + tps: 40579.05493 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34067.4605 - tps: 17291.09267 + dps: 34715.46478 + tps: 17712.47921 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 46001.52067 - tps: 24231.80177 + dps: 49152.02201 + tps: 26253.10408 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 41736.74007 - tps: 37122.18769 + dps: 42713.90618 + tps: 37929.21034 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24729.44806 - tps: 12516.30419 + dps: 25113.61276 + tps: 12794.29241 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29787.38227 - tps: 15646.35629 + dps: 31626.18955 + tps: 16963.20588 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 53490.4495 - tps: 46164.24266 + dps: 54220.1097 + tps: 46640.82305 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37289.04782 - tps: 19031.49073 + dps: 37966.619 + tps: 19456.35506 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 48153.10316 - tps: 25027.91244 + dps: 51451.42749 + tps: 27069.89567 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45301.20075 - tps: 42057.0504 + dps: 46299.65471 + tps: 42861.89663 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26585.45776 - tps: 13677.44358 + dps: 26986.01105 + tps: 13955.60808 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31482.79355 - tps: 16438.13014 + dps: 33415.1623 + tps: 17758.55497 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 53459.79653 - tps: 45591.36491 + dps: 54211.92003 + tps: 46101.57125 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37796.06036 - tps: 20236.46399 + dps: 38498.97116 + tps: 20696.54577 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49542.40348 - tps: 27079.89864 + dps: 52964.45235 + tps: 29298.439 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45790.84756 - tps: 40417.11959 + dps: 46793.61232 + tps: 41248.00468 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26921.35373 - tps: 14381.72348 + dps: 27321.77143 + tps: 14674.47094 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31482.21484 - tps: 17241.23431 + dps: 33401.8062 + tps: 18631.89756 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54167.53111 - tps: 46697.90371 + dps: 54914.45028 + tps: 47188.19282 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37942.70327 - tps: 19547.61636 + dps: 38636.38027 + tps: 19985.93927 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49011.56763 - tps: 25727.88535 + dps: 52390.42106 + tps: 27837.16147 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46002.91143 - tps: 42668.82308 + dps: 47011.35962 + tps: 43482.09547 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26904.03864 - tps: 13953.04446 + dps: 27315.02934 + tps: 14239.48306 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32011.27196 - tps: 16825.22177 + dps: 33993.02844 + tps: 18187.01715 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48006.59483 - tps: 40117.53489 + dps: 48703.08341 + tps: 40591.393 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34067.8731 - tps: 17395.7112 + dps: 34711.64054 + tps: 17815.9325 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 45384.51598 - tps: 23972.15949 + dps: 48513.65597 + tps: 25998.98508 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 41563.07312 - tps: 36791.50936 + dps: 42538.12087 + tps: 37596.84202 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24561.96022 - tps: 12397.19278 + dps: 24943.24733 + tps: 12673.53411 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29671.02864 - tps: 15607.481 + dps: 31495.46762 + tps: 16916.11364 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54445.37832 - tps: 46355.78206 + dps: 55188.95013 + tps: 46841.77047 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38106.30822 - tps: 19179.67002 + dps: 38797.50222 + tps: 19613.7638 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49371.30908 - tps: 25418.86953 + dps: 52734.17176 + tps: 27503.71775 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46396.4843 - tps: 42437.19041 + dps: 47423.19412 + tps: 43265.24363 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27158.77086 - tps: 13791.10617 + dps: 27568.62926 + tps: 14075.90564 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32382.29819 - tps: 16711.83243 + dps: 34358.10192 + tps: 18062.3415 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54332.74997 - tps: 45836.7417 + dps: 55099.4016 + tps: 46357.03293 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38566.62625 - tps: 20377.66206 + dps: 39283.92696 + tps: 20847.67233 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50800.60041 - tps: 27501.48996 + dps: 54290.87629 + tps: 29766.39049 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46914.50397 - tps: 40905.92677 + dps: 47945.50409 + tps: 41760.32682 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27540.14083 - tps: 14484.51998 + dps: 27950.39643 + tps: 14784.238 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32413.37779 - tps: 17529.16303 + dps: 34378.53293 + tps: 18951.44931 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55084.25625 - tps: 46737.36989 + dps: 55844.84939 + tps: 47236.93361 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38789.17706 - tps: 19740.53369 + dps: 39496.31321 + tps: 20188.02139 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50225.14735 - tps: 26114.78225 + dps: 53667.72076 + tps: 28266.60007 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46983.73848 - tps: 42908.26832 + dps: 48019.17196 + tps: 43743.63038 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27527.41023 - tps: 14121.33548 + dps: 27947.7992 + tps: 14414.4611 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32919.75938 - tps: 17101.3418 + dps: 34945.28465 + tps: 18493.48165 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48917.80831 - tps: 40274.35225 + dps: 49627.90996 + tps: 40758.05576 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34838.36215 - tps: 17531.90024 + dps: 35495.58689 + tps: 17961.87958 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 46604.34036 - tps: 24388.20824 + dps: 49797.2072 + tps: 26460.85146 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42653.61417 - tps: 37106.21094 + dps: 43655.80903 + tps: 37933.78562 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25218.96463 - tps: 12545.91106 + dps: 25609.93192 + tps: 12829.01882 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 30605.95066 - tps: 15885.46505 + dps: 32475.1648 + tps: 17224.70001 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54226.68766 - tps: 46954.23373 + dps: 55007.56377 + tps: 47452.94435 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38026.08674 - tps: 19542.76235 + dps: 38756.15436 + tps: 19991.75611 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50466.10231 - tps: 25985.14482 + dps: 54018.80829 + tps: 28139.81159 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46790.30747 - tps: 43710.46391 + dps: 47949.44207 + tps: 44651.84374 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26971.27154 - tps: 13910.24333 + dps: 27410.63791 + tps: 14210.72907 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32641.34481 - tps: 17337.13557 + dps: 34744.16282 + tps: 18760.86114 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54238.35458 - tps: 46021.00371 + dps: 55036.75004 + tps: 46555.5721 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38387.84304 - tps: 20592.89903 + dps: 39132.56611 + tps: 21078.74433 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51284.98123 - tps: 28091.31986 + dps: 54904.72732 + tps: 30426.90685 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47273.47577 - tps: 41909.49485 + dps: 48448.78007 + tps: 42873.22371 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27726.85247 - tps: 14827.45388 + dps: 28191.05112 + tps: 15154.68461 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33859.60758 - tps: 18579.32593 + dps: 36097.98088 + tps: 20135.65806 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54994.08102 - tps: 47629.00916 + dps: 55791.14749 + tps: 48141.02852 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38655.81358 - tps: 20018.49863 + dps: 39400.47431 + tps: 20479.8084 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51286.08481 - tps: 26798.41373 + dps: 54907.86858 + tps: 29014.66058 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47458.71508 - tps: 43938.70572 + dps: 48624.09958 + tps: 44886.8785 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27391.74759 - tps: 14322.84015 + dps: 27839.74288 + tps: 14632.42849 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32999.99988 - tps: 17650.95463 + dps: 35148.76094 + tps: 19120.19324 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48775.52508 - tps: 40323.52805 + dps: 49534.39686 + tps: 40824.1065 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34735.16442 - tps: 17608.47491 + dps: 35447.27395 + tps: 18064.29236 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 47866.79097 - tps: 24894.9516 + dps: 51331.12105 + tps: 27088.45453 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42955.43658 - tps: 37457.46225 + dps: 44086.31309 + tps: 38397.15423 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24937.17776 - tps: 12619.88953 + dps: 25355.44874 + tps: 12920.40865 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31105.46338 - tps: 16617.11186 + dps: 33111.58114 + tps: 18041.00435 } } dps_results: { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 76eaedddd5..160a918e50 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2148,1345 +2148,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 99211.02704 + tps: 107441.53918 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 39069.06232 + tps: 33029.49233 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 52208.70003 + tps: 43104.12436 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 67420.70452 + tps: 73892.94365 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 24189.02873 + tps: 19989.61546 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 28265.65333 + tps: 22236.24281 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98178.22857 - tps: 106320.01191 + dps: 99434.28356 + tps: 107683.99087 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38681.26468 - tps: 32684.83038 + dps: 39153.29374 + tps: 33104.40255 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50494.38684 - tps: 41573.23235 + dps: 52581.97479 + tps: 43438.11443 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 66827.87496 - tps: 73239.79121 + dps: 67549.02221 + tps: 74034.30858 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23998.40322 - tps: 19827.83982 + dps: 24230.24028 + tps: 20024.55654 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27407.87806 - tps: 21500.67436 + dps: 28450.71567 + tps: 22394.9859 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 99211.02704 + tps: 107441.53918 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 38436.40091 + tps: 31946.27358 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 51053.0471 + tps: 42053.55589 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 67420.70452 + tps: 73892.94365 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 23822.33706 + tps: 19328.60672 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 28288.37552 + tps: 21982.88888 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98178.22857 - tps: 106320.01191 + dps: 99434.28356 + tps: 107683.99087 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38049.28032 - tps: 31605.16788 + dps: 38520.44791 + tps: 32020.40318 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49347.78616 - tps: 40537.52961 + dps: 51421.20328 + tps: 42380.88929 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 66827.87496 - tps: 73239.79121 + dps: 67549.02221 + tps: 74034.30858 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23633.4034 - tps: 19169.52846 + dps: 23863.37147 + tps: 19363.17854 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27436.245 - tps: 21259.23578 + dps: 28472.81176 + tps: 22139.69787 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 82038.90917 + tps: 89483.40729 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23269.31918 - tps: 20423.76687 + dps: 31173.4777 + tps: 26965.24758 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30526.86593 - tps: 26611.37993 + dps: 42320.07515 + tps: 35934.20183 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 55916.58576 + tps: 61786.12039 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14308.05334 - tps: 12480.24319 + dps: 19330.66615 + tps: 16522.61677 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16736.77303 - tps: 13938.39489 + dps: 22706.07966 + tps: 18235.9627 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81178.17169 - tps: 88543.96292 + dps: 82225.15656 + tps: 89686.6483 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30854.6834 - tps: 26675.45451 + dps: 31242.60514 + tps: 27028.12266 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40913.62985 - tps: 34649.10133 + dps: 42624.10597 + tps: 36212.20132 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55426.52759 - tps: 61242.22445 + dps: 56022.53855 + tps: 61903.72232 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19176.28046 - tps: 16388.07976 + dps: 19364.03526 + tps: 16551.65477 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22027.7033 - tps: 17641.7698 + dps: 22852.68532 + tps: 18364.49279 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 82038.90917 + tps: 89483.40729 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23269.31918 - tps: 20423.76687 + dps: 31306.04576 + tps: 26479.41786 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30526.86593 - tps: 26611.37993 + dps: 41827.01654 + tps: 34971.48746 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 55916.58576 + tps: 61786.12039 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14308.05334 - tps: 12480.24319 + dps: 19331.01771 + tps: 16034.51161 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16736.77303 - tps: 13938.39489 + dps: 22615.39749 + tps: 17881.24029 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81178.17169 - tps: 88543.96292 + dps: 82225.15656 + tps: 89686.6483 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30985.90986 - tps: 26192.22837 + dps: 31375.46275 + tps: 26541.74698 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40450.87201 - tps: 33732.87581 + dps: 42126.27626 + tps: 35241.41099 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55426.52759 - tps: 61242.22445 + dps: 56022.53855 + tps: 61903.72232 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19177.95573 - tps: 15903.03894 + dps: 19364.12939 + tps: 16062.94103 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21934.04182 - tps: 17293.15537 + dps: 22761.98844 + tps: 18007.79983 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148414.4034 - tps: 163231.11186 + dps: 150302.42224 + tps: 165303.47722 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49416.6154 - tps: 40683.52398 + dps: 50032.54808 + tps: 41206.89482 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63340.08782 - tps: 50790.21162 + dps: 66001.52402 + tps: 53068.85469 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105005.49415 - tps: 116994.23921 + dps: 106141.39456 + tps: 118260.18406 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31729.90648 - tps: 25317.48291 + dps: 32046.12782 + tps: 25569.35157 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35739.65809 - tps: 27085.32088 + dps: 37124.75562 + tps: 28195.44144 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148749.59784 - tps: 163599.07515 + dps: 150637.61668 + tps: 165671.4405 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49526.52643 - tps: 40776.98349 + dps: 50142.45912 + tps: 41300.35434 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63814.51824 - tps: 51196.15915 + dps: 66475.95444 + tps: 53474.80222 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105207.8962 - tps: 117219.78705 + dps: 106343.79662 + tps: 118485.73189 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31786.30057 - tps: 25362.50325 + dps: 32102.52191 + tps: 25614.37191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35987.01135 - tps: 27283.75377 + dps: 37372.10887 + tps: 28393.87433 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148414.4034 - tps: 163231.11186 + dps: 150302.42224 + tps: 165303.47722 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49512.58247 - tps: 39599.03191 + dps: 50122.27803 + tps: 40111.824 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 62816.38127 - tps: 49790.90577 + dps: 65463.2918 + tps: 52037.92917 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105005.49415 - tps: 116994.23921 + dps: 106141.39456 + tps: 118260.18406 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31744.80589 - tps: 24752.10304 + dps: 32058.3287 + tps: 24996.73181 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35588.96812 - tps: 26282.7514 + dps: 36957.13924 + tps: 27360.41316 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148749.59784 - tps: 163599.07515 + dps: 150637.61668 + tps: 165671.4405 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49621.3045 - tps: 39690.57709 + dps: 50231.00007 + tps: 40203.36918 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63287.17037 - tps: 50190.45568 + dps: 65934.0809 + tps: 52437.47908 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105207.8962 - tps: 117219.78705 + dps: 106343.79662 + tps: 118485.73189 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31800.59737 - tps: 24795.67265 + dps: 32114.12017 + tps: 25040.30142 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35833.0262 - tps: 26475.49502 + dps: 37201.19732 + tps: 27553.15678 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122436.8566 - tps: 135849.8381 + dps: 123990.74603 + tps: 137565.33663 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39715.84982 - tps: 33717.45621 + dps: 40205.78337 + tps: 34142.47648 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50936.94675 - tps: 42293.07016 + dps: 53101.52795 + tps: 44190.67531 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87016.28406 - tps: 97653.68904 + dps: 87962.38947 + tps: 98717.01964 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25073.12205 - tps: 20779.48845 + dps: 25325.45217 + tps: 20987.86556 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28811.16403 - tps: 22799.86535 + dps: 29929.55143 + tps: 23732.9559 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122712.56062 - tps: 136154.22116 + dps: 124266.45005 + tps: 137869.71969 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39803.06254 - tps: 33793.17387 + dps: 40292.99608 + tps: 34218.19414 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51322.76013 - tps: 42631.42878 + dps: 53487.34133 + tps: 44529.03393 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87184.52204 - tps: 97842.76023 + dps: 88130.62745 + tps: 98906.09083 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25118.18415 - tps: 20816.71599 + dps: 25370.51427 + tps: 21025.0931 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29009.87694 - tps: 22965.66726 + dps: 30128.26434 + tps: 23898.75781 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122436.8566 - tps: 135849.8381 + dps: 123990.74603 + tps: 137565.33663 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40001.93648 - tps: 32713.74634 + dps: 40490.87354 + tps: 33130.52675 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51296.11716 - tps: 41329.28001 + dps: 53461.87743 + tps: 43192.39802 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87016.28406 - tps: 97653.68904 + dps: 87962.38947 + tps: 98717.01964 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25397.42827 - tps: 20351.19916 + dps: 25650.79168 + tps: 20555.68076 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29044.32072 - tps: 22194.23573 + dps: 30151.61552 + tps: 23093.65722 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122712.56062 - tps: 136154.22116 + dps: 124266.45005 + tps: 137869.71969 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40089.01137 - tps: 32788.12461 + dps: 40577.94843 + tps: 33204.90502 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51682.78061 - tps: 41662.4736 + dps: 53848.54088 + tps: 43525.59161 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87184.52204 - tps: 97842.76023 + dps: 88130.62745 + tps: 98906.09083 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25442.71384 - tps: 20387.77986 + dps: 25696.07725 + tps: 20592.26147 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29241.73794 - tps: 22355.10571 + dps: 30349.03274 + tps: 23254.5272 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 99757.03457 + tps: 108141.13011 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 39025.02955 + tps: 32812.02114 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 51422.27984 + tps: 42300.02899 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 68387.62506 + tps: 75014.96339 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 24150.98404 + tps: 19938.70794 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 27918.96816 + tps: 21981.07812 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98744.14619 - tps: 107039.40762 + dps: 99976.13937 + tps: 108379.47491 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38648.92724 - tps: 32478.29517 + dps: 39106.31618 + tps: 32884.19678 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49745.78202 - tps: 40803.67715 + dps: 51783.43795 + tps: 42622.16754 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67811.34938 - tps: 74379.44245 + dps: 68511.82454 + tps: 75151.88376 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23967.0613 - tps: 19782.63223 + dps: 24190.76865 + tps: 19972.44476 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27091.96228 - tps: 21271.01109 + dps: 28098.23239 + tps: 22135.05335 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 99757.03457 + tps: 108141.13011 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 38327.31801 + tps: 31747.73627 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 50640.4495 + tps: 41498.76027 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 68387.62506 + tps: 75014.96339 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: nan - tps: nan + dps: 24005.26155 + tps: 19483.35092 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: nan - tps: nan + dps: 27172.10353 + tps: 20975.16722 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98744.14619 - tps: 107039.40762 + dps: 99976.13937 + tps: 108379.47491 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37956.28099 - tps: 31421.13228 + dps: 38407.37719 + tps: 31818.1934 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49002.87625 - tps: 40051.39228 + dps: 50994.26836 + tps: 41811.73415 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67811.34938 - tps: 74379.44245 + dps: 68511.82454 + tps: 75151.88376 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23824.37311 - tps: 19331.93007 + dps: 24044.4382 + tps: 19516.16279 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26365.19788 - tps: 20295.00174 + dps: 27346.13402 + tps: 21122.02944 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 82768.75209 + tps: 90319.85774 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23151.86269 - tps: 20373.26071 + dps: 31240.66184 + tps: 26962.23215 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30452.54721 - tps: 26214.14017 + dps: 41478.22336 + tps: 35058.9092 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 56104.65224 + tps: 62050.47397 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14389.50509 - tps: 12463.91827 + dps: 19570.06581 + tps: 16697.41969 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16312.74086 - tps: 13469.28431 + dps: 22633.69829 + tps: 18113.03143 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81930.19324 - tps: 89402.91868 + dps: 82950.15416 + tps: 90518.17866 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30936.14756 - tps: 26686.09905 + dps: 31306.45962 + tps: 27021.84798 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40119.00512 - tps: 33818.23315 + dps: 41771.6663 + tps: 35326.74456 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55626.6456 - tps: 61519.50935 + dps: 56207.64635 + tps: 62164.84459 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19420.40373 - tps: 16567.18327 + dps: 19602.45457 + tps: 16725.60712 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21969.12395 - tps: 17529.84721 + dps: 22777.17162 + tps: 18239.09801 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 82768.75209 + tps: 90319.85774 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23151.86269 - tps: 20373.26071 + dps: 31020.1061 + tps: 26177.09129 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30452.54721 - tps: 26214.14017 + dps: 41580.76715 + tps: 34813.91499 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: nan - tps: nan + dps: 56104.65224 + tps: 62050.47397 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14389.50509 - tps: 12463.91827 + dps: 19488.94795 + tps: 16080.99475 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16312.74086 - tps: 13469.28431 + dps: 22465.7055 + tps: 17647.74224 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81930.19324 - tps: 89402.91868 + dps: 82950.15416 + tps: 90518.17866 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30710.94405 - tps: 25900.20912 + dps: 31086.87903 + tps: 26236.89234 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40222.19156 - tps: 33591.83471 + dps: 41872.55404 + tps: 35076.6089 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55626.6456 - tps: 61519.50935 + dps: 56207.64635 + tps: 62164.84459 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19341.81911 - tps: 15955.82891 + dps: 19520.72308 + tps: 16108.03058 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21807.09238 - tps: 17078.63835 + dps: 22607.95076 + tps: 17770.8409 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147953.41447 - tps: 163120.53574 + dps: 149775.45575 + tps: 165126.33125 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49031.0626 - tps: 40140.53588 + dps: 49609.7778 + tps: 40625.00693 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 62478.8772 - tps: 49847.41409 + dps: 65042.00485 + tps: 52012.40054 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105215.30891 - tps: 117132.2391 + dps: 106335.57406 + tps: 118382.94203 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31740.26862 - tps: 25357.4732 + dps: 32047.09952 + tps: 25601.04217 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35289.46555 - tps: 26847.27979 + dps: 36633.71854 + tps: 27923.00885 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148277.33765 - tps: 163477.13455 + dps: 150099.37892 + tps: 165482.93005 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49133.7585 - tps: 40226.56785 + dps: 49712.4737 + tps: 40711.03891 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 62934.45979 - tps: 50232.91257 + dps: 65497.58745 + tps: 52397.89902 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105414.71553 - tps: 117354.85346 + dps: 106534.98067 + tps: 118605.55639 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31795.04011 - tps: 25400.92388 + dps: 32101.87101 + tps: 25644.49286 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35528.11867 - tps: 27038.31799 + dps: 36872.37166 + tps: 28114.04705 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147953.41447 - tps: 163120.53574 + dps: 149775.45575 + tps: 165126.33125 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49268.85566 - tps: 39322.44748 + dps: 49846.6356 + tps: 39800.73183 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 61838.38311 - tps: 48435.69067 + dps: 64408.24912 + tps: 50581.50562 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105215.30891 - tps: 117132.2391 + dps: 106335.57406 + tps: 118382.94203 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31954.74987 - tps: 24830.71665 + dps: 32258.40248 + tps: 25067.0997 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35341.51833 - tps: 26235.51884 + dps: 36668.74493 + tps: 27281.0588 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148277.33765 - tps: 163477.13455 + dps: 150099.37892 + tps: 165482.93005 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49371.74058 - tps: 39407.70911 + dps: 49949.52053 + tps: 39885.99347 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 62294.31232 - tps: 48816.81472 + dps: 64864.17833 + tps: 50962.62967 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105414.71553 - tps: 117354.85346 + dps: 106534.98067 + tps: 118605.55639 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32009.20407 - tps: 24873.21067 + dps: 32312.85669 + tps: 25109.59371 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35578.06189 - tps: 26422.33127 + dps: 36905.28849 + tps: 27467.87124 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122049.3185 - tps: 135274.27313 + dps: 123559.71053 + tps: 136944.95692 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38978.60335 - tps: 32877.24507 + dps: 39443.45494 + tps: 33277.97974 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50677.13775 - tps: 41936.7494 + dps: 52798.15735 + tps: 43795.0391 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87360.72619 - tps: 98062.79662 + dps: 88288.13706 + tps: 99105.10789 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24926.71134 - tps: 20525.21924 + dps: 25176.12747 + tps: 20728.23232 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28303.53891 - tps: 21868.97288 + dps: 29382.74324 + tps: 22751.95932 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122317.96905 - tps: 135571.37158 + dps: 123828.36109 + tps: 137242.05538 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39061.40877 - tps: 32948.65848 + dps: 39526.26036 + tps: 33349.39316 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51054.07153 - tps: 42267.06469 + dps: 53175.09113 + tps: 44125.35438 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87525.52796 - tps: 98248.06199 + dps: 88452.93884 + tps: 99290.37326 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24971.23066 - tps: 20561.4706 + dps: 25220.64679 + tps: 20764.48368 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28494.25328 - tps: 22025.04707 + dps: 29573.45761 + tps: 22908.03352 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122049.3185 - tps: 135274.27313 + dps: 123559.71053 + tps: 136944.95692 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39758.25496 - tps: 32584.924 + dps: 40225.04449 + tps: 32979.70174 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50101.19556 - tps: 40376.30849 + dps: 52148.12656 + tps: 42125.88227 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87360.72619 - tps: 98062.79662 + dps: 88288.13706 + tps: 99105.10789 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25662.11591 - tps: 20469.30428 + dps: 25909.41891 + tps: 20666.82123 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28165.3942 - tps: 21176.99312 + dps: 29240.22453 + tps: 22040.37661 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 122317.96905 - tps: 135571.37158 + dps: 123828.36109 + tps: 137242.05538 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39841.2252 - tps: 32655.13555 + dps: 40308.01473 + tps: 33049.91329 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50465.51697 - tps: 40688.34474 + dps: 52512.44797 + tps: 42437.91852 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87525.52796 - tps: 98248.06199 + dps: 88452.93884 + tps: 99290.37326 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25706.12584 - tps: 20504.47159 + dps: 25953.42884 + tps: 20701.98855 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28355.44484 - tps: 21329.78818 + dps: 29430.27516 + tps: 22193.17167 } } dps_results: { From 9c7bd22ab44257a2fca9bb6cb386c12c5f39996a Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 17 Dec 2024 19:55:15 +0100 Subject: [PATCH 034/127] Optimize slots looping --- sim/core/apl_actions_misc.go | 2 +- sim/core/item_swaps.go | 24 ++++++++---------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index 49382bae12..ef5d713626 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -162,7 +162,7 @@ func (action *APLActionItemSwap) Execute(sim *Simulation) { } } - action.character.ItemSwap.SwapItems(sim, action.swapSet, action.character.ItemSwap.slots, false) + action.character.ItemSwap.SwapItems(sim, action.swapSet, false) } func (action *APLActionItemSwap) String() string { return fmt.Sprintf("Item Swap(%s)", action.swapSet) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 69c1f4ef94..76fddf9929 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -128,8 +128,7 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal return } - var slot proto.ItemSlot - for _, slot = range slots { + for _, slot := range slots { character.ItemSwap.onSwapCallbacks[slot] = append(character.ItemSwap.onSwapCallbacks[slot], callback) } } @@ -213,7 +212,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { return } hasItemEquipped := swap.HasItemEquipped(itemID) - itemSlot := swap.GetItemSwapItemSlot(itemID) + itemSlot := swap.GetItemFromPossibleSlots(itemID, slots) if itemSlot == -1 { return } @@ -284,8 +283,8 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) GetItemSwapItemSlot(itemID int32) proto.ItemSlot { - for _, slot := range swap.slots { +func (swap *ItemSwap) GetItemFromPossibleSlots(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { + for _, slot := range possibleSlots { if swap.swapEquip[slot].ID == itemID { return slot } else if swap.originalEquip[slot].ID == itemID { @@ -315,7 +314,7 @@ func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { return newStats } -func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, slots []proto.ItemSlot, isReset bool) { +func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool) { if !swap.IsEnabled() || swap.swapSet == swapSet && !isReset { return } @@ -326,7 +325,8 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap newStats := stats.Stats{} has2H := swap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 - for _, slot := range slots { + + for _, slot := range swap.slots { if !isReset && !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotRanged) { continue } @@ -424,15 +424,7 @@ func (swap *ItemSwap) reset(sim *Simulation) { return } - swap.SwapItems(sim, proto.APLActionItemSwap_Main, swap.slots, true) - - // if !swap.initialized || swap.IsSwapped() { - // for _, slot := range swap.slots { - // for _, onSwap := range swap.onSwapCallbacks[slot] { - // onSwap(sim, slot) - // } - // } - // } + swap.SwapItems(sim, proto.APLActionItemSwap_Main, true) swap.unEquippedItems = swap.swapEquip From f4067be8910bac8de4120a6749056280de6a2fc3 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 17 Dec 2024 22:59:09 +0100 Subject: [PATCH 035/127] Add back slot loop and sort to fix MT issue --- sim/core/item_swaps.go | 58 +++++++++--------------------------------- 1 file changed, 12 insertions(+), 46 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 76fddf9929..448499c964 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,6 +1,7 @@ package core import ( + "slices" "time" "github.com/wowsims/cata/sim/core/proto" @@ -49,63 +50,28 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() - if hasItemSwap[proto.ItemSlot_ItemSlotHead] { - slots = append(slots, proto.ItemSlot_ItemSlotHead) - } - if hasItemSwap[proto.ItemSlot_ItemSlotNeck] { - slots = append(slots, proto.ItemSlot_ItemSlotNeck) - } - if hasItemSwap[proto.ItemSlot_ItemSlotShoulder] { - slots = append(slots, proto.ItemSlot_ItemSlotShoulder) - } - if hasItemSwap[proto.ItemSlot_ItemSlotBack] { - slots = append(slots, proto.ItemSlot_ItemSlotBack) - } - if hasItemSwap[proto.ItemSlot_ItemSlotChest] { - slots = append(slots, proto.ItemSlot_ItemSlotChest) - } - if hasItemSwap[proto.ItemSlot_ItemSlotWrist] { - slots = append(slots, proto.ItemSlot_ItemSlotWrist) - } - if hasItemSwap[proto.ItemSlot_ItemSlotHands] { - slots = append(slots, proto.ItemSlot_ItemSlotHands) - } - if hasItemSwap[proto.ItemSlot_ItemSlotWaist] { - slots = append(slots, proto.ItemSlot_ItemSlotWaist) - } - if hasItemSwap[proto.ItemSlot_ItemSlotLegs] { - slots = append(slots, proto.ItemSlot_ItemSlotLegs) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFeet] { - slots = append(slots, proto.ItemSlot_ItemSlotFeet) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFinger1] { - slots = append(slots, proto.ItemSlot_ItemSlotFinger1) - } - if hasItemSwap[proto.ItemSlot_ItemSlotFinger2] { - slots = append(slots, proto.ItemSlot_ItemSlotFinger2) - } - if hasItemSwap[proto.ItemSlot_ItemSlotTrinket1] { - slots = append(slots, proto.ItemSlot_ItemSlotTrinket1) - } - if hasItemSwap[proto.ItemSlot_ItemSlotTrinket2] { - slots = append(slots, proto.ItemSlot_ItemSlotTrinket2) + for slot, hasSlotItemSwap := range hasItemSwap { + if hasSlotItemSwap { + slots = append(slots, slot) + } } + // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - if hasItemSwap[proto.ItemSlot_ItemSlotMainHand] || (hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh) { + if !hasItemSwap[proto.ItemSlot_ItemSlotMainHand] && hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh { slots = append(slots, proto.ItemSlot_ItemSlotMainHand) } - if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] || (has2H && hasOh) { + if !hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && has2H && hasOh { slots = append(slots, proto.ItemSlot_ItemSlotOffHand) } - if hasItemSwap[proto.ItemSlot_ItemSlotRanged] { - slots = append(slots, proto.ItemSlot_ItemSlotRanged) - } if len(slots) == 0 { return } + slices.SortFunc(slots, func(a, b proto.ItemSlot) int { + return int(a - b) + }) + character.ItemSwap = ItemSwap{ mhCritMultiplier: mhCritMultiplier, ohCritMultiplier: ohCritMultiplier, From e816e5bad2b66768fe5b3ad503dbde069e6aa13f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 17 Dec 2024 23:04:37 +0100 Subject: [PATCH 036/127] Remove Armor Spec on expire --- sim/core/character.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/sim/core/character.go b/sim/core/character.go index e16453f3b9..351ea1c58e 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -818,9 +818,6 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta OnGain: func(aura *Aura, sim *Simulation) { processArmorSpecialization(sim) }, - OnExpire: func(aura *Aura, sim *Simulation) { - processArmorSpecialization(sim) - }, OnReset: func(aura *Aura, sim *Simulation) { aura.Activate(sim) }, From e5d717ddfdcc7c363904e26443e965c537d2bc5b Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 01:11:28 +0100 Subject: [PATCH 037/127] Fix item swap set bonuses & add swg for shaman --- sim/core/item_sets.go | 34 ++- sim/paladin/guardian_of_ancient_kings.go | 8 +- .../retribution/TestRetribution.results | 216 +++++++++--------- sim/shaman/elemental/TestElemental.results | 7 + .../enhancement/TestEnhancement.results | 7 + sim/shaman/items.go | 115 +++++++++- sim/shaman/shaman.go | 11 +- sim/shaman/spiritwalkers_grace.go | 58 +++++ sim/shaman/talents.go | 12 +- ui/shaman/elemental/sim.ts | 12 +- ui/shaman/enhancement/sim.ts | 8 +- 11 files changed, 348 insertions(+), 140 deletions(-) create mode 100644 sim/shaman/spiritwalkers_grace.go diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 2547497c67..bf94a2fa1e 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -3,6 +3,8 @@ package core import ( "fmt" "slices" + + "github.com/wowsims/cata/sim/core/proto" ) type ItemSet struct { @@ -17,6 +19,14 @@ type ItemSet struct { Bonuses map[int32]ApplyEffect } +var ItemSetSlots = []proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotLegs, +} + func (set ItemSet) Items() []Item { var items []Item for _, item := range ItemsByID { @@ -94,7 +104,7 @@ func (character *Character) HasSetBonus(set *ItemSet, numItems int32) bool { return false } -type ActiveSetBonus struct { +type SetBonus struct { // Name of the set. Name string @@ -106,11 +116,15 @@ type ActiveSetBonus struct { } // Returns a list describing all active set bonuses. -func (character *Character) GetActiveSetBonuses() []ActiveSetBonus { - var activeBonuses []ActiveSetBonus +func (character *Character) GetActiveSetBonuses() []SetBonus { + return character.GetSetBonuses(character.Equipment) +} + +func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { + var activeBonuses []SetBonus setItemCount := make(map[*ItemSet]int32) - for _, item := range character.Equipment { + for _, item := range equipment { if item.SetName == "" { continue } @@ -139,7 +153,7 @@ func (character *Character) GetActiveSetBonuses() []ActiveSetBonus { if foundSet != nil { setItemCount[foundSet]++ if bonusEffect, ok := foundSet.Bonuses[setItemCount[foundSet]]; ok { - activeBonuses = append(activeBonuses, ActiveSetBonus{ + activeBonuses = append(activeBonuses, SetBonus{ Name: foundSet.Name, NumPieces: setItemCount[foundSet], BonusEffect: bonusEffect, @@ -170,6 +184,16 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { for _, activeSetBonus := range activeSetBonuses { activeSetBonus.BonusEffect(agent) } + + if character.ItemSwap.IsEnabled() { + unequippedSetBonuses := FilterSlice(character.GetSetBonuses(character.ItemSwap.unEquippedItems), func(unequippeBonus SetBonus) bool { + return !character.HasActiveSetBonus(unequippeBonus.Name, unequippeBonus.NumPieces) + }) + + for _, unequippedSetBonus := range unequippedSetBonuses { + unequippedSetBonus.BonusEffect(agent) + } + } } // Returns the names of all active set bonuses. diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index 8340cb3871..12a48b296e 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -221,13 +221,7 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor }) if paladin.ItemSwap.IsEnabled() { - paladin.RegisterItemSwapCallback([]proto.ItemSlot{ - proto.ItemSlot_ItemSlotHead, - proto.ItemSlot_ItemSlotShoulder, - proto.ItemSlot_ItemSlotChest, - proto.ItemSlot_ItemSlotHands, - proto.ItemSlot_ItemSlotLegs, - }, + paladin.RegisterItemSwapCallback(core.ItemSetSlots, func(sim *core.Simulation, _ proto.ItemSlot) { hasT11Prot4pc := paladin.hasT11Prot4pc() diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index 66d36157ee..0377bf4946 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -2050,379 +2050,379 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36714.4505 - tps: 40967.21073 + dps: 37220.90434 + tps: 41473.66458 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32034.29745 - tps: 31920.38175 + dps: 32545.57781 + tps: 32431.66212 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44634.27709 - tps: 43078.51416 + dps: 45318.58813 + tps: 43762.82519 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21072.43497 - tps: 25214.36209 + dps: 21388.25433 + tps: 25530.18145 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19266.08949 - tps: 19171.41363 + dps: 19582.07222 + tps: 19487.39636 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24839.73797 - tps: 23440.61198 + dps: 25192.36628 + tps: 23793.24029 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37341.91121 - tps: 41607.99136 + dps: 37862.45122 + tps: 42128.53137 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32453.57829 - tps: 32344.41421 + dps: 32979.57632 + tps: 32870.41224 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43780.24692 - tps: 42244.60904 + dps: 44487.75583 + tps: 42952.11795 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21084.32526 - tps: 25199.86828 + dps: 21399.39561 + tps: 25514.93862 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19354.01471 - tps: 19259.37284 + dps: 19672.70292 + tps: 19578.06106 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24182.53713 - tps: 22786.19293 + dps: 24530.82854 + tps: 23134.48434 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36013.23729 - tps: 40291.47893 + dps: 36504.17418 + tps: 40782.41582 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31579.48682 - tps: 31471.12742 + dps: 32069.09772 + tps: 31960.73832 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44169.09252 - tps: 42624.39821 + dps: 44827.61873 + tps: 43282.92441 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21315.99669 - tps: 25734.8604 + dps: 21618.38308 + tps: 26037.24678 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18766.42311 - tps: 18684.34107 + dps: 19075.64301 + tps: 18993.56097 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24220.92272 - tps: 22825.02187 + dps: 24565.57781 + tps: 23169.67696 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43548.05123 - tps: 47303.62101 + dps: 44234.27796 + tps: 47989.84774 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39265.25774 - tps: 39135.04001 + dps: 39972.68436 + tps: 39842.46663 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54180.27596 - tps: 52557.29137 + dps: 55115.11175 + tps: 53492.12716 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25905.33336 - tps: 29696.56442 + dps: 26334.8875 + tps: 30126.11856 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23939.03358 - tps: 23825.58482 + dps: 24372.39631 + tps: 24258.94756 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30444.60314 - tps: 29010.2181 + dps: 30910.96336 + tps: 29476.57832 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43082.23065 - tps: 46955.82357 + dps: 43747.71388 + tps: 47621.30679 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38574.31156 - tps: 38439.95287 + dps: 39252.47494 + tps: 39118.11625 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54162.49471 - tps: 52534.01735 + dps: 55043.80834 + tps: 53415.33097 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25556.35426 - tps: 29286.72754 + dps: 25974.40299 + tps: 29704.77626 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23558.73598 - tps: 23452.63207 + dps: 23981.82247 + tps: 23875.71856 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30710.57761 - tps: 29284.19784 + dps: 31179.83661 + tps: 29753.45684 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43082.23065 - tps: 46955.82357 + dps: 43747.71388 + tps: 47621.30679 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38574.31156 - tps: 38439.95287 + dps: 39252.47494 + tps: 39118.11625 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54162.49471 - tps: 52534.01735 + dps: 55043.80834 + tps: 53415.33097 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25556.35426 - tps: 29286.72754 + dps: 25974.40299 + tps: 29704.77626 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23558.73598 - tps: 23452.63207 + dps: 23981.82247 + tps: 23875.71856 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30710.57761 - tps: 29284.19784 + dps: 31179.83661 + tps: 29753.45684 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57499.24171 - tps: 59496.61194 + dps: 58286.0195 + tps: 60283.38973 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51226.04298 - tps: 48558.59482 + dps: 52010.13165 + tps: 49342.68349 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 67472.92644 - tps: 63776.0585 + dps: 68525.0538 + tps: 64828.18587 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35712.68649 - tps: 38040.56499 + dps: 36199.12617 + tps: 38527.00468 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32457.2443 - tps: 30200.03345 + dps: 32951.29971 + tps: 30694.08886 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39166.72939 - tps: 36342.93073 + dps: 39728.50458 + tps: 36904.70592 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 56838.47866 - tps: 58839.94676 + dps: 57615.73899 + tps: 59617.20708 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50897.3513 - tps: 48219.60456 + dps: 51677.03532 + tps: 48999.28858 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 67614.35071 - tps: 63910.3396 + dps: 68666.95274 + tps: 64962.94163 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35309.00372 - tps: 37620.34709 + dps: 35793.08449 + tps: 38104.42786 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32111.99676 - tps: 29829.4619 + dps: 32604.11591 + tps: 30321.58104 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38438.01954 - tps: 35600.99278 + dps: 38992.67021 + tps: 36155.64345 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57028.12142 - tps: 59075.01679 + dps: 57798.70579 + tps: 59845.60116 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51033.16842 - tps: 48378.70495 + dps: 51821.1691 + tps: 49166.70562 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 69010.03043 - tps: 65313.16249 + dps: 70097.07451 + tps: 66400.20658 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35481.80244 - tps: 37792.26394 + dps: 35968.99128 + tps: 38279.45277 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32424.63528 - tps: 30147.80274 + dps: 32922.31109 + tps: 30645.47855 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39986.17815 - tps: 37155.76544 + dps: 40559.55426 + tps: 37729.14155 } } dps_results: { diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index a1e922025a..ca4862933e 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -1564,6 +1564,13 @@ dps_results: { tps: 1746.63005 } } +dps_results: { + key: "TestElemental-AllItems-Spiritwalker'sVestments" + value: { + dps: 34715.09325 + tps: 1731.74858 + } +} dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77202" value: { diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index a2b7277b33..3d1a86bb62 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -1564,6 +1564,13 @@ dps_results: { tps: 15692.98575 } } +dps_results: { + key: "TestEnhancement-AllItems-Spiritwalker'sVestments" + value: { + dps: 23918.77193 + tps: 15430.60431 + } +} dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77202" value: { diff --git a/sim/shaman/items.go b/sim/shaman/items.go index b65202bbf2..cf366687ed 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -94,14 +94,16 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ // T12 elem // (2) Set: Your Lightning Bolt has a 30% chance to reduce the remaining cooldown on your Fire Elemental Totem by 4 sec. // (4) Set: Your Lava Surge talent also makes Lava Burst instant when it triggers. +var itemSetVolcanicRegaliaName = "Volcanic Regalia" var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ - Name: "Volcanic Regalia", + Name: itemSetVolcanicRegaliaName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() + var aura *core.Aura if shaman.useDragonSoul_2PT12 { - shaman.RegisterAura(core.Aura{ + aura = shaman.RegisterAura(core.Aura{ Label: "Volcanic Regalia 2P", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { @@ -115,7 +117,7 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }, }) } else { - core.MakeProcTriggerAura(&shaman.Unit, core.ProcTrigger{ + aura = core.MakeProcTriggerAura(&shaman.Unit, core.ProcTrigger{ Name: "Volcanic Regalia 2P", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskSpellDamage, @@ -131,9 +133,23 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }) } + if shaman.ItemSwap.IsEnabled() { + shaman.RegisterItemSwapCallback(core.ItemSetSlots, + func(sim *core.Simulation, _ proto.ItemSlot) { + hasT12Ele2pc := shaman.hasT12Ele2pc() + + if hasT12Ele2pc { + aura.Activate(sim) + } else { + aura.Deactivate(sim) + } + }) + } + }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() + instantLavaSurgeMod := shaman.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, FloatValue: -1, @@ -151,21 +167,44 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }, }) //in talents.go under lava surge proc + + if shaman.ItemSwap.IsEnabled() { + shaman.RegisterItemSwapCallback(core.ItemSetSlots, + func(sim *core.Simulation, _ proto.ItemSlot) { + hasT12Ele4pc := shaman.hasT12Ele4pc() + + if hasT12Ele4pc { + shaman.VolcanicRegalia4PT12Aura.Activate(sim) + } else { + shaman.VolcanicRegalia4PT12Aura.Deactivate(sim) + } + }) + } }, }, }) +func (shaman *Shaman) hasT12Ele2pc() bool { + return shaman.HasActiveSetBonus(itemSetVolcanicRegaliaName, 2) +} + +func (shaman *Shaman) hasT12Ele4pc() bool { + return shaman.HasActiveSetBonus(itemSetVolcanicRegaliaName, 4) +} + // T13 elem // (2) Set: Elemental Mastery also grants you 2000 mastery rating 15 sec. // (4) Set: Each time Elemental Overload triggers, you gain 250 haste rating for 4 sec, stacking up to 3 times. +var itemSetSpiritwalkersRegaliaName = "Spiritwalker's Regalia" var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ - Name: "Spiritwalker's Regalia", + Name: itemSetSpiritwalkersRegaliaName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { //In talents.go under elemental mastery }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() + procAura := shaman.RegisterAura(core.Aura{ Label: "Time Rupture", ActionID: core.ActionID{SpellID: 105821}, @@ -176,7 +215,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ shaman.AddStatDynamic(sim, stats.HasteRating, float64(changedHasteRating)) }, }) - shaman.RegisterAura(core.Aura{ + aura := shaman.RegisterAura(core.Aura{ Label: "Spiritwalker's Regalia 4P", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { @@ -190,10 +229,76 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ } }, }) + + if shaman.ItemSwap.IsEnabled() { + shaman.RegisterItemSwapCallback(core.ItemSetSlots, + func(sim *core.Simulation, _ proto.ItemSlot) { + hasT13Ele4pc := shaman.hasT13Ele4pc() + + if hasT13Ele4pc { + aura.Activate(sim) + } else { + aura.Deactivate(sim) + } + }) + } + }, + }, +}) + +func (shaman *Shaman) hasT13Ele2pc() bool { + return shaman.HasActiveSetBonus(itemSetSpiritwalkersRegaliaName, 2) +} + +func (shaman *Shaman) hasT13Ele4pc() bool { + return shaman.HasActiveSetBonus(itemSetSpiritwalkersRegaliaName, 4) +} + +// T13 Resto +// (2) Set: After using Mana Tide Totem, the cost of your healing spells are reduced by 25% for 15 sec. +// (4) Set: Increases the duration of Spiritwalker's Grace by 5 sec, and you gain 30% haste while Spiritwalker's grace is active. +var itemSetSpiritwalkersVestmentsName = "Spiritwalker's Vestments" +var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ + Name: itemSetSpiritwalkersVestmentsName, + Bonuses: map[int32]core.ApplyEffect{ + 2: func(agent core.Agent) { + // Not implemented + }, + 4: func(agent core.Agent) { + shaman := agent.(ShamanAgent).GetShaman() + + hasteMulti := 1.30 + shaman.SpiritwalkersVestments4PT13Aura = shaman.RegisterAura(core.Aura{ + Label: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace)", + ActionID: core.ActionID{SpellID: 105876}, + Duration: shaman.spiritwalkersGraceBaseDuration() + 5*time.Second, + OnGain: func(aura *core.Aura, sim *core.Simulation) { + shaman.MultiplyCastSpeed(hasteMulti) + }, + OnExpire: func(aura *core.Aura, sim *core.Simulation) { + shaman.MultiplyCastSpeed(1 / hasteMulti) + }, + }) + + if shaman.ItemSwap.IsEnabled() { + shaman.RegisterItemSwapCallback(core.ItemSetSlots, + func(sim *core.Simulation, _ proto.ItemSlot) { + hasT13Resto4pc := shaman.hasT13Resto4pc() + if hasT13Resto4pc { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second + } else { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + } + }) + } }, }, }) +func (shaman *Shaman) hasT13Resto4pc() bool { + return shaman.HasActiveSetBonus(itemSetSpiritwalkersVestmentsName, 4) +} + // T11 enh // (2) Set: Increases damage done by your Lava Lash and Stormstrike abilities by 10%. // (4) Set: Increases the critical strike chance of your Lightning Bolt spell by 10%. diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index 4389d34660..ae6b6b3893 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -117,9 +117,10 @@ type Shaman struct { Stormstrike *core.Spell PrimalStrike *core.Spell - LightningShield *core.Spell - LightningShieldAura *core.Aura - Fulmination *core.Spell + LightningShield *core.Spell + LightningShieldAura *core.Aura + Fulmination *core.Spell + SpiritwalkersGraceAura *core.Aura Earthquake *core.Spell Thunderstorm *core.Spell @@ -172,7 +173,8 @@ type Shaman struct { waterShieldManaMetrics *core.ResourceMetrics - VolcanicRegalia4PT12Aura *core.Aura + VolcanicRegalia4PT12Aura *core.Aura + SpiritwalkersVestments4PT13Aura *core.Aura useDragonSoul_2PT12 bool } @@ -248,6 +250,7 @@ func (shaman *Shaman) Initialize() { shaman.registerLavaBurstSpell() shaman.registerLightningBoltSpell() shaman.registerLightningShieldSpell() + shaman.registerSpiritwalkersGraceSpell() shaman.registerMagmaTotemSpell() shaman.registerSearingTotemSpell() shaman.registerShocks() diff --git a/sim/shaman/spiritwalkers_grace.go b/sim/shaman/spiritwalkers_grace.go new file mode 100644 index 0000000000..f0ed602110 --- /dev/null +++ b/sim/shaman/spiritwalkers_grace.go @@ -0,0 +1,58 @@ +package shaman + +import ( + "time" + + "github.com/wowsims/cata/sim/core" +) + +func (shaman *Shaman) spiritwalkersGraceBaseDuration() time.Duration { + return 15 * time.Second +} + +func (shaman *Shaman) registerSpiritwalkersGraceSpell() { + actionID := core.ActionID{SpellID: 79206} + + castWhileMovingMod := shaman.AddDynamicMod(core.SpellModConfig{ + Kind: core.SpellMod_AllowCastWhileMoving, + ClassMask: SpellMaskNone, + }) + + shaman.SpiritwalkersGraceAura = shaman.RegisterAura(core.Aura{ + Label: "Spiritwalker's Grace" + shaman.Label, + ActionID: actionID, + Duration: 15 * time.Second, + OnGain: func(aura *core.Aura, sim *core.Simulation) { + castWhileMovingMod.Activate() + if shaman.hasT13Resto4pc() { + shaman.SpiritwalkersVestments4PT13Aura.Activate(sim) + } + }, + OnExpire: func(aura *core.Aura, sim *core.Simulation) { + castWhileMovingMod.Deactivate() + }, + }) + + shaman.RegisterSpell(core.SpellConfig{ + ActionID: actionID, + SpellSchool: core.SpellSchoolNature, + Flags: core.SpellFlagAPL, + + ManaCost: core.ManaCostOptions{ + BaseCost: 0.12, + }, + + Cast: core.CastConfig{ + DefaultCast: core.Cast{ + NonEmpty: true, + }, + CD: core.Cooldown{ + Timer: shaman.NewTimer(), + Duration: time.Second * 120, + }, + }, + ApplyEffects: func(sim *core.Simulation, _ *core.Unit, _ *core.Spell) { + shaman.SpiritwalkersGraceAura.Activate(sim) + }, + }) +} diff --git a/sim/shaman/talents.go b/sim/shaman/talents.go index 984b72fbc4..cbdb385712 100644 --- a/sim/shaman/talents.go +++ b/sim/shaman/talents.go @@ -252,8 +252,6 @@ func (shaman *Shaman) applyLavaSurge() { return } - has4PT12 := shaman.HasSetBonus(ItemSetVolcanicRegalia, 4) - shaman.RegisterAura(core.Aura{ Label: "Lava Surge", Duration: core.NeverExpires, @@ -276,7 +274,7 @@ func (shaman *Shaman) applyLavaSurge() { OnAction: func(sim *core.Simulation) { shaman.LavaBurst.CD.Reset() - if has4PT12 { + if shaman.hasT12Ele4pc() { shaman.VolcanicRegalia4PT12Aura.Activate(sim) } }, @@ -293,7 +291,7 @@ func (shaman *Shaman) applyLavaSurge() { } }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask != SpellMaskLavaBurst || !has4PT12 { + if spell.ClassSpellMask != SpellMaskLavaBurst || !shaman.hasT12Ele4pc() { return } //If volcano procs during LvB cast time, it is not consumed @@ -392,8 +390,6 @@ func (shaman *Shaman) registerElementalMasteryCD() { FloatValue: 0.15, }) - has2PT13 := shaman.HasSetBonus(ItemSetSpiritwalkersRegalia, 2) - buffAura := shaman.RegisterAura(core.Aura{ Label: "Elemental Mastery Buff", ActionID: core.ActionID{SpellID: 64701}, @@ -401,14 +397,14 @@ func (shaman *Shaman) registerElementalMasteryCD() { OnGain: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(1.20) damageMod.Activate() - if has2PT13 { + if shaman.hasT13Ele2pc() { shaman.AddStatDynamic(sim, stats.MasteryRating, 2000) } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(1 / 1.20) damageMod.Deactivate() - if has2PT13 { + if shaman.hasT13Ele2pc() { shaman.AddStatDynamic(sim, stats.MasteryRating, -2000) } }, diff --git a/ui/shaman/elemental/sim.ts b/ui/shaman/elemental/sim.ts index b6e85741ec..5602569265 100644 --- a/ui/shaman/elemental/sim.ts +++ b/ui/shaman/elemental/sim.ts @@ -117,7 +117,17 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecElementalShaman, { OtherInputs.DistanceFromTarget, ], }, - itemSwapSlots: [ItemSlot.ItemSlotBack, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotLegs, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ItemSlot.ItemSlotMainHand, + ], customSections: [ShamanInputs.TotemsSection], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. diff --git a/ui/shaman/enhancement/sim.ts b/ui/shaman/enhancement/sim.ts index c24563bfd4..477e2b9c7f 100644 --- a/ui/shaman/enhancement/sim.ts +++ b/ui/shaman/enhancement/sim.ts @@ -125,12 +125,16 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { inputs: [EnhancementInputs.SyncTypeInput, OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget], }, itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotShoulder, ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotChest, ItemSlot.ItemSlotHands, - ItemSlot.ItemSlotMainHand, - ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotLegs, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, ], customSections: [ShamanInputs.TotemsSection, FireElementalSection], encounterPicker: { From 3b6b6d816102358f144014476b741d229e9cb2cc Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 01:19:46 +0100 Subject: [PATCH 038/127] Add Multiply attack speed --- sim/shaman/items.go | 2 ++ sim/warlock/demon_soul.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sim/shaman/items.go b/sim/shaman/items.go index cf366687ed..b378fdbfe9 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -274,9 +274,11 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ Duration: shaman.spiritwalkersGraceBaseDuration() + 5*time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(hasteMulti) + shaman.MultiplyAttackSpeed(sim, hasteMulti) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(1 / hasteMulti) + shaman.MultiplyAttackSpeed(sim, 1/hasteMulti) }, }) diff --git a/sim/warlock/demon_soul.go b/sim/warlock/demon_soul.go index 6d1d088563..e39b5cfc27 100644 --- a/sim/warlock/demon_soul.go +++ b/sim/warlock/demon_soul.go @@ -58,10 +58,12 @@ func (warlock *Warlock) registerDemonSoul() { Duration: 20 * time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { warlock.MultiplyCastSpeed(felguardHasteMulti) + warlock.MultiplyAttackSpeed(sim, felguardHasteMulti) felguardDamageMod.Activate() }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { warlock.MultiplyCastSpeed(1 / felguardHasteMulti) + warlock.MultiplyAttackSpeed(sim, 1/felguardHasteMulti) felguardDamageMod.Deactivate() }, }) From 4917bcf339fce7f158aa6f420c02b3009529877c Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 11:14:52 +0100 Subject: [PATCH 039/127] Simplify trinketprocbuffs check --- sim/common/shared/shared_utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index b2a747f01e..8db94b6f94 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -174,7 +174,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(config.ID), false) - if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) || slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket2) { + if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) } From 7ee5a762e7bb4744908454771cb3de58248fc4d2 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 12:18:01 +0100 Subject: [PATCH 040/127] Remove redundant Flag check --- sim/core/cast.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sim/core/cast.go b/sim/core/cast.go index e3d95b5c4c..2bbbd02a32 100644 --- a/sim/core/cast.go +++ b/sim/core/cast.go @@ -99,10 +99,8 @@ func (spell *Spell) makeCastFunc(config CastConfig) CastSuccessFunc { } } - if spell.Flags != 0 { - if spell.Flags.Matches(SpellFlagSwapped) { - return spell.castFailureHelper(sim, "spell attached to an un-equipped item") - } + if spell.Flags.Matches(SpellFlagSwapped) { + return spell.castFailureHelper(sim, "spell attached to an un-equipped item") } if spell.ExtraCastCondition != nil { From 66b2890af2f56e3c4c6f5862e1a467d26759b182 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 14:46:25 +0100 Subject: [PATCH 041/127] Migrate WOTLK enchants --- sim/common/shared/shared_utils.go | 28 +++- sim/common/wotlk/enchant_effects.go | 217 +++++++++++----------------- 2 files changed, 106 insertions(+), 139 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 8db94b6f94..83a067f2c4 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -24,7 +24,7 @@ type ProcStatBonusEffect struct { ICD time.Duration // For ignoring a hardcoded spell. - IgnoreSpellID int32 + IgnoreSpellIDs []int32 // Any other custom proc conditions not covered by the above fields. CustomProcCondition core.CustomStatBuffProcCondition @@ -140,17 +140,17 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } } - if config.IgnoreSpellID != 0 { - ignoreSpellID := config.IgnoreSpellID + if len(config.IgnoreSpellIDs) > 0 { + ignoreSpellIDs := config.IgnoreSpellIDs handler = func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !spell.IsSpellAction(ignoreSpellID) { + isAllowedSpell := !slices.ContainsFunc(ignoreSpellIDs, func(spellID int32) bool { + return spell.IsSpellAction(spellID) + }) + if isAllowedSpell { if customHandler != nil { customHandler(sim, procAura) } else { - procAura.Activate(sim) - if procSpell.Spell != nil { - procSpell.Trigger(sim, spell, result) - } + handler(sim, spell, result) } } } @@ -445,6 +445,18 @@ func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpel } } + if len(config.IgnoreSpellIDs) > 0 { + ignoreSpellIDs := config.IgnoreSpellIDs + handler = func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + isAllowedSpell := !slices.ContainsFunc(ignoreSpellIDs, func(spellID int32) bool { + return spell.IsSpellAction(spellID) + }) + if isAllowedSpell { + handler(sim, spell, result) + } + } + } + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ ActionID: core.ActionID{SpellID: config.ID}, Name: config.Name, diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 852d88a376..5b4e3a0ee9 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -3,18 +3,16 @@ package wotlk import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) -func CreateBlackMagicProcAura(character *core.Character) *core.StatBuffAura { - return character.NewTemporaryStatsAura("Black Magic Proc", core.ActionID{SpellID: 59626}, stats.Stats{stats.HasteRating: 250}, time.Second*10) -} - func init() { // Keep these in order by item ID. + // Enchant: 3251, Spell: 44622 - Giant Slayer core.NewEnchantEffect(3251, func(agent core.Agent) { character := agent.GetCharacter() @@ -59,6 +57,7 @@ func init() { character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura) }) + // Enchant: 3239, Spell: 44525 - Icebreaker core.NewEnchantEffect(3239, func(agent core.Agent) { character := agent.GetCharacter() @@ -99,6 +98,7 @@ func init() { character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura) }) + // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope core.NewEnchantEffect(3607, func(agent core.Agent) { character := agent.GetCharacter() // TODO: This should be ranged-only haste. For now just make it hunter-only. @@ -107,46 +107,31 @@ func init() { } }) + // Enchant: 3608, Spell: 55135, Item: 41167 - Heartseeker Scope core.NewEnchantEffect(3608, func(agent core.Agent) { agent.GetCharacter().AddBonusRangedCritPercent(40 / core.CritRatingPerCritPercent) }) - core.NewEnchantEffect(3748, func(agent core.Agent) { - character := agent.GetCharacter() - actionID := core.ActionID{ItemID: 42500} - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultMeleeCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := sim.Roll(45, 67) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - }, - }) - - aura := character.RegisterAura(core.Aura{ - Label: "Titanium Shield Spike", - ActionID: actionID, - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if result.Landed() && spell.ProcMask.Matches(core.ProcMaskMelee) { - procSpell.Cast(sim, spell.Unit) - } + // Enchant: 3748, Spell: 56353, Item: 42500 - Titanium Shield Spike + shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + EnchantID: 3748, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, + ProcDamageEffect: shared.ProcDamageEffect{ + SpellID: 56353, + Trigger: core.ProcTrigger{ + Name: "Titanium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, }, - }) - - character.ItemSwap.RegisterEnchantProc(3748, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}) - }) - + School: core.SpellSchoolPhysical, + MinDmg: 45, + MaxDmg: 67, + Outcome: shared.OutcomeMeleeCanCrit, + IsMelee: true, + }}) + + // Enchant: 3247, Spell: 44595 - Scourgebane core.NewEnchantEffect(3247, func(agent core.Agent) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { @@ -154,16 +139,19 @@ func init() { } }) + // Enchant: 3253, Spell: 44625 - Armsman core.NewEnchantEffect(3253, func(agent core.Agent) { character := agent.GetCharacter() character.PseudoStats.ThreatMultiplier *= 1.02 }) + // Enchant: 3296, Spell: 47899 - Wisdom core.NewEnchantEffect(3296, func(agent core.Agent) { character := agent.GetCharacter() character.PseudoStats.ThreatMultiplier *= 0.98 }) + // Enchant: 3789, Spell: 59620 - Berserking core.NewEnchantEffect(3789, func(agent core.Agent) { character := agent.GetCharacter() @@ -228,40 +216,26 @@ func init() { character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura) }) - core.NewEnchantEffect(3790, func(agent core.Agent) { - character := agent.GetCharacter() - - procAura := CreateBlackMagicProcAura(character) - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 35, - } - procAura.Icd = &icd - - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Black Magic", - 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) { - // Special case for spells that aren't spells that can proc black magic. - specialCaseSpell := spell.ActionID.SpellID == 47465 || spell.ActionID.SpellID == 12867 - - if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskSpellOrSpellProc) && !specialCaseSpell { - return - } - - if icd.IsReady(sim) && sim.RandomFloat("Black Magic") < 0.35 { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - - character.ItemSwap.RegisterEnchantProc(3790, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + // Enchant: 3790, Spell: 59630 - Black Magic + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 3790, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ + Name: "Black Magic", + ID: 59630, + AuraID: 59626, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, + ProcMask: core.ProcMaskSpellOrSpellProc, + Outcome: core.OutcomeLanded, + ICD: time.Second * 35, + ProcChance: 0.35, + Bonus: stats.Stats{stats.HasteRating: 250}, + Duration: time.Second * 10, + IgnoreSpellIDs: []int32{47465, 12867}, + }, }) + // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope core.AddWeaponEffect(3843, func(agent core.Agent, _ proto.ItemSlot) { w := agent.GetCharacter().AutoAttacks.Ranged() w.BaseDamageMin += 15 @@ -343,39 +317,25 @@ func init() { // }) //}) - core.NewEnchantEffect(3722, func(agent core.Agent) { - character := agent.GetCharacter() - - procAura := character.NewTemporaryStatsAura("Lightweave Embroidery Proc", core.ActionID{SpellID: 55637}, stats.Stats{stats.SpellPower: 295}, time.Second*15) - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 60, - } - procAura.Icd = &icd - - callback := func(_ *core.Aura, sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - if !result.Landed() { - return - } - - if icd.IsReady(sim) && sim.RandomFloat("Lightweave") < 0.35 { - icd.Use(sim) - procAura.Activate(sim) - } - } - - character.GetOrRegisterAura(core.Aura{ - Label: "Lightweave Embroidery", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnHealDealt: callback, - OnPeriodicDamageDealt: callback, - OnSpellHitDealt: callback, - }) + // Enchant: 3722, Spell: 55642 - Lightweave Embroidery + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 3722, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ + Name: "Lightweave Embroidery", + ID: 55642, + AuraID: 55637, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 60, + ProcChance: 0.35, + Bonus: stats.Stats{stats.SpellPower: 295}, + Duration: time.Second * 15, + }, }) + // Enchant: 3728, Spell: 55769 - Darkglow Embroidery core.NewEnchantEffect(3728, func(agent core.Agent) { character := agent.GetCharacter() if !character.HasManaBar() { @@ -388,8 +348,9 @@ func init() { Duration: time.Second * 45, } - character.GetOrRegisterAura(core.Aura{ + aura := character.GetOrRegisterAura(core.Aura{ Icd: &icd, + ActionID: core.ActionID{SpellID: 55769}, Label: "Darkglow Embroidery", Duration: core.NeverExpires, OnReset: func(aura *core.Aura, sim *core.Simulation) { @@ -402,37 +363,29 @@ func init() { } }, }) - }) - - core.NewEnchantEffect(3730, func(agent core.Agent) { - character := agent.GetCharacter() - - procAura := character.NewTemporaryStatsAura("Swordguard Embroidery Proc", core.ActionID{SpellID: 55775}, stats.Stats{stats.AttackPower: 400, stats.RangedAttackPower: 400}, time.Second*15) - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 55, - } - procAura.Icd = &icd - character.GetOrRegisterAura(core.Aura{ - Label: "Swordguard Embroidery", - 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(core.ProcMaskMeleeOrRanged) { - return - } + character.ItemSwap.RegisterEnchantProc(3728, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) + }) - if icd.IsReady(sim) && sim.RandomFloat("Swordguard") < 0.2 { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) + // Enchant: 3730, Spell: 55777 - Swordguard Embroidery + shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + EnchantID: 3730, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, + ProcStatBonusEffect: shared.ProcStatBonusEffect{ + Name: "Swordguard Embroidery", + ID: 55777, + AuraID: 55775, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskMeleeOrRanged, + Outcome: core.OutcomeLanded, + ICD: time.Second * 55, + ProcChance: 0.2, + Bonus: stats.Stats{stats.AttackPower: 400, stats.RangedAttackPower: 400}, + Duration: time.Second * 15, + }, }) + // Enchant: 3870, Spell: 64568 - Blood Draining core.NewEnchantEffect(3870, func(agent core.Agent) { character := agent.GetCharacter() healthMetrics := character.NewHealthMetrics(core.ActionID{SpellID: 64569}) @@ -451,7 +404,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Blood Draining", Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, ProcMask: core.ProcMaskMelee, @@ -468,5 +421,7 @@ func init() { } }, }) + + character.ItemSwap.RegisterEnchantProc(3870, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) } From 064095018dbc443358654f9939df02395c0e8055 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 14:59:29 +0100 Subject: [PATCH 042/127] Fix extending CDs on equip swaps --- sim/core/item_swaps.go | 17 +- sim/warrior/fury/TestFury.results | 384 +++++++++++++++--------------- 2 files changed, 195 insertions(+), 206 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 448499c964..386e199be0 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -182,7 +182,6 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { if itemSlot == -1 { return } - equippedItemID := swap.GetEquippedItemBySlot(itemSlot).ID spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { aura := character.GetAuraByID(spell.ActionID) @@ -197,11 +196,8 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { if !swap.initialized { return } - swappedItemID := swap.GetUnequippedItemBySlot(slot).ID - if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { - spell.CD.Set(sim.CurrentTime + time.Second*30) - } + spell.CD.Set(sim.CurrentTime + time.Second*30) } }) } @@ -216,11 +212,7 @@ func (swap *ItemSwap) ProcessTinker(spell *Spell, slots []proto.ItemSlot) { if spell == nil || !swap.initialized { return } - equippedItemID := swap.GetEquippedItemBySlot(slot).ID - swappedItemID := swap.GetUnequippedItemBySlot(slot).ID - if swappedItemID == equippedItemID && spell.CD.IsReady(sim) || swappedItemID != equippedItemID { - spell.CD.Set(sim.CurrentTime + time.Second*30) - } + spell.CD.Set(sim.CurrentTime + max(spell.CD.TimeToReady(sim), time.Second*30)) }) } @@ -322,10 +314,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) } - // If GCD is ready then use the GCD, otherwise we assume it's being used along side a spell. - if character.GCD.IsReady(sim) { - character.ExtendGCDUntil(sim, max(character.NextGCDAt(), sim.CurrentTime+GCDDefault)) - } + character.ExtendGCDUntil(sim, max(character.NextGCDAt(), sim.CurrentTime+GCDDefault)) } swap.swapSet = swapSet diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 160a918e50..44da834aab 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2148,22 +2148,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99211.02704 - tps: 107441.53918 + dps: 99382.17017 + tps: 107565.53783 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39069.06232 - tps: 33029.49233 + dps: 38959.01554 + tps: 32935.25355 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52208.70003 - tps: 43104.12436 + dps: 51916.92666 + tps: 42847.59314 } } dps_results: { @@ -2190,22 +2190,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99434.28356 - tps: 107683.99087 + dps: 99605.42669 + tps: 107807.98952 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39153.29374 - tps: 33104.40255 + dps: 39043.24696 + tps: 33010.16378 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52581.97479 - tps: 43438.11443 + dps: 52290.20141 + tps: 43181.58321 } } dps_results: { @@ -2232,22 +2232,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99211.02704 - tps: 107441.53918 + dps: 99382.17017 + tps: 107565.53783 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38436.40091 - tps: 31946.27358 + dps: 38414.58859 + tps: 31950.22386 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51053.0471 - tps: 42053.55589 + dps: 50765.92093 + tps: 41803.11584 } } dps_results: { @@ -2274,22 +2274,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99434.28356 - tps: 107683.99087 + dps: 99605.42669 + tps: 107807.98952 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38520.44791 - tps: 32020.40318 + dps: 38498.63559 + tps: 32024.35346 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51421.20328 - tps: 42380.88929 + dps: 51134.07711 + tps: 42130.44924 } } dps_results: { @@ -2316,22 +2316,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82038.90917 - tps: 89483.40729 + dps: 82472.02182 + tps: 89911.72825 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31173.4777 - tps: 26965.24758 + dps: 31386.01042 + tps: 27146.11001 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42320.07515 - tps: 35934.20183 + dps: 42077.24056 + tps: 35703.72157 } } dps_results: { @@ -2358,22 +2358,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82225.15656 - tps: 89686.6483 + dps: 82658.26921 + tps: 90114.96926 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31242.60514 - tps: 27028.12266 + dps: 31455.13786 + tps: 27208.98509 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42624.10597 - tps: 36212.20132 + dps: 42381.27138 + tps: 35981.72107 } } dps_results: { @@ -2400,22 +2400,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82038.90917 - tps: 89483.40729 + dps: 82472.02182 + tps: 89911.72825 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31306.04576 - tps: 26479.41786 + dps: 31211.4989 + tps: 26380.09889 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41827.01654 - tps: 34971.48746 + dps: 41585.05491 + tps: 34759.0569 } } dps_results: { @@ -2442,22 +2442,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82225.15656 - tps: 89686.6483 + dps: 82658.26921 + tps: 90114.96926 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31375.46275 - tps: 26541.74698 + dps: 31280.91588 + tps: 26442.42801 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42126.27626 - tps: 35241.41099 + dps: 41884.31462 + tps: 35028.98044 } } dps_results: { @@ -2484,22 +2484,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150302.42224 - tps: 165303.47722 + dps: 150485.44989 + tps: 165378.67744 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50032.54808 - tps: 41206.89482 + dps: 49974.37993 + tps: 41072.23928 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66001.52402 - tps: 53068.85469 + dps: 65763.27629 + tps: 52964.69417 } } dps_results: { @@ -2526,22 +2526,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150637.61668 - tps: 165671.4405 + dps: 150820.64433 + tps: 165746.64073 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50142.45912 - tps: 41300.35434 + dps: 50084.29097 + tps: 41165.6988 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66475.95444 - tps: 53474.80222 + dps: 66237.70532 + tps: 53370.64032 } } dps_results: { @@ -2568,22 +2568,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150302.42224 - tps: 165303.47722 + dps: 150485.44989 + tps: 165378.67744 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50122.27803 - tps: 40111.824 + dps: 50069.49911 + tps: 40160.00774 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65463.2918 - tps: 52037.92917 + dps: 65282.37217 + tps: 51915.5766 } } dps_results: { @@ -2610,22 +2610,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150637.61668 - tps: 165671.4405 + dps: 150820.64433 + tps: 165746.64073 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50231.00007 - tps: 40203.36918 + dps: 50178.22115 + tps: 40251.55292 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65934.0809 - tps: 52437.47908 + dps: 65753.16056 + tps: 52315.1258 } } dps_results: { @@ -2652,22 +2652,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123990.74603 - tps: 137565.33663 + dps: 123717.91915 + tps: 137030.03261 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40205.78337 - tps: 34142.47648 + dps: 40049.55409 + tps: 33916.44359 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53101.52795 - tps: 44190.67531 + dps: 52877.97782 + tps: 43992.32999 } } dps_results: { @@ -2694,22 +2694,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124266.45005 - tps: 137869.71969 + dps: 123993.62317 + tps: 137334.41567 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40292.99608 - tps: 34218.19414 + dps: 40136.7668 + tps: 33992.16125 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53487.34133 - tps: 44529.03393 + dps: 53263.79167 + tps: 44330.68908 } } dps_results: { @@ -2736,22 +2736,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123990.74603 - tps: 137565.33663 + dps: 123717.91915 + tps: 137030.03261 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40490.87354 - tps: 33130.52675 + dps: 40388.41091 + tps: 32981.7441 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53461.87743 - tps: 43192.39802 + dps: 53139.9926 + tps: 42868.5995 } } dps_results: { @@ -2778,22 +2778,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124266.45005 - tps: 137869.71969 + dps: 123993.62317 + tps: 137334.41567 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40577.94843 - tps: 33204.90502 + dps: 40475.4858 + tps: 33056.12237 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53848.54088 - tps: 43525.59161 + dps: 53526.6566 + tps: 43201.79364 } } dps_results: { @@ -2820,22 +2820,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99757.03457 - tps: 108141.13011 + dps: 99700.6337 + tps: 107954.97609 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39025.02955 - tps: 32812.02114 + dps: 38903.59737 + tps: 32615.72675 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51422.27984 - tps: 42300.02899 + dps: 50972.2183 + tps: 41942.63819 } } dps_results: { @@ -2862,22 +2862,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99976.13937 - tps: 108379.47491 + dps: 99919.73851 + tps: 108193.32089 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39106.31618 - tps: 32884.19678 + dps: 38984.884 + tps: 32687.90239 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51783.43795 - tps: 42622.16754 + dps: 51333.37789 + tps: 42264.77822 } } dps_results: { @@ -2904,22 +2904,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99757.03457 - tps: 108141.13011 + dps: 99700.6337 + tps: 107954.97609 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38327.31801 - tps: 31747.73627 + dps: 38223.79763 + tps: 31609.68566 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50640.4495 - tps: 41498.76027 + dps: 50203.42009 + tps: 41139.22974 } } dps_results: { @@ -2946,22 +2946,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99976.13937 - tps: 108379.47491 + dps: 99919.73851 + tps: 108193.32089 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38407.37719 - tps: 31818.1934 + dps: 38303.85681 + tps: 31680.14279 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50994.26836 - tps: 41811.73415 + dps: 50557.24041 + tps: 41452.20509 } } dps_results: { @@ -2988,22 +2988,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82768.75209 - tps: 90319.85774 + dps: 82976.84159 + tps: 90309.23427 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31240.66184 - tps: 26962.23215 + dps: 31285.83796 + tps: 26936.799 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41478.22336 - tps: 35058.9092 + dps: 41242.1858 + tps: 34839.21523 } } dps_results: { @@ -3030,22 +3030,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82950.15416 - tps: 90518.17866 + dps: 83158.24366 + tps: 90507.55519 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31306.45962 - tps: 27021.84798 + dps: 31351.63575 + tps: 26996.41482 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41771.6663 - tps: 35326.74456 + dps: 41535.62874 + tps: 35107.05059 } } dps_results: { @@ -3072,22 +3072,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82768.75209 - tps: 90319.85774 + dps: 82976.84159 + tps: 90309.23427 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31020.1061 - tps: 26177.09129 + dps: 30977.61317 + tps: 26090.72034 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41580.76715 - tps: 34813.91499 + dps: 41333.12664 + tps: 34595.81228 } } dps_results: { @@ -3114,22 +3114,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82950.15416 - tps: 90518.17866 + dps: 83158.24366 + tps: 90507.55519 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31086.87903 - tps: 26236.89234 + dps: 31044.3861 + tps: 26150.52139 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41872.55404 - tps: 35076.6089 + dps: 41624.91352 + tps: 34858.5062 } } dps_results: { @@ -3156,22 +3156,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149775.45575 - tps: 165126.33125 + dps: 148430.17448 + tps: 163323.19607 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49609.7778 - tps: 40625.00693 + dps: 49466.7797 + tps: 40450.22533 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65042.00485 - tps: 52012.40054 + dps: 64758.5547 + tps: 51808.95522 } } dps_results: { @@ -3198,22 +3198,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150099.37892 - tps: 165482.93005 + dps: 148754.09765 + tps: 163679.79488 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49712.4737 - tps: 40711.03891 + dps: 49569.4756 + tps: 40536.25731 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65497.58745 - tps: 52397.89902 + dps: 65214.13857 + tps: 52194.45497 } } dps_results: { @@ -3240,22 +3240,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149775.45575 - tps: 165126.33125 + dps: 148430.17448 + tps: 163323.19607 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49846.6356 - tps: 39800.73183 + dps: 49889.73708 + tps: 39821.06658 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64408.24912 - tps: 50581.50562 + dps: 64301.99155 + tps: 50441.25307 } } dps_results: { @@ -3282,22 +3282,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150099.37892 - tps: 165482.93005 + dps: 148754.09765 + tps: 163679.79488 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49949.52053 - tps: 39885.99347 + dps: 49992.622 + tps: 39906.32822 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64864.17833 - tps: 50962.62967 + dps: 64757.92098 + tps: 50822.37734 } } dps_results: { @@ -3324,22 +3324,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123559.71053 - tps: 136944.95692 + dps: 123996.53242 + tps: 137399.74945 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39443.45494 - tps: 33277.97974 + dps: 39510.67375 + tps: 33325.15919 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52798.15735 - tps: 43795.0391 + dps: 52509.00705 + tps: 43562.2052 } } dps_results: { @@ -3366,22 +3366,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123828.36109 - tps: 137242.05538 + dps: 124265.18298 + tps: 137696.84791 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39526.26036 - tps: 33349.39316 + dps: 39593.47917 + tps: 33396.5726 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53175.09113 - tps: 44125.35438 + dps: 52885.94082 + tps: 43892.52049 } } dps_results: { @@ -3408,22 +3408,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123559.71053 - tps: 136944.95692 + dps: 123996.53242 + tps: 137399.74945 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40225.04449 - tps: 32979.70174 + dps: 40136.97133 + tps: 32855.51278 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52148.12656 - tps: 42125.88227 + dps: 51855.1759 + tps: 41870.91909 } } dps_results: { @@ -3450,22 +3450,22 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123828.36109 - tps: 137242.05538 + dps: 124265.18298 + tps: 137696.84791 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40308.01473 - tps: 33049.91329 + dps: 40219.94157 + tps: 32925.72433 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52512.44797 - tps: 42437.91852 + dps: 52219.49726 + tps: 42182.95528 } } dps_results: { From 23a1d9a61fcfaaa9d24c22fb945a3d8e699e670b Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 22:24:16 +0100 Subject: [PATCH 043/127] Migrate shaman to set bonus helpers --- sim/core/item_sets.go | 70 ++++++- sim/shaman/chain_lightning.go | 3 +- sim/shaman/enhancement/lavalash.go | 6 +- sim/shaman/items.go | 293 +++++++++++++++++------------ sim/shaman/shaman.go | 5 +- sim/shaman/spiritwalkers_grace.go | 10 +- sim/shaman/talents.go | 10 +- 7 files changed, 257 insertions(+), 140 deletions(-) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index bf94a2fa1e..cb971d3d49 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -165,11 +165,11 @@ func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { return activeBonuses } -func (character *Character) HasActiveSetBonus(name string, count int32) bool { +func (character *Character) HasActiveSetBonus(setName string, count int32) bool { activeSetBonuses := character.GetActiveSetBonuses() for _, activeSetBonus := range activeSetBonuses { - if activeSetBonus.Name == name && activeSetBonus.NumPieces >= count { + if activeSetBonus.Name == setName && activeSetBonus.NumPieces >= count { return true } } @@ -206,3 +206,69 @@ func (character *Character) GetActiveSetBonusNames() []string { } return names } + +// Adds a proc trigger aura that activates when the character has a set bonus. +func (character *Character) MakeProcTriggerAuraForSetBonus(setName string, numPieces int32, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { + return character.factory_ProcTriggerAuraForSetBonus(setName, numPieces, &character.Unit, config, customSetBonusCallbackConfig) +} + +func (character *Character) MakeProcTriggerAuraForSetBonusWithUnit(setName string, numPieces int32, unit *Unit, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { + return character.factory_ProcTriggerAuraForSetBonus(setName, numPieces, unit, config, customSetBonusCallbackConfig) +} + +func (character *Character) factory_ProcTriggerAuraForSetBonus(setName string, numPieces int32, unit *Unit, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { + aura := MakeProcTriggerAura(unit, config) + + if customSetBonusCallbackConfig == nil { + customSetBonusCallbackConfig = &CustomSetBonusCallbackConfig{} + } + + if character.ItemSwap.IsEnabled() { + character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, slot proto.ItemSlot) { + if character.HasActiveSetBonus(setName, numPieces) { + if customSetBonusCallbackConfig.OnGain != nil { + customSetBonusCallbackConfig.OnGain(sim, aura) + } else { + aura.Activate(sim) + } + } else { + if customSetBonusCallbackConfig.OnExpire != nil { + customSetBonusCallbackConfig.OnExpire(sim, aura) + } else { + aura.Deactivate(sim) + } + } + }) + } + + return aura +} + +type CustomSetBonusCallbackConfig struct { + // Override default behavior when the set bonus is gained. + OnGain func(sim *Simulation, aura *Aura) + // Override default behavior when the set bonus is lost. + OnExpire func(sim *Simulation, aura *Aura) +} + +// Adds a static effect that activates when the character has a set bonus. +func (character *Character) MakeStaticEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { + if character.ItemSwap.IsEnabled() { + character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, _ proto.ItemSlot) { + if character.HasActiveSetBonus(setName, numPieces) { + if callbackConfig.OnGain != nil { + callbackConfig.OnGain(sim, nil) + } + } else { + if callbackConfig.OnExpire != nil { + callbackConfig.OnExpire(sim, nil) + } + } + }) + } else { + // By default, the effect is always active. + if callbackConfig.OnGain != nil { + callbackConfig.OnGain(nil, nil) + } + } +} diff --git a/sim/shaman/chain_lightning.go b/sim/shaman/chain_lightning.go index 3c79485086..48d0232719 100644 --- a/sim/shaman/chain_lightning.go +++ b/sim/shaman/chain_lightning.go @@ -27,8 +27,6 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe } } - bounceReduction := core.TernaryFloat64(shaman.HasSetBonus(ItemSetTidefury, 2) && !isElementalOverload, 0.83, 0.7) - numHits := int32(3) if shaman.HasMajorGlyph(proto.ShamanMajorGlyph_GlyphOfChainLightning) { spellConfig.DamageMultiplier *= 0.90 @@ -37,6 +35,7 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe numHits = min(numHits, shaman.Env.GetNumTargets()) spellConfig.ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + bounceReduction := core.TernaryFloat64(shaman.HasActiveSetBonus(itemSetTidefuryName, 2) && !isElementalOverload, 0.83, 0.7) baseDamage := shaman.CalcAndRollDamageRange(sim, 1.08800005913, 0.13300000131) curTarget := target diff --git a/sim/shaman/enhancement/lavalash.go b/sim/shaman/enhancement/lavalash.go index 8a8763262a..8212fc665f 100644 --- a/sim/shaman/enhancement/lavalash.go +++ b/sim/shaman/enhancement/lavalash.go @@ -8,6 +8,10 @@ import ( "github.com/wowsims/cata/sim/shaman" ) +func (enh *EnhancementShaman) getSearingFlamesMultiplier() float64 { + return enh.SearingFlamesMultiplier + core.TernaryFloat64(enh.HasActiveSetBonus(shaman.ItemSetVolcanicBattlegear.Name, 2), 0.05, 0) +} + func (enh *EnhancementShaman) registerLavaLashSpell() { damageMultiplier := 2.6 if enh.SelfBuffs.ImbueOH == proto.ShamanImbue_FlametongueWeapon { @@ -44,7 +48,7 @@ func (enh *EnhancementShaman) registerLavaLashSpell() { if enh.Talents.SearingFlames > 0 { searingFlames = enh.SearingFlames.Dot(target) - searingFlamesBonus += enh.SearingFlamesMultiplier * float64(searingFlames.GetStacks()) + searingFlamesBonus += enh.getSearingFlamesMultiplier() * float64(searingFlames.GetStacks()) } baseDamage *= searingFlamesBonus diff --git a/sim/shaman/items.go b/sim/shaman/items.go index b378fdbfe9..070e460120 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -11,17 +11,32 @@ import ( // Dungeon Set 3 Tidefury Raiment // (2) Set: Your Chain Lightning Spell now only loses 17% of its damage per jump. // (4) Set: Your Water Shield ability grants an additional 56 mana each time it triggers and an additional 3 mana per 5 sec. +var itemSetTidefuryName = "Tidefury Raiment" var ItemSetTidefury = core.NewItemSet(core.ItemSet{ - Name: "Tidefury Raiment", + Name: itemSetTidefuryName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { // Handled in chain_lightning.go }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() + if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { - shaman.AddStat(stats.MP5, 3) + shaman.MakeStaticEffectForSetBonus(itemSetTidefuryName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + // If Sim is undefined ItemSwap is disabled so we can add this statically + if sim == nil { + shaman.AddStat(stats.MP5, 3) + } else { + shaman.AddStatDynamic(sim, stats.MP5, 3) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + shaman.AddStatDynamic(sim, stats.MP5, -3) + }, + }) } + }, }, }) @@ -69,24 +84,45 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // T11 elem // (2) Set: Increases the critical strike chance of your Flame Shock spell by 10%. // (4) Set: Reduces the cast time of your Lightning Bolt spell by 10%. +var itemSetRagingElementsRegaliaName = "Regalia of the Raging Elements" var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ - Name: "Regalia of the Raging Elements", + Name: itemSetRagingElementsRegaliaName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + shaman := agent.GetCharacter() + + setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskFlameShock, }) + + shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsRegaliaName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, 4: func(agent core.Agent) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + shaman := agent.GetCharacter() + + setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, FloatValue: -0.1, ClassMask: SpellMaskLightningBolt, }) + + shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsRegaliaName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, }, }) @@ -101,50 +137,38 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() - var aura *core.Aura + var procConfig core.ProcTrigger if shaman.useDragonSoul_2PT12 { - aura = shaman.RegisterAura(core.Aura{ - Label: "Volcanic Regalia 2P", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) + procConfig = core.ProcTrigger{ + Name: "Volcanic Regalia 2P", + ClassSpellMask: SpellMaskLightningBolt, + ProcChance: 0.3, + Callback: core.CallbackOnSpellHitDealt, + ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { + return shaman.FireElementalTotem != nil }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell.ClassSpellMask != SpellMaskLightningBolt || !sim.Proc(0.3, "Volcanic Regalia 2P") || shaman.FireElementalTotem == nil { - return - } + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { shaman.FireElementalTotem.CD.Reduce(4 * time.Second) }, - }) + } } else { - aura = core.MakeProcTriggerAura(&shaman.Unit, core.ProcTrigger{ + procConfig = core.ProcTrigger{ Name: "Volcanic Regalia 2P", - Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskSpellDamage, Outcome: core.OutcomeLanded, ProcChance: 0.08, + Callback: core.CallbackOnSpellHitDealt, ICD: time.Second * 105, ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { return !spell.Matches(SpellMaskOverload) }, - Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { shaman.FireElementalTotem.CD.Reset() }, - }) + } } - if shaman.ItemSwap.IsEnabled() { - shaman.RegisterItemSwapCallback(core.ItemSetSlots, - func(sim *core.Simulation, _ proto.ItemSlot) { - hasT12Ele2pc := shaman.hasT12Ele2pc() - - if hasT12Ele2pc { - aura.Activate(sim) - } else { - aura.Deactivate(sim) - } - }) - } + shaman.MakeProcTriggerAuraForSetBonus(itemSetVolcanicRegaliaName, 2, procConfig, nil) }, 4: func(agent core.Agent) { @@ -155,6 +179,7 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ FloatValue: -1, ClassMask: SpellMaskLavaBurst, }) + shaman.VolcanicRegalia4PT12Aura = shaman.RegisterAura(core.Aura{ Label: "Volcano", ActionID: core.ActionID{SpellID: 99207}, @@ -168,26 +193,10 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }) //in talents.go under lava surge proc - if shaman.ItemSwap.IsEnabled() { - shaman.RegisterItemSwapCallback(core.ItemSetSlots, - func(sim *core.Simulation, _ proto.ItemSlot) { - hasT12Ele4pc := shaman.hasT12Ele4pc() - - if hasT12Ele4pc { - shaman.VolcanicRegalia4PT12Aura.Activate(sim) - } else { - shaman.VolcanicRegalia4PT12Aura.Deactivate(sim) - } - }) - } }, }, }) -func (shaman *Shaman) hasT12Ele2pc() bool { - return shaman.HasActiveSetBonus(itemSetVolcanicRegaliaName, 2) -} - func (shaman *Shaman) hasT12Ele4pc() bool { return shaman.HasActiveSetBonus(itemSetVolcanicRegaliaName, 4) } @@ -200,7 +209,30 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ Name: itemSetSpiritwalkersRegaliaName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { - //In talents.go under elemental mastery + shaman := agent.(ShamanAgent).GetShaman() + + aura := shaman.RegisterAura(core.Aura{ + Label: "Fury of the Ancestors", + ActionID: core.ActionID{SpellID: 105779}, + Duration: 15 * time.Second, + OnGain: func(aura *core.Aura, sim *core.Simulation) { + shaman.AddStatDynamic(sim, stats.MasteryRating, 2000) + }, + OnExpire: func(aura *core.Aura, sim *core.Simulation) { + shaman.AddStatDynamic(sim, stats.MasteryRating, -2000) + }, + }) + + shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersRegaliaName, 4, core.ProcTrigger{ + Name: "Item - Shaman T13 Elemental 2P Bonus (Elemental Mastery)", + ActionID: core.ActionID{SpellID: 105780}, + ClassSpellMask: SpellMaskElementalMastery, + Callback: core.CallbackOnCastComplete, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) + }, + }, nil) + }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() @@ -215,45 +247,20 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ shaman.AddStatDynamic(sim, stats.HasteRating, float64(changedHasteRating)) }, }) - aura := shaman.RegisterAura(core.Aura{ - Label: "Spiritwalker's Regalia 4P", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - //TODO does dtr overloads proc this ? - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask&SpellMaskOverload > 0 { - procAura.Activate(sim) - procAura.AddStack(sim) - } - }, - }) - - if shaman.ItemSwap.IsEnabled() { - shaman.RegisterItemSwapCallback(core.ItemSetSlots, - func(sim *core.Simulation, _ proto.ItemSlot) { - hasT13Ele4pc := shaman.hasT13Ele4pc() - if hasT13Ele4pc { - aura.Activate(sim) - } else { - aura.Deactivate(sim) - } - }) - } + shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersRegaliaName, 4, core.ProcTrigger{ + Name: "Spiritwalker's Regalia 4P", + ClassSpellMask: SpellMaskOverload, + Callback: core.CallbackOnCastComplete, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procAura.Activate(sim) + procAura.AddStack(sim) + }, + }, nil) }, }, }) -func (shaman *Shaman) hasT13Ele2pc() bool { - return shaman.HasActiveSetBonus(itemSetSpiritwalkersRegaliaName, 2) -} - -func (shaman *Shaman) hasT13Ele4pc() bool { - return shaman.HasActiveSetBonus(itemSetSpiritwalkersRegaliaName, 4) -} - // T13 Resto // (2) Set: After using Mana Tide Totem, the cost of your healing spells are reduced by 25% for 15 sec. // (4) Set: Increases the duration of Spiritwalker's Grace by 5 sec, and you gain 30% haste while Spiritwalker's grace is active. @@ -268,7 +275,7 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ shaman := agent.(ShamanAgent).GetShaman() hasteMulti := 1.30 - shaman.SpiritwalkersVestments4PT13Aura = shaman.RegisterAura(core.Aura{ + aura := shaman.RegisterAura(core.Aura{ Label: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace)", ActionID: core.ActionID{SpellID: 105876}, Duration: shaman.spiritwalkersGraceBaseDuration() + 5*time.Second, @@ -282,46 +289,77 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ }, }) - if shaman.ItemSwap.IsEnabled() { - shaman.RegisterItemSwapCallback(core.ItemSetSlots, - func(sim *core.Simulation, _ proto.ItemSlot) { - hasT13Resto4pc := shaman.hasT13Resto4pc() - if hasT13Resto4pc { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second - } else { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() - } - }) - } + shaman.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(SpellMaskSpiritwalkersGrace) { + return + } + + shaman.MakeStaticEffectForSetBonus(itemSetSpiritwalkersVestmentsName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, _ *core.Aura) { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second + }, + OnExpire: func(_ *core.Simulation, _ *core.Aura) { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + }, + }) + + shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersVestmentsName, 4, core.ProcTrigger{ + Name: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace) - Proc", + ActionID: core.ActionID{SpellID: 105876}, + ClassSpellMask: SpellMaskSpiritwalkersGrace, + Callback: core.CallbackOnApplyEffects, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) + }, + }, nil) + }) + }, }, }) -func (shaman *Shaman) hasT13Resto4pc() bool { - return shaman.HasActiveSetBonus(itemSetSpiritwalkersVestmentsName, 4) -} - // T11 enh // (2) Set: Increases damage done by your Lava Lash and Stormstrike abilities by 10%. // (4) Set: Increases the critical strike chance of your Lightning Bolt spell by 10%. +var itemSetRagingElementsBattlegearName = "Battlegear of the Raging Elements" var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Battlegear of the Raging Elements", + Name: itemSetRagingElementsBattlegearName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + shaman := agent.(ShamanAgent).GetShaman() + + setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, FloatValue: .10, ClassMask: SpellMaskLavaLash | SpellMaskStormstrike, }) + + shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsBattlegearName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(_ *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, 4: func(agent core.Agent) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + shaman := agent.(ShamanAgent).GetShaman() + + setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskLightningBolt, }) + + shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsBattlegearName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(_ *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, }, }) @@ -336,13 +374,12 @@ func tier12StormstrikeBonus(_ *core.Simulation, spell *core.Spell, _ *core.Attac // T12 enh // (2) Set: Your Lava Lash gains an additional 5% damage increase per application of Searing Flames on the target. // (4) Set: Your Stormstrike ability also causes the target to take 6% increased damage from your Fire Nova, Flame Shock, Flametongue Weapon, Lava Burst, Lava Lash, and Unleash Flame abilities. +var itemSetVolcanicBattlegearName = "Volcanic Battlegear" var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Volcanic Battlegear", + Name: itemSetVolcanicBattlegearName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { - shaman := agent.(ShamanAgent).GetShaman() - - shaman.SearingFlamesMultiplier += 0.05 + // Implemented in lavalash.go }, 4: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() @@ -361,8 +398,8 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ }) }) - core.MakeProcTriggerAura(&shaman.Unit, core.ProcTrigger{ - Name: "Stormfire Trigger", + shaman.MakeProcTriggerAuraForSetBonus(itemSetVolcanicBattlegearName, 4, core.ProcTrigger{ + Name: "Item - Shaman T12 Enhancement 4P Bonus", ActionID: core.ActionID{SpellID: 99213}, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskStormstrikeCast, @@ -372,7 +409,7 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ stormFire := stormFireAuras.Get(result.Target) stormFire.Activate(sim) }, - }) + }, nil) }, }, }) @@ -380,8 +417,9 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ // T13 enh // 2 pieces: While you have any stacks of Maelstrom Weapon, your Lightning Bolt, Chain Lightning, and healing spells deal 20% more healing or damage. // 4 pieces: Your Feral Spirits have a 45% chance to grant you a charge of Maelstrom Weapon each time they deal damage. +var itemSetSpiritwalkersBattlegearName = "Spiritwalker's Battlegear" var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Spiritwalker's Battlegear", + Name: itemSetSpiritwalkersBattlegearName, Bonuses: map[int32]core.ApplyEffect{ 2: func(agent core.Agent) { shaman := agent.(ShamanAgent).GetShaman() @@ -393,7 +431,7 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ // Item sets are registered before talents, so MaelstromWeaponAura doesn't exist yet // Therefore we need to react on Feral Spirit registration to apply the logic shaman.OnSpellRegistered(func(spell *core.Spell) { - if spell.ClassSpellMask&SpellMaskFeralSpirit == 0 { + if !spell.Matches(SpellMaskFeralSpirit) { return } @@ -418,7 +456,9 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ }) shaman.MaelstromWeaponAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - temporalMaelstrom.Activate(sim) + if shaman.HasActiveSetBonus(itemSetSpiritwalkersBattlegearName, 2) { + temporalMaelstrom.Activate(sim) + } }) shaman.MaelstromWeaponAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { @@ -432,9 +472,10 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ if !shaman.Talents.FeralSpirit || shaman.Talents.MaelstromWeapon == 0 { return } - - for _, wolf := range []*core.Unit{&shaman.SpiritWolves.SpiritWolf1.Unit, &shaman.SpiritWolves.SpiritWolf2.Unit} { - core.MakeProcTriggerAura(wolf, core.ProcTrigger{ + // var wolfProctriggerAura *core.Aura + spiritWolves := []*SpiritWolf{shaman.SpiritWolves.SpiritWolf1, shaman.SpiritWolves.SpiritWolf2} + for _, wolf := range spiritWolves { + shaman.MakeProcTriggerAuraForSetBonusWithUnit(itemSetSpiritwalkersBattlegearName, 4, &wolf.Unit, core.ProcTrigger{ Name: "Spiritwalker's Battlegear 4pc" + shaman.Label, ActionID: core.ActionID{SpellID: 105872}, Callback: core.CallbackOnSpellHitDealt, @@ -446,6 +487,20 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ shaman.MaelstromWeaponAura.Activate(sim) shaman.MaelstromWeaponAura.AddStack(sim) }, + }, &core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, aura *core.Aura) { + wolf.Pet.OnPetEnable = func(sim *core.Simulation) { + aura.Activate(sim) + } + wolf.Pet.OnPetDisable = func(sim *core.Simulation) { + aura.Deactivate(sim) + } + }, + OnExpire: func(sim *core.Simulation, aura *core.Aura) { + aura.Deactivate(sim) + wolf.Pet.OnPetEnable = nil + wolf.Pet.OnPetDisable = nil + }, }) } }, diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index ae6b6b3893..013ecd469b 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -173,8 +173,7 @@ type Shaman struct { waterShieldManaMetrics *core.ResourceMetrics - VolcanicRegalia4PT12Aura *core.Aura - SpiritwalkersVestments4PT13Aura *core.Aura + VolcanicRegalia4PT12Aura *core.Aura useDragonSoul_2PT12 bool } @@ -357,6 +356,8 @@ const ( SpellMaskEarthquake SpellMaskFlametongueWeapon SpellMaskFeralSpirit + SpellMaskElementalMastery + SpellMaskSpiritwalkersGrace SpellMaskStormstrike = SpellMaskStormstrikeCast | SpellMaskStormstrikeDamage SpellMaskFlameShock = SpellMaskFlameShockDirect | SpellMaskFlameShockDot diff --git a/sim/shaman/spiritwalkers_grace.go b/sim/shaman/spiritwalkers_grace.go index f0ed602110..2858742c1d 100644 --- a/sim/shaman/spiritwalkers_grace.go +++ b/sim/shaman/spiritwalkers_grace.go @@ -24,9 +24,6 @@ func (shaman *Shaman) registerSpiritwalkersGraceSpell() { Duration: 15 * time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { castWhileMovingMod.Activate() - if shaman.hasT13Resto4pc() { - shaman.SpiritwalkersVestments4PT13Aura.Activate(sim) - } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { castWhileMovingMod.Deactivate() @@ -34,9 +31,10 @@ func (shaman *Shaman) registerSpiritwalkersGraceSpell() { }) shaman.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolNature, - Flags: core.SpellFlagAPL, + ActionID: actionID, + SpellSchool: core.SpellSchoolNature, + Flags: core.SpellFlagAPL, + ClassSpellMask: SpellMaskSpiritwalkersGrace, ManaCost: core.ManaCostOptions{ BaseCost: 0.12, diff --git a/sim/shaman/talents.go b/sim/shaman/talents.go index cbdb385712..cdd6a238e5 100644 --- a/sim/shaman/talents.go +++ b/sim/shaman/talents.go @@ -397,16 +397,10 @@ func (shaman *Shaman) registerElementalMasteryCD() { OnGain: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(1.20) damageMod.Activate() - if shaman.hasT13Ele2pc() { - shaman.AddStatDynamic(sim, stats.MasteryRating, 2000) - } }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(1 / 1.20) damageMod.Deactivate() - if shaman.hasT13Ele2pc() { - shaman.AddStatDynamic(sim, stats.MasteryRating, -2000) - } }, }) @@ -441,8 +435,8 @@ func (shaman *Shaman) registerElementalMasteryCD() { }) eleMastSpell := shaman.RegisterSpell(core.SpellConfig{ - ActionID: eleMasterActionID, - Flags: core.SpellFlagNoOnCastComplete, + ActionID: eleMasterActionID, + ClassSpellMask: SpellMaskElementalMastery, Cast: core.CastConfig{ CD: core.Cooldown{ Timer: cdTimer, From cdcad570548db5db1c980d9e00aa5c5830db5215 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 22:35:57 +0100 Subject: [PATCH 044/127] Add SetToSortedSlice helper for item_swaps --- sim/core/item_swaps.go | 23 +++++++---------------- sim/core/utils.go | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 386e199be0..a29a6ddc7a 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,7 +1,6 @@ package core import ( - "slices" "time" "github.com/wowsims/cata/sim/core/proto" @@ -36,7 +35,6 @@ type ItemSwap struct { * we'll need to figure out something cleaner as this will be quite error-prone **/ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMultiplier float64, ohCritMultiplier float64, rangedCritMultiplier float64) { - var slots []proto.ItemSlot var swapItems Equipment hasItemSwap := make(map[proto.ItemSlot]bool) @@ -50,28 +48,21 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti hasMh := character.HasMHWeapon() hasOh := character.HasOHWeapon() - for slot, hasSlotItemSwap := range hasItemSwap { - if hasSlotItemSwap { - slots = append(slots, slot) - } - } - // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - if !hasItemSwap[proto.ItemSlot_ItemSlotMainHand] && hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh { - slots = append(slots, proto.ItemSlot_ItemSlotMainHand) + if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh { + hasItemSwap[proto.ItemSlot_ItemSlotMainHand] = true } - if !hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && has2H && hasOh { - slots = append(slots, proto.ItemSlot_ItemSlotOffHand) + + if has2H && hasOh { + hasItemSwap[proto.ItemSlot_ItemSlotOffHand] = true } + slots := SetToSortedSlice(hasItemSwap) + if len(slots) == 0 { return } - slices.SortFunc(slots, func(a, b proto.ItemSlot) int { - return int(a - b) - }) - character.ItemSwap = ItemSwap{ mhCritMultiplier: mhCritMultiplier, ohCritMultiplier: ohCritMultiplier, diff --git a/sim/core/utils.go b/sim/core/utils.go index 17f0915607..038dde506d 100644 --- a/sim/core/utils.go +++ b/sim/core/utils.go @@ -1,8 +1,10 @@ package core import ( + "cmp" "hash/fnv" "math" + "slices" "strings" "time" @@ -197,6 +199,18 @@ func CheckSliceOverlap[T comparable](s1 []T, s2 []T) bool { return false } +// Allows Go maps to be used like the "Set" type commonly found in other languages +func SetToSortedSlice[K cmp.Ordered](src map[K]bool) []K { + dst := make([]K, 0, len(src)) + for k, exists := range src { + if exists { + dst = append(dst, k) + } + } + slices.Sort(dst) + return dst +} + func MasteryRatingToMasteryPoints(masteryRating float64) float64 { return masteryRating / MasteryRatingPerMasteryPoint } From 159f6e961e41b365f39721af0916f26377dd68d7 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 18 Dec 2024 23:25:23 +0100 Subject: [PATCH 045/127] Add setName to ItemSet Apply Effect --- sim/common/cata/stat_bonus_procs.go | 4 +- sim/common/tbc/melee_sets.go | 16 +- sim/common/wotlk/_item_sets.go | 14 +- sim/core/item_sets.go | 11 +- sim/death_knight/items.go | 30 +- sim/druid/items.go | 36 +- sim/hunter/cata_items.go | 24 +- sim/hunter/wotlk_items.go | 6 +- sim/mage/items.go | 18 +- sim/paladin/items.go | 42 +- sim/priest/items.go | 78 +-- sim/rogue/items.go | 36 +- sim/shaman/_items_wotlk.go | 60 +-- sim/shaman/chain_lightning.go | 2 +- sim/shaman/items.go | 112 ++-- sim/warlock/items.go | 24 +- sim/warrior/_items.go | 66 +-- sim/warrior/fury/TestFury.results | 768 ++++++++++++++-------------- sim/warrior/items.go | 183 +++++-- 19 files changed, 799 insertions(+), 731 deletions(-) diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 40d85d581b..64eaad5f61 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -1261,8 +1261,8 @@ func init() { var ItemSetAgonyAndTorment = core.NewItemSet(core.ItemSet{ Name: "Agony and Torment", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() procAura := character.NewTemporaryStatsAura( diff --git a/sim/common/tbc/melee_sets.go b/sim/common/tbc/melee_sets.go index d78458d831..09b51cab8b 100644 --- a/sim/common/tbc/melee_sets.go +++ b/sim/common/tbc/melee_sets.go @@ -12,8 +12,8 @@ import ( var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ Name: "The Fists of Fury", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() procSpell := character.RegisterSpell(core.SpellConfig{ @@ -54,8 +54,8 @@ var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ Name: "Stormshroud Armor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(a core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(a core.Agent, _ string) { char := a.GetCharacter() proc := char.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 18980}, @@ -87,7 +87,7 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ }, }) }, - 3: func(a core.Agent) { + 3: func(a core.Agent, _ string) { char := a.GetCharacter() if !char.HasEnergyBar() { return @@ -118,7 +118,7 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ }) }, - 4: func(a core.Agent) { + 4: func(a core.Agent, _ string) { a.GetCharacter().AddStat(stats.AttackPower, 14) }, }, @@ -126,8 +126,8 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ var ItemSetTwinBladesOfAzzinoth = core.NewItemSet(core.ItemSet{ Name: "The Twin Blades of Azzinoth", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeDemon { diff --git a/sim/common/wotlk/_item_sets.go b/sim/common/wotlk/_item_sets.go index efa02beb4b..d41e38dc94 100644 --- a/sim/common/wotlk/_item_sets.go +++ b/sim/common/wotlk/_item_sets.go @@ -12,8 +12,8 @@ import ( var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ Name: "Purified Shard of the Gods", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 222}) applyShardOfTheGodsDamageProc(agent.GetCharacter(), false) applyShardOfTheGodsHealingProc(agent.GetCharacter(), false) @@ -23,8 +23,8 @@ var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ var ItemSetShinyShardOfTheGods = core.NewItemSet(core.ItemSet{ Name: "Shiny Shard of the Gods", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 250}) applyShardOfTheGodsDamageProc(agent.GetCharacter(), true) applyShardOfTheGodsHealingProc(agent.GetCharacter(), true) @@ -121,8 +121,8 @@ func applyShardOfTheGodsHealingProc(character *core.Character, isHeroic bool) { func makeUndeadSet(setName string) *core.ItemSet { return core.NewItemSet(core.ItemSet{ Name: setName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { character.PseudoStats.DamageDealtMultiplier *= 1.01 @@ -134,7 +134,7 @@ func makeUndeadSet(setName string) *core.ItemSet { character.PseudoStats.DamageDealtMultiplier *= 1.02 / 1.01 } }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { character.PseudoStats.DamageDealtMultiplier *= 1.03 / 1.02 diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index cb971d3d49..fff97638dd 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -7,6 +7,7 @@ import ( "github.com/wowsims/cata/sim/core/proto" ) +type ApplySetItemEffect func(agent Agent, setName string) type ItemSet struct { ID int32 Name string @@ -16,7 +17,7 @@ type ItemSet struct { // before the Sim starts. // // The function should apply any benefits provided by the set bonus. - Bonuses map[int32]ApplyEffect + Bonuses map[int32]ApplySetItemEffect } var ItemSetSlots = []proto.ItemSlot{ @@ -112,7 +113,7 @@ type SetBonus struct { NumPieces int32 // Function for applying the effects of this set bonus. - BonusEffect ApplyEffect + BonusEffect ApplySetItemEffect } // Returns a list describing all active set bonuses. @@ -182,7 +183,7 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { activeSetBonuses := character.GetActiveSetBonuses() for _, activeSetBonus := range activeSetBonuses { - activeSetBonus.BonusEffect(agent) + activeSetBonus.BonusEffect(agent, activeSetBonus.Name) } if character.ItemSwap.IsEnabled() { @@ -191,7 +192,7 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { }) for _, unequippedSetBonus := range unequippedSetBonuses { - unequippedSetBonus.BonusEffect(agent) + unequippedSetBonus.BonusEffect(agent, unequippedSetBonus.Name) } } } @@ -252,7 +253,7 @@ type CustomSetBonusCallbackConfig struct { } // Adds a static effect that activates when the character has a set bonus. -func (character *Character) MakeStaticEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { +func (character *Character) MakeCallbackEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { if character.ItemSwap.IsEnabled() { character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, _ proto.ItemSlot) { if character.HasActiveSetBonus(setName, numPieces) { diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index b932201adb..92b438b25f 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -13,8 +13,8 @@ import ( // T11 - DPS var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the critical strike chance of your Death Coil and Frost Strike abilities by 5%. agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -22,7 +22,7 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ FloatValue: 5, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Each time you gain a Death Rune, you also gain 1% increased attack power for 30 sec. Stacks up to 3 times. // Also activated whenever KM procs character := agent.GetCharacter() @@ -64,8 +64,8 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ // T11 - Tank var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlearmor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the damage done by your Death Strike ability by 5%. agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, @@ -73,7 +73,7 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ FloatValue: 0.05, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the duration of your Icebound Fortitude ability by 50%. // Implemented in icebound_fortitude.go }, @@ -83,8 +83,8 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ // T12 - DPS var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { dk := agent.(DeathKnightAgent).GetDeathKnight() actionID := core.ActionID{SpellID: 98971} @@ -119,7 +119,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { dk := agent.(DeathKnightAgent).GetDeathKnight() damage := 0.0 @@ -167,8 +167,8 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ // T12 - Tank var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlearmor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { dk := agent.(DeathKnightAgent).GetDeathKnight() @@ -216,7 +216,7 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go }, @@ -226,12 +226,12 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ // T13 - DPS var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Necrotic Boneplate Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. // Spell: Runic Mastery (id: 105647) // Handled in talents_unholy.go:applyRunicEmpowerementCorruption() diff --git a/sim/druid/items.go b/sim/druid/items.go index 1dbf576abf..4b6dd826d5 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -11,11 +11,11 @@ import ( // T11 Feral var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Battlegarb", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Implemented in rake.go and lacerate.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() var apDepByStackCount = map[int32]*stats.StatDependency{} @@ -46,9 +46,9 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ // T11 Balance var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Regalia", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Increases the critical strike chance of your Insect Swarm and Moonfire spells by 5% - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -57,7 +57,7 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ }) }, // Whenever Eclipse triggers, your critical strike chance with spells is increased by 15% for 8 sec. Each critical strike you achieve reduces that bonus by 5% - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() tierSet4pMod := druid.AddDynamicMod(core.SpellModConfig{ @@ -101,8 +101,8 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ // T12 Feral var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Battlegarb", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // TODO: Verify behavior after PTR testing druid := agent.(DruidAgent).GetDruid() cata.RegisterIgniteEffect(&druid.Unit, cata.IgniteConfig{ @@ -122,7 +122,7 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Full implementation in berserk.go and barkskin.go druid := agent.(DruidAgent).GetDruid() druid.Feral4pT12Active = true @@ -151,9 +151,9 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ // T12 Balance var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Regalia", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // You have a chance to summon a Burning Treant to assist you in battle for 15 sec when you cast Wrath or Starfire. (Proc chance: 20%, 45s cooldown) - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() core.MakeProcTriggerAura(&druid.Unit, core.ProcTrigger{ @@ -169,7 +169,7 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ }) }, // While not in an Eclipse state, your Wrath generates 3 additional Lunar Energy and your Starfire generates 5 additional Solar Energy. - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() druid.OnSpellRegistered(func(spell *core.Spell) { @@ -194,12 +194,12 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ // T13 Balance var ItemSetDeepEarthRegalia = core.NewItemSet(core.ItemSet{ Name: "Deep Earth Regalia", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Insect Swarm increases all damage done by your Starfire, Starsurge, and Wrath spells against that target by 3% - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { }, // Reduces the cooldown of Starsurge by 5 sec and increases its damage by 10% - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() druid.AddStaticMod(core.SpellModConfig{ @@ -222,14 +222,14 @@ var ItemSetGladiatorsSanctuary = core.NewItemSet(core.ItemSet{ ID: 922, Name: "Gladiator's Sanctuary", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() druid.AddStats(stats.Stats{ stats.Agility: 70, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { druid := agent.(DruidAgent).GetDruid() druid.AddStats(stats.Stats{ stats.Agility: 90, diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 389600e1df..20fc0c29f1 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -31,8 +31,8 @@ func (hunter *Hunter) newFlamingArrowSpell(spellID int32) core.SpellConfig { var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ Name: "Flamewaker's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() var flamingArrowSpellForSteadyShot = hunter.RegisterSpell(hunter.newFlamingArrowSpell(56641)) @@ -59,7 +59,7 @@ var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() var baMod = hunter.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, @@ -116,11 +116,11 @@ var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ }) var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ Name: "Wyrmstalker Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Handled in Cobra and Steady code respectively }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() var chronoHunter = hunter.RegisterAura(core.Aura{ // 105919 Label: "Chronohunter", @@ -149,8 +149,8 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ }) var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ Name: "Lightning-Charged Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // 5% Crit on SS agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -158,7 +158,7 @@ var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ FloatValue: 5, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Cobra & Steady Shot < 0.2s cast time // Cannot be spell modded for now }, @@ -168,14 +168,14 @@ var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ ID: 920, Name: "Gladiator's Pursuit", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() hunter.AddStats(stats.Stats{ stats.Agility: 70, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() // Multiply focus regen 1.05 hunter.AddStats(stats.Stats{ diff --git a/sim/hunter/wotlk_items.go b/sim/hunter/wotlk_items.go index 33b035432a..24ccf966db 100644 --- a/sim/hunter/wotlk_items.go +++ b/sim/hunter/wotlk_items.go @@ -11,8 +11,8 @@ import ( var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Ahn'Kahar Blood Hunter's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() const procChance = 0.05 actionID := core.ActionID{SpellID: 70727} @@ -42,7 +42,7 @@ var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { hunter := agent.(HunterAgent).GetHunter() const procChance = 0.05 actionID := core.ActionID{SpellID: 70730} diff --git a/sim/mage/items.go b/sim/mage/items.go index 0eef5a410c..8064b382cb 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -10,8 +10,8 @@ import ( // T11 var ItemSetFirelordsVestments = core.NewItemSet(core.ItemSet{ Name: "Firelord's Vestments", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the critical strike chance of your Death Coil and Frost Strike abilities by 5%. agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -19,7 +19,7 @@ var ItemSetFirelordsVestments = core.NewItemSet(core.ItemSet{ FloatValue: 5, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { //Reduces cast time of Arcane Blast, Fireball, FFB, and Frostbolt by 10% agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, @@ -33,10 +33,10 @@ var ItemSetFirelordsVestments = core.NewItemSet(core.ItemSet{ // T12 var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ Name: "Firehawk Robes of Conflagration", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // You have a chance to summon a Mirror Image to assist you in battle for 15 sec when you cast Frostbolt, Fireball, Frostfire Bolt, or Arcane Blast. // (Proc chance: 20%, 45s cooldown) - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { mage := agent.(MageAgent).GetMage() core.MakeProcTriggerAura(&mage.Unit, core.ProcTrigger{ @@ -52,7 +52,7 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ }, // Your spells have an increased chance to trigger Brain Freeze or Hot Streak. // In addition, Arcane Power decreases the cost of your damaging spells by 10% instead of increasing their cost. - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Arcane Power Cost reduction implemented in: // talents_arcane.go#278 @@ -78,10 +78,10 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ // T13 var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ Name: "Time Lord's Regalia", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Your Arcane Blast has a 100% chance and your Fireball, Pyroblast, Frostfire Bolt, and Frostbolt spells have a 50% chance to grant Stolen Time, increasing your haste rating by 50 for 30 sec and stacking up to 10 times. // When Arcane Power, Combustion, or Icy Veins expires, all stacks of Stolen Time are lost. - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() mage := agent.(MageAgent).GetMage() @@ -118,7 +118,7 @@ var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ newStolenTimeTrigger(0.5, MageSpellFireball|MageSpellPyroblast|MageSpellFrostfireBolt|MageSpellFrostbolt) }, // Each stack of Stolen Time also reduces the cooldown of Arcane Power by 7 sec, Combustion by 5 sec, and Icy Veins by 15 sec. - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Cooldown reduction handlers can be found in: // combustion.go // talents_arcane.go diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 81f72cbc31..d6cc35da28 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -11,8 +11,8 @@ import ( // Tier 11 ret var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ Name: "Reinforced Sapphirium Battleplate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() paladin.AddStaticMod(core.SpellModConfig{ @@ -21,7 +21,7 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ FloatValue: 0.1, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Handled in inquisition.go paladin := agent.(PaladinAgent).GetPaladin() @@ -37,8 +37,8 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ // Tier 12 ret var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Immolation", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() cata.RegisterIgniteEffect(&paladin.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 35395}.WithTag(3), // actual 99092 @@ -58,7 +58,7 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Handled in talents_retribution.go paladin := agent.(PaladinAgent).GetPaladin() @@ -74,8 +74,8 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ // Tier 13 ret var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Radiant Glory", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() // Actual buff credited with the Holy Power gain is Virtuous Empowerment hpMetrics := paladin.NewHolyPowerMetrics(core.ActionID{SpellID: 105767}) @@ -113,7 +113,7 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() damageMod := paladin.AddDynamicMod(core.SpellModConfig{ @@ -153,13 +153,13 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsVindication = core.NewItemSet(core.ItemSet{ ID: 917, Name: "Gladiator's Vindication", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() paladin.AddStat(stats.Strength, 70) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() paladin.AddStat(stats.Strength, 90) @@ -188,8 +188,8 @@ func (paladin *Paladin) addBloodthirstyGloves() { // Tier 11 prot var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Reinforced Sapphirium Battlearmor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() paladin.AddStaticMod(core.SpellModConfig{ @@ -198,7 +198,7 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ FloatValue: 0.1, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Handled in guardian_of_ancient_kings.go }, }, @@ -207,8 +207,8 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ // Tier 12 prot var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battlearmor of Immolation", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() procDamage := 0.0 @@ -243,7 +243,7 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() flamingAegis := paladin.GetOrRegisterAura(core.Aura{ @@ -283,8 +283,8 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ // Tier 13 prot var ItemSetArmorOfRadiantGlory = core.NewItemSet(core.ItemSet{ Name: "Armor of Radiant Glory", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { paladin := agent.(PaladinAgent).GetPaladin() actionID := core.ActionID{SpellID: 105801} @@ -311,7 +311,7 @@ var ItemSetArmorOfRadiantGlory = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Divine Guardian not implemented since it's a raid cooldown and doesn't affect the Paladin }, }, diff --git a/sim/priest/items.go b/sim/priest/items.go index 1889d1e1f5..5d99ffffb1 100644 --- a/sim/priest/items.go +++ b/sim/priest/items.go @@ -9,8 +9,8 @@ import ( // var ItemSetVestmentsOfAbsolution = core.NewItemSet(core.ItemSet{ // Name: "Vestments of Absolution", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -18,7 +18,7 @@ import ( // ClassMask: PriestSpellPrayerOfHealing, // }) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -31,8 +31,8 @@ import ( // var ItemSetValorous = core.NewItemSet(core.ItemSet{ // Name: "Garb of Faith", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -40,7 +40,7 @@ import ( // ClassMask: PriestSpellMindBlast, // }) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -53,11 +53,11 @@ import ( // var ItemSetRegaliaOfFaith = core.NewItemSet(core.ItemSet{ // Name: "Regalia of Faith", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // // Not implemented // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -70,8 +70,8 @@ import ( // var ItemSetConquerorSanct = core.NewItemSet(core.ItemSet{ // Name: "Sanctification Garb", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -79,7 +79,7 @@ import ( // ClassMask: PriestSpellDevouringPlague, // }) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // priest := agent.(PriestAgent).GetPriest() // procAura := priest.NewTemporaryStatsAura("Devious Mind", core.ActionID{SpellID: 64907}, stats.Stats{stats.SpellHaste: 240}, time.Second*4) @@ -102,8 +102,8 @@ import ( // var ItemSetSanctificationRegalia = core.NewItemSet(core.ItemSet{ // Name: "Sanctification Regalia", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -111,7 +111,7 @@ import ( // ClassMask: PriestSpellPrayerOfHealing, // }) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // priest := agent.(PriestAgent).GetPriest() // procAura := priest.NewTemporaryStatsAura("Sanctification Reglia 4pc", core.ActionID{SpellID: 64912}, stats.Stats{stats.SpellPower: 250}, time.Second*5) @@ -135,12 +135,12 @@ import ( // var ItemSetZabras = core.NewItemSet(core.ItemSet{ // Name: "Zabra's Regalia", // AlternativeName: "Velen's Regalia", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // // Modifies dot length, need to implement later again // // Requieres tests and proper modification of SpellMods // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -154,8 +154,8 @@ import ( // var ItemSetZabrasRaiment = core.NewItemSet(core.ItemSet{ // Name: "Zabra's Raiment", // AlternativeName: "Velen's Raiment", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, _ string) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -163,7 +163,7 @@ import ( // ClassMask: PriestSpellPrayerOfMending, // }) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, _ string) { // // changed in cata to flat 5% heal // character := agent.GetCharacter() // character.PseudoStats.DamageDealtMultiplier *= 1.05 @@ -173,8 +173,8 @@ import ( var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{ Name: "Crimson Acolyte's Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -182,7 +182,7 @@ var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{ ClassMask: PriestSpellShadowWordPain | PriestSpellDevouringPlague | PriestSpellVampiricTouch | PriestSpellImprovedDevouringPlague, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_DotTickLength_Flat, @@ -195,8 +195,8 @@ var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ Name: "Crimson Acolyte's Raiment", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { priest := agent.(PriestAgent).GetPriest() var curAmount float64 @@ -242,7 +242,7 @@ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, @@ -261,12 +261,12 @@ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsInvestiture = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Investiture", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.ResilienceRating, 400) agent.GetCharacter().AddStat(stats.Intellect, 70) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.Intellect, 90) }, }, @@ -274,12 +274,12 @@ var ItemSetGladiatorsInvestiture = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsRaiment = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Raiment", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.ResilienceRating, 400) agent.GetCharacter().AddStat(stats.Intellect, 70) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.Intellect, 90) }, }, @@ -288,8 +288,8 @@ var ItemSetGladiatorsRaiment = core.NewItemSet(core.ItemSet{ // T11 - Shadow var ItemSetMercurialRegalia = core.NewItemSet(core.ItemSet{ Name: "Mercurial Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -297,7 +297,7 @@ var ItemSetMercurialRegalia = core.NewItemSet(core.ItemSet{ ClassMask: PriestSpellMindFlay | PriestSpellMindSear, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { character := agent.GetCharacter() character.AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, @@ -311,8 +311,8 @@ var ItemSetMercurialRegalia = core.NewItemSet(core.ItemSet{ // T12 - Shadow var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ Name: "Regalia of the Cleansing Flame", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Fiend deals 20% extra damage as fire damage and cooldown reduced by 75 seconds character := agent.GetCharacter() @@ -366,7 +366,7 @@ var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ }, })) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { character := agent.GetCharacter() mbMod := character.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, diff --git a/sim/rogue/items.go b/sim/rogue/items.go index 467922a0b8..fc2e0fea3e 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -12,8 +12,8 @@ import ( var Tier11 = core.NewItemSet(core.ItemSet{ Name: "Wind Dancer's Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // +5% Crit to Backstab, Mutilate, and Sinister Strike agent.GetCharacter().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, @@ -21,7 +21,7 @@ var Tier11 = core.NewItemSet(core.ItemSet{ ClassMask: RogueSpellBackstab | RogueSpellMutilate | RogueSpellSinisterStrike, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // 1% Chance on Auto Attack to increase crit of next Evis or Envenom by +100% for 15 seconds rogue := agent.(RogueAgent).GetRogue() @@ -77,8 +77,8 @@ func MakeT12StatAura(action core.ActionID, stat stats.Stat, name string) core.Au var Tier12 = core.NewItemSet(core.ItemSet{ Name: "Vestments of the Dark Phoenix", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Your melee critical strikes deal 6% additional damage as Fire over 4 sec. // Rolls like ignite // Tentatively, this is just Ignite. Testing required to validate behavior. @@ -100,7 +100,7 @@ var Tier12 = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Your Tricks of the Trade ability also causes you to gain a 25% increase to Haste, Mastery, or Critical Strike chosen at random for 30 sec. // Cannot pick the same stat twice in a row. No other logic appears to exist // Not a dynamic 1.25% mod; snapshots stats and applies that much as bonus rating for duration @@ -136,10 +136,10 @@ var Tier12 = core.NewItemSet(core.ItemSet{ var Tier13 = core.NewItemSet(core.ItemSet{ Name: "Blackfang Battleweave", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // After triggering Tricks of the Trade, your abilities cost 20% less energy for 6 sec. // This is implemented as it is because the 20% reduction is applied -before- talents/glyphs/passives, which is not how SpellMod_PowerCost_Pct operates - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { rogue := agent.(RogueAgent).GetRogue() bonus60e := rogue.AddDynamicMod(core.SpellModConfig{ @@ -211,7 +211,7 @@ var Tier13 = core.NewItemSet(core.ItemSet{ }, // Increases the duration of Shadow Dance by 2 sec, Adrenaline Rush by 3 sec, and Vendetta by 9 sec. // Implemented in respective spells - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { }, }, @@ -234,9 +234,9 @@ func getFangsProcRate(character *core.Character) float64 { // Fear + Vengeance var JawsOfRetribution = core.NewItemSet(core.ItemSet{ Name: "Jaws of Retribution", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Your melee attacks have a chance to grant Suffering, increasing your Agility by 2, stacking up to 50 times. - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ Label: "Suffering", ActionID: core.ActionID{SpellID: 109959}, @@ -269,9 +269,9 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ // Sleeper + Dreamer var MawOfOblivion = core.NewItemSet(core.ItemSet{ Name: "Maw of Oblivion", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Your melee attacks have a chance to grant Nightmare, increasing your Agility by 5, stacking up to 50 times. - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ Label: "Nightmare", ActionID: core.ActionID{SpellID: 109955}, @@ -304,14 +304,14 @@ var MawOfOblivion = core.NewItemSet(core.ItemSet{ // Golad + Tiriosh var FangsOfTheFather = core.NewItemSet(core.ItemSet{ Name: "Fangs of the Father", - Bonuses: map[int32]core.ApplyEffect{ + Bonuses: map[int32]core.ApplySetItemEffect{ // Your melee attacks have a chance to grant Shadows of the Destroyer, increasing your Agility by 17, stacking up to 50 times. // Each application past 30 grants an increasing chance to trigger Fury of the Destroyer. // When triggered, this consumes all applications of Shadows of the Destroyer, immediately granting 5 combo points and cause your finishing moves to generate 5 combo points. // Lasts 6 sec. // Tooltip is deceptive. The stacks of Shadows of the Destroyer only clear when the 5 Combo Point effect ends - 2: func(agent core.Agent) { + 2: func(agent core.Agent, _ string) { cpMetrics := agent.GetCharacter().NewComboPointMetrics(core.ActionID{SpellID: 109950}) agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ @@ -376,11 +376,11 @@ var FangsOfTheFather = core.NewItemSet(core.ItemSet{ var CataPVPSet = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Vestments", ID: 914, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.Agility, 70) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { agent.GetCharacter().AddStat(stats.Agility, 90) // 10 maximum energy added in rogue.go }, diff --git a/sim/shaman/_items_wotlk.go b/sim/shaman/_items_wotlk.go index 93153ccdae..6cbe4f98c5 100644 --- a/sim/shaman/_items_wotlk.go +++ b/sim/shaman/_items_wotlk.go @@ -11,11 +11,11 @@ import ( var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ Name: "Thrall's Regalia", AlternativeName: "Nobundo's Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // shocks.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // lavaburst.go }, }, @@ -23,22 +23,22 @@ var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ var ItemSetEarthShatterGarb = core.NewItemSet(core.ItemSet{ Name: "Earthshatter Garb", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Reduces LB cost by 5% }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // lavaburst crit strike dmg +10% }, }, }) var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ Name: "Worldbreaker Garb", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // shocks.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // lightning_bolt.go }, }, @@ -46,11 +46,11 @@ var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ var ItemSetFrostWitchRegalia = core.NewItemSet(core.ItemSet{ Name: "Frost Witch's Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // This is implemented in talents.go so that the aura has easy access to the elemental mastery MCD. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { shaman := agent.(ShamanAgent).GetShaman() shaman.RegisterAura(core.Aura{ Label: "Shaman T10 Elemental 4P Bonus", @@ -199,11 +199,11 @@ func init() { var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ Name: "Earthshatter Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // 10% damage to lightning shield. implemented in lightning_shield.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // +5% to flurry. implemented in talents.go }, }, @@ -211,11 +211,11 @@ var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Worldbreaker Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { //20% damage to stormstrike and lava lash }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { //20% increase to maelstrom proc rate }, }, @@ -224,11 +224,11 @@ var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Thrall's Battlegear", AlternativeName: "Nobundo's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // +3% increase to static shock proc rate }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // +25% shock damage }, }, @@ -236,11 +236,11 @@ var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ Name: "Frost Witch's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // TODO: add 12% damage buff to shamanistic rage }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // TODO: at 5 maelstrom stacks, 15% chance to gain +20% attack power for 10s }, }, @@ -248,13 +248,13 @@ var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Earthshaker", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.AttackPower, 50) shaman.AddStat(stats.Resilience, 100) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.AttackPower, 150) // also -2s on stormstrike CD @@ -264,13 +264,13 @@ var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsWartide = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Wartide", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.SpellPower, 29) shaman.AddStat(stats.Resilience, 100) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.SpellPower, 88) }, diff --git a/sim/shaman/chain_lightning.go b/sim/shaman/chain_lightning.go index 48d0232719..ad96ca85dd 100644 --- a/sim/shaman/chain_lightning.go +++ b/sim/shaman/chain_lightning.go @@ -35,7 +35,7 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe numHits = min(numHits, shaman.Env.GetNumTargets()) spellConfig.ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - bounceReduction := core.TernaryFloat64(shaman.HasActiveSetBonus(itemSetTidefuryName, 2) && !isElementalOverload, 0.83, 0.7) + bounceReduction := core.TernaryFloat64(shaman.HasActiveSetBonus(ItemSetTidefury.Name, 2) && !isElementalOverload, 0.83, 0.7) baseDamage := shaman.CalcAndRollDamageRange(sim, 1.08800005913, 0.13300000131) curTarget := target diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 070e460120..1281a4b8e2 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -11,18 +11,17 @@ import ( // Dungeon Set 3 Tidefury Raiment // (2) Set: Your Chain Lightning Spell now only loses 17% of its damage per jump. // (4) Set: Your Water Shield ability grants an additional 56 mana each time it triggers and an additional 3 mana per 5 sec. -var itemSetTidefuryName = "Tidefury Raiment" var ItemSetTidefury = core.NewItemSet(core.ItemSet{ - Name: itemSetTidefuryName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Tidefury Raiment", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { // Handled in chain_lightning.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { - shaman.MakeStaticEffectForSetBonus(itemSetTidefuryName, 2, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ OnGain: func(sim *core.Simulation, _ *core.Aura) { // If Sim is undefined ItemSwap is disabled so we can add this statically if sim == nil { @@ -43,8 +42,8 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // var ItemSetSkyshatterRegalia = core.NewItemSet(core.ItemSet{ // Name: "Skyshatter Regalia", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, setName string) { // shaman := agent.(ShamanAgent).GetShaman() // if shaman.Totems.Air == proto.AirTotem_NoAirTotem || @@ -58,7 +57,7 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // shaman.AddStat(stats.SpellCrit, 35) // shaman.AddStat(stats.SpellPower, 45) // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, setName string) { // // Increases damage done by Lightning Bolt by 5%. // // Implemented in lightning_bolt.go. // }, @@ -71,11 +70,11 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // var ItemSetSkyshatterHarness = core.NewItemSet(core.ItemSet{ // Name: "Skyshatter Harness", -// Bonuses: map[int32]core.ApplyEffect{ -// 2: func(agent core.Agent) { +// Bonuses: map[int32]core.ApplySetItemEffect{ +// 2: func(agent core.Agent, setName string) { // // implemented in shocks.go // }, -// 4: func(agent core.Agent) { +// 4: func(agent core.Agent, setName string) { // // implemented in stormstrike.go // }, // }, @@ -84,11 +83,10 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // T11 elem // (2) Set: Increases the critical strike chance of your Flame Shock spell by 10%. // (4) Set: Reduces the cast time of your Lightning Bolt spell by 10%. -var itemSetRagingElementsRegaliaName = "Regalia of the Raging Elements" var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ - Name: itemSetRagingElementsRegaliaName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Regalia of the Raging Elements", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { shaman := agent.GetCharacter() setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ @@ -97,7 +95,7 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ ClassMask: SpellMaskFlameShock, }) - shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsRegaliaName, 2, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ OnGain: func(sim *core.Simulation, _ *core.Aura) { setBonusDep.Activate() }, @@ -106,7 +104,7 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.GetCharacter() setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ @@ -115,7 +113,7 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ ClassMask: SpellMaskLightningBolt, }) - shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsRegaliaName, 4, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ OnGain: func(sim *core.Simulation, _ *core.Aura) { setBonusDep.Activate() }, @@ -130,11 +128,10 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ // T12 elem // (2) Set: Your Lightning Bolt has a 30% chance to reduce the remaining cooldown on your Fire Elemental Totem by 4 sec. // (4) Set: Your Lava Surge talent also makes Lava Burst instant when it triggers. -var itemSetVolcanicRegaliaName = "Volcanic Regalia" var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ - Name: itemSetVolcanicRegaliaName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Volcanic Regalia", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() var procConfig core.ProcTrigger @@ -168,10 +165,10 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ } } - shaman.MakeProcTriggerAuraForSetBonus(itemSetVolcanicRegaliaName, 2, procConfig, nil) + shaman.MakeProcTriggerAuraForSetBonus(setName, 2, procConfig, nil) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() instantLavaSurgeMod := shaman.AddDynamicMod(core.SpellModConfig{ @@ -198,17 +195,16 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }) func (shaman *Shaman) hasT12Ele4pc() bool { - return shaman.HasActiveSetBonus(itemSetVolcanicRegaliaName, 4) + return shaman.HasActiveSetBonus(ItemSetVolcanicRegalia.Name, 4) } // T13 elem // (2) Set: Elemental Mastery also grants you 2000 mastery rating 15 sec. // (4) Set: Each time Elemental Overload triggers, you gain 250 haste rating for 4 sec, stacking up to 3 times. -var itemSetSpiritwalkersRegaliaName = "Spiritwalker's Regalia" var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ - Name: itemSetSpiritwalkersRegaliaName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Spiritwalker's Regalia", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() aura := shaman.RegisterAura(core.Aura{ @@ -223,7 +219,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, }) - shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersRegaliaName, 4, core.ProcTrigger{ + shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Item - Shaman T13 Elemental 2P Bonus (Elemental Mastery)", ActionID: core.ActionID{SpellID: 105780}, ClassSpellMask: SpellMaskElementalMastery, @@ -234,7 +230,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, nil) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() procAura := shaman.RegisterAura(core.Aura{ @@ -248,7 +244,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, }) - shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersRegaliaName, 4, core.ProcTrigger{ + shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Spiritwalker's Regalia 4P", ClassSpellMask: SpellMaskOverload, Callback: core.CallbackOnCastComplete, @@ -264,14 +260,13 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ // T13 Resto // (2) Set: After using Mana Tide Totem, the cost of your healing spells are reduced by 25% for 15 sec. // (4) Set: Increases the duration of Spiritwalker's Grace by 5 sec, and you gain 30% haste while Spiritwalker's grace is active. -var itemSetSpiritwalkersVestmentsName = "Spiritwalker's Vestments" var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ - Name: itemSetSpiritwalkersVestmentsName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Spiritwalker's Vestments", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { // Not implemented }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() hasteMulti := 1.30 @@ -294,7 +289,7 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ return } - shaman.MakeStaticEffectForSetBonus(itemSetSpiritwalkersVestmentsName, 2, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ OnGain: func(_ *core.Simulation, _ *core.Aura) { shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second }, @@ -303,7 +298,7 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ }, }) - shaman.MakeProcTriggerAuraForSetBonus(itemSetSpiritwalkersVestmentsName, 4, core.ProcTrigger{ + shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace) - Proc", ActionID: core.ActionID{SpellID: 105876}, ClassSpellMask: SpellMaskSpiritwalkersGrace, @@ -321,11 +316,10 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ // T11 enh // (2) Set: Increases damage done by your Lava Lash and Stormstrike abilities by 10%. // (4) Set: Increases the critical strike chance of your Lightning Bolt spell by 10%. -var itemSetRagingElementsBattlegearName = "Battlegear of the Raging Elements" var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ - Name: itemSetRagingElementsBattlegearName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Battlegear of the Raging Elements", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ @@ -334,7 +328,7 @@ var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ ClassMask: SpellMaskLavaLash | SpellMaskStormstrike, }) - shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsBattlegearName, 4, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ OnGain: func(_ *core.Simulation, _ *core.Aura) { setBonusDep.Activate() }, @@ -343,7 +337,7 @@ var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ @@ -352,7 +346,7 @@ var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ ClassMask: SpellMaskLightningBolt, }) - shaman.MakeStaticEffectForSetBonus(itemSetRagingElementsBattlegearName, 4, core.CustomSetBonusCallbackConfig{ + shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ OnGain: func(_ *core.Simulation, _ *core.Aura) { setBonusDep.Activate() }, @@ -374,14 +368,13 @@ func tier12StormstrikeBonus(_ *core.Simulation, spell *core.Spell, _ *core.Attac // T12 enh // (2) Set: Your Lava Lash gains an additional 5% damage increase per application of Searing Flames on the target. // (4) Set: Your Stormstrike ability also causes the target to take 6% increased damage from your Fire Nova, Flame Shock, Flametongue Weapon, Lava Burst, Lava Lash, and Unleash Flame abilities. -var itemSetVolcanicBattlegearName = "Volcanic Battlegear" var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ - Name: itemSetVolcanicBattlegearName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Volcanic Battlegear", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { // Implemented in lavalash.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() stormFireAuras := shaman.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { @@ -398,7 +391,7 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ }) }) - shaman.MakeProcTriggerAuraForSetBonus(itemSetVolcanicBattlegearName, 4, core.ProcTrigger{ + shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Item - Shaman T12 Enhancement 4P Bonus", ActionID: core.ActionID{SpellID: 99213}, Callback: core.CallbackOnSpellHitDealt, @@ -417,11 +410,10 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ // T13 enh // 2 pieces: While you have any stacks of Maelstrom Weapon, your Lightning Bolt, Chain Lightning, and healing spells deal 20% more healing or damage. // 4 pieces: Your Feral Spirits have a 45% chance to grant you a charge of Maelstrom Weapon each time they deal damage. -var itemSetSpiritwalkersBattlegearName = "Spiritwalker's Battlegear" var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ - Name: itemSetSpiritwalkersBattlegearName, - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Name: "Spiritwalker's Battlegear", + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() if shaman.Talents.MaelstromWeapon == 0 { @@ -456,7 +448,7 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ }) shaman.MaelstromWeaponAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - if shaman.HasActiveSetBonus(itemSetSpiritwalkersBattlegearName, 2) { + if shaman.HasActiveSetBonus(setName, 2) { temporalMaelstrom.Activate(sim) } }) @@ -466,7 +458,7 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ }) }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() if !shaman.Talents.FeralSpirit || shaman.Talents.MaelstromWeapon == 0 { @@ -475,7 +467,7 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ // var wolfProctriggerAura *core.Aura spiritWolves := []*SpiritWolf{shaman.SpiritWolves.SpiritWolf1, shaman.SpiritWolves.SpiritWolf2} for _, wolf := range spiritWolves { - shaman.MakeProcTriggerAuraForSetBonusWithUnit(itemSetSpiritwalkersBattlegearName, 4, &wolf.Unit, core.ProcTrigger{ + shaman.MakeProcTriggerAuraForSetBonusWithUnit(setName, 4, &wolf.Unit, core.ProcTrigger{ Name: "Spiritwalker's Battlegear 4pc" + shaman.Label, ActionID: core.ActionID{SpellID: 105872}, Callback: core.CallbackOnSpellHitDealt, diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 44320b093b..1b03af6471 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -11,15 +11,15 @@ import ( // T11 var ItemSetMaleficRaiment = core.NewItemSet(core.ItemSet{ Name: "Shadowflame Regalia", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.(WarlockAgent).GetWarlock().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, ClassMask: WarlockSpellChaosBolt | WarlockSpellHandOfGuldan | WarlockSpellHaunt, FloatValue: -0.1, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { warlock := agent.(WarlockAgent).GetWarlock() dmgMod := warlock.AddDynamicMod(core.SpellModConfig{ @@ -141,8 +141,8 @@ func (pet *FieryImpPet) registerFlameBlast(warlock *Warlock) { var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ Name: "Balespider's Burning Vestments", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { warlock := agent.(WarlockAgent).GetWarlock() core.MakePermanent(warlock.RegisterAura(core.Aura{ @@ -160,7 +160,7 @@ var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ }, })) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { warlock := agent.(WarlockAgent).GetWarlock() dmgMod := warlock.AddDynamicMod(core.SpellModConfig{ @@ -200,13 +200,13 @@ var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{ ID: 910, Name: "Gladiator's Felshroud", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { agent.(WarlockAgent).GetWarlock().AddStats(stats.Stats{ stats.Intellect: 70, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { lock := agent.(WarlockAgent).GetWarlock() lock.AddStats(stats.Stats{ stats.Intellect: 90, @@ -225,8 +225,8 @@ var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{ // T13 var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ Name: "Vestments of the Faceless Shroud", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { warlock := agent.(WarlockAgent).GetWarlock() warlock.AddStaticMod(core.SpellModConfig{ @@ -235,7 +235,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { warlock := agent.(WarlockAgent).GetWarlock() spDep := warlock.NewDynamicMultiplyStat(stats.SpellPower, 1.1) diff --git a/sim/warrior/_items.go b/sim/warrior/_items.go index 8af19757f6..1a8882375b 100644 --- a/sim/warrior/_items.go +++ b/sim/warrior/_items.go @@ -13,11 +13,11 @@ import ( var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ Name: "Onslaught Armor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the health bonus from your Commanding Shout ability by 170. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the damage of your Shield Slam ability by 10%. // Handled in shield_slam.go. }, @@ -26,11 +26,11 @@ var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ Name: "Onslaught Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Reduces the rage cost of your Execute ability by 3. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the damage of your Mortal Strike and Bloodthirst abilities by 5%. // Handled in bloodthirst.go and mortal_strike.go. }, @@ -43,14 +43,14 @@ var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases attack power by 50. // +100 resilience rating. agent.GetCharacter().AddStat(stats.Resilience, 100) agent.GetCharacter().AddStat(stats.AttackPower, 50) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Reduces the cooldown of your Intercept ability by 5 sec. // Increases attack power by 150. agent.GetCharacter().AddStat(stats.AttackPower, 150) @@ -60,12 +60,12 @@ var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ Name: "Dreadnaught Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the damage of your Shield Slam ability by 10%. // Handled in shield_slam.go. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the duration of Shield Wall by 3 seconds. // NYI }, @@ -74,12 +74,12 @@ var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ Name: "Siegebreaker Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the critical strike chance of Devastate by 10%. // Handled in devastate.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Shield Block grants 10% magic DR // NYI }, @@ -89,15 +89,15 @@ var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ Name: "Wrynn's Plate", AlternativeName: "Hellscream's Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Decreases the cooldown on Taunt by 2sec // NYI // Increases damage done by Devastate by 5% // Handled in devastate.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Decreases the cooldown of Shield Block by 10 sec // NYI }, @@ -106,12 +106,12 @@ var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ Name: "Ymirjar Lord's Plate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Shield Slam and Shockwave deal 20% increased damage // Handled in shield_slam.go and shockwave.go }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Bloodrage no longer costs health to use, and now causes you to absorb damage equal to 20% max HP // NYI }, @@ -120,11 +120,11 @@ var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ Name: "Dreadnaught Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Increases the damage of your Slam by 10%. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Your Bleed periodic effects have a chance to make your next ability cost 5 less rage. warrior := agent.(WarriorAgent).GetWarrior() rageMetrics := warrior.NewRageMetrics(core.ActionID{SpellID: 61571}) @@ -174,8 +174,8 @@ var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Siegebreaker Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Heroic Strike and Slam critical strikes have a chance to grant you 150 haste rating for 5 sec. warrior := agent.(WarriorAgent).GetWarrior() procAura := warrior.RegisterAura(core.Aura{ @@ -209,7 +209,7 @@ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the critical strike chance of Mortal Strike and Bloodthirst by 10%. // Handled in bloodthirst.go and mortal_strike.go. }, @@ -219,12 +219,12 @@ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Wrynn's Battlegear", AlternativeName: "Hellscream's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // Berserker Stance grants an additional 2% critical strike chance, and Battle Stance grants an additional 6% armor penetration. // Handled in stances.go. }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // Increases the critical strike chance of your Slam and Heroic Strike abilities by 5%. // Handled in slam.go and heroic_strike_cleave.go. }, @@ -233,8 +233,8 @@ var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Ymirjar Lord's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { // When your Deep Wounds ability deals damage you have a 3% chance to gain 16% attack power for 10 sec. warrior := agent.(WarriorAgent).GetWarrior() var bonusAP float64 @@ -267,7 +267,7 @@ var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // You have a 20% chance for your Bloodsurge and Sudden Death talents to grant 2 charges of their effect instead of 1, // reduce the global cooldown on Execute or Slam by 0.5 sec, and for the duration of the effect to be increased by 100%. diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 44da834aab..456748d0c0 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2148,1345 +2148,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99382.17017 - tps: 107565.53783 + dps: 98887.81989 + tps: 107054.24593 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38959.01554 - tps: 32935.25355 + dps: 38810.7966 + tps: 32814.34956 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51916.92666 - tps: 42847.59314 + dps: 51355.34743 + tps: 42382.05966 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67420.70452 - tps: 73892.94365 + dps: 67110.22073 + tps: 73569.93172 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24189.02873 - tps: 19989.61546 + dps: 24114.19778 + tps: 19933.16614 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28265.65333 - tps: 22236.24281 + dps: 27982.35164 + tps: 22019.91402 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99605.42669 - tps: 107807.98952 + dps: 99105.53322 + tps: 107290.96447 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39043.24696 - tps: 33010.16378 + dps: 38893.36603 + tps: 32887.90408 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52290.20141 - tps: 43181.58321 + dps: 51722.32517 + tps: 42710.82967 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67549.02221 - tps: 74034.30858 + dps: 67235.05694 + tps: 73707.6747 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24230.24028 - tps: 20024.55654 + dps: 24154.57024 + tps: 19967.47425 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28450.71567 - tps: 22394.9859 + dps: 28164.23729 + tps: 22176.23139 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99382.17017 - tps: 107565.53783 + dps: 98887.81989 + tps: 107054.24593 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38414.58859 - tps: 31950.22386 + dps: 38266.35589 + tps: 31829.58661 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50765.92093 - tps: 41803.11584 + dps: 50206.02497 + tps: 41342.12494 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67420.70452 - tps: 73892.94365 + dps: 67110.22073 + tps: 73569.93172 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23822.33706 - tps: 19328.60672 + dps: 23748.00265 + tps: 19272.88466 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28288.37552 - tps: 21982.88888 + dps: 28006.36719 + tps: 21769.96818 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99605.42669 - tps: 107807.98952 + dps: 99105.53322 + tps: 107290.96447 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38498.63559 - tps: 32024.35346 + dps: 38348.74075 + tps: 31902.3635 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51134.07711 - tps: 42130.44924 + dps: 50567.903 + tps: 41664.28923 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67549.02221 - tps: 74034.30858 + dps: 67235.05694 + tps: 73707.6747 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23863.37147 - tps: 19363.17854 + dps: 23788.20355 + tps: 19306.83166 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28472.81176 - tps: 22139.69787 + dps: 28187.64125 + tps: 21924.38967 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82472.02182 - tps: 89911.72825 + dps: 82060.06325 + tps: 89485.65167 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31386.01042 - tps: 27146.11001 + dps: 31262.65923 + tps: 27045.0494 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42077.24056 - tps: 35703.72157 + dps: 41611.54503 + tps: 35316.91885 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55916.58576 - tps: 61786.12039 + dps: 55658.57676 + tps: 61517.35993 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19330.66615 - tps: 16522.61677 + dps: 19268.75451 + tps: 16475.71182 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22706.07966 - tps: 18235.9627 + dps: 22471.24113 + tps: 18056.17924 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82658.26921 - tps: 90114.96926 + dps: 82241.69132 + tps: 89684.11505 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31455.13786 - tps: 27208.98509 + dps: 31330.40352 + tps: 27106.79128 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42381.27138 - tps: 35981.72107 + dps: 41910.35398 + tps: 35590.5811 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56022.53855 - tps: 61903.72232 + dps: 55761.63647 + tps: 61631.94824 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19364.03526 - tps: 16551.65477 + dps: 19301.4294 + tps: 16504.22387 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22852.68532 - tps: 18364.49279 + dps: 22615.21353 + tps: 18182.69341 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82472.02182 - tps: 89911.72825 + dps: 82060.06325 + tps: 89485.65167 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31211.4989 - tps: 26380.09889 + dps: 31087.97165 + tps: 26279.56785 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41585.05491 - tps: 34759.0569 + dps: 41118.47499 + tps: 34374.89787 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55916.58576 - tps: 61786.12039 + dps: 55658.57676 + tps: 61517.35993 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19331.01771 - tps: 16034.51161 + dps: 19269.07237 + tps: 15988.07656 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22615.39749 - tps: 17881.24029 + dps: 22380.39051 + tps: 17703.80634 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82658.26921 - tps: 90114.96926 + dps: 82241.69132 + tps: 89684.11505 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31280.91588 - tps: 26442.42801 + dps: 31156.00352 + tps: 26340.76971 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41884.31462 - tps: 35028.98044 + dps: 41412.50291 + tps: 34640.5138 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56022.53855 - tps: 61903.72232 + dps: 55761.63647 + tps: 61631.94824 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19364.12939 - tps: 16062.94103 + dps: 19301.48946 + tps: 16015.98529 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22761.98844 - tps: 18007.79983 + dps: 22524.3463 + tps: 17828.3763 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150485.44989 - tps: 165378.67744 + dps: 149813.74911 + tps: 164678.90378 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49974.37993 - tps: 41072.23928 + dps: 49774.78201 + tps: 40921.85154 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65763.27629 - tps: 52964.69417 + dps: 65021.43894 + tps: 52392.72805 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106141.39456 - tps: 118260.18406 + dps: 105701.41887 + tps: 117796.13886 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32046.12782 - tps: 25569.35157 + dps: 31934.52639 + tps: 25492.70807 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37124.75562 - tps: 28195.44144 + dps: 36715.65575 + tps: 27909.36768 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150820.64433 - tps: 165746.64073 + dps: 150141.41173 + tps: 165039.02046 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50084.29097 - tps: 41165.6988 + dps: 49882.45494 + tps: 41013.62475 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66237.70532 - tps: 53370.64032 + dps: 65487.54969 + tps: 52792.26071 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106343.79662 - tps: 118485.73189 + dps: 105898.88745 + tps: 118016.48332 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32102.52191 - tps: 25614.37191 + dps: 31989.66908 + tps: 25536.86901 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37372.10887 - tps: 28393.87433 + dps: 36958.42174 + tps: 28104.59281 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150485.44989 - tps: 165378.67744 + dps: 149813.74911 + tps: 164678.90378 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50069.49911 - tps: 40160.00774 + dps: 49870.87292 + tps: 40011.3371 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65282.37217 - tps: 51915.5766 + dps: 64542.50847 + tps: 51351.43837 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106141.39456 - tps: 118260.18406 + dps: 105701.41887 + tps: 117796.13886 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32058.3287 - tps: 24996.73181 + dps: 31947.42553 + tps: 24921.22162 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36957.13924 - tps: 27360.41316 + dps: 36549.52175 + tps: 27079.59927 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150820.64433 - tps: 165746.64073 + dps: 150141.41173 + tps: 165039.02046 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50178.22115 - tps: 40251.55292 + dps: 49977.36774 + tps: 40101.21522 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65753.16056 - tps: 52315.1258 + dps: 65005.00072 + tps: 51744.66185 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106343.79662 - tps: 118485.73189 + dps: 105898.88745 + tps: 118016.48332 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32114.12017 - tps: 25040.30142 + dps: 32001.97344 + tps: 24963.94452 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37201.19732 - tps: 27553.15678 + dps: 36789.00919 + tps: 27269.1941 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123717.91915 - tps: 137030.03261 + dps: 123158.1685 + tps: 136446.8879 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40049.55409 - tps: 33916.44359 + dps: 39882.63146 + tps: 33789.84039 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52877.97782 - tps: 43992.32999 + dps: 52257.9849 + tps: 43512.22396 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87962.38947 - tps: 98717.01964 + dps: 87595.74306 + tps: 98330.3153 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25325.45217 - tps: 20987.86556 + dps: 25232.94724 + tps: 20923.97327 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29929.55143 - tps: 23732.9559 + dps: 29589.44215 + tps: 23494.1087 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123993.62317 - tps: 137334.41567 + dps: 123427.596 + tps: 136744.73211 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40136.7668 - tps: 33992.16125 + dps: 39967.97246 + tps: 33864.13845 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53263.79167 - tps: 44330.68908 + dps: 52636.84672 + tps: 43845.19959 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88130.62745 - tps: 98906.09083 + dps: 87759.86981 + tps: 98515.05036 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25370.51427 - tps: 21025.0931 + dps: 25276.97208 + tps: 20960.48438 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30128.26434 - tps: 23898.75781 + dps: 29784.34138 + tps: 23657.2324 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123717.91915 - tps: 137030.03261 + dps: 123158.1685 + tps: 136446.8879 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40388.41091 - tps: 32981.7441 + dps: 40222.88907 + tps: 32857.8519 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53139.9926 - tps: 42868.5995 + dps: 52523.43929 + tps: 42398.48408 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87962.38947 - tps: 98717.01964 + dps: 87595.74306 + tps: 98330.3153 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25650.79168 - tps: 20555.68076 + dps: 25558.37236 + tps: 20492.7556 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30151.61552 - tps: 23093.65722 + dps: 29811.93433 + tps: 22859.64569 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123993.62317 - tps: 137334.41567 + dps: 123427.596 + tps: 136744.73211 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40475.4858 - tps: 33056.12237 + dps: 40308.10796 + tps: 32930.84096 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53526.6566 - tps: 43201.79364 + dps: 52903.18984 + tps: 42726.40679 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88130.62745 - tps: 98906.09083 + dps: 87759.86981 + tps: 98515.05036 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25696.07725 - tps: 20592.26147 + dps: 25602.62164 + tps: 20528.63072 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30349.03274 - tps: 23254.5272 + dps: 30005.54268 + tps: 23017.89168 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99700.6337 - tps: 107954.97609 + dps: 99224.08409 + tps: 107461.26842 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38903.59737 - tps: 32615.72675 + dps: 38770.44353 + tps: 32509.62022 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50972.2183 - tps: 41942.63819 + dps: 50472.40298 + tps: 41540.55502 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68387.62506 - tps: 75014.96339 + dps: 68091.92113 + tps: 74708.53953 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24150.98404 - tps: 19938.70794 + dps: 24076.92545 + tps: 19883.15222 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27918.96816 - tps: 21981.07812 + dps: 27647.22019 + tps: 21773.65029 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99919.73851 - tps: 108193.32089 + dps: 99437.84531 + tps: 107694.07724 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38984.884 - tps: 32687.90239 + dps: 38850.23709 + tps: 32580.60607 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51333.37789 - tps: 42264.77822 + dps: 50827.95811 + tps: 41858.18646 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68511.82454 - tps: 75151.88376 + dps: 68212.80487 + tps: 74842.02394 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24190.76865 - tps: 19972.44476 + dps: 24115.87964 + tps: 19916.2661 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28098.23239 - tps: 22135.05335 + dps: 27823.43728 + tps: 21925.29961 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99700.6337 - tps: 107954.97609 + dps: 99224.08409 + tps: 107461.26842 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38223.79763 - tps: 31609.68566 + dps: 38091.89919 + tps: 31505.11509 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50203.42009 - tps: 41139.22974 + dps: 49708.04665 + tps: 40744.72082 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68387.62506 - tps: 75014.96339 + dps: 68091.92113 + tps: 74708.53953 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24005.26155 - tps: 19483.35092 + dps: 23931.70297 + tps: 19428.52595 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27172.10353 - tps: 20975.16722 + dps: 26901.66593 + tps: 20771.16486 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99919.73851 - tps: 108193.32089 + dps: 99437.84531 + tps: 107694.07724 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38303.85681 - tps: 31680.14279 + dps: 38170.47938 + tps: 31574.39966 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50557.24041 - tps: 41452.20509 + dps: 50056.31232 + tps: 41053.27252 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68511.82454 - tps: 75151.88376 + dps: 68212.80487 + tps: 74842.02394 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24044.4382 - tps: 19516.16279 + dps: 23970.0548 + tps: 19460.72306 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27346.13402 - tps: 21122.02944 + dps: 27072.66398 + tps: 20915.73959 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82976.84159 - tps: 90309.23427 + dps: 82579.71692 + tps: 89897.81121 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31285.83796 - tps: 26936.799 + dps: 31176.0995 + tps: 26849.12803 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41242.1858 - tps: 34839.21523 + dps: 40829.71169 + tps: 34507.11576 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56104.65224 - tps: 62050.47397 + dps: 55858.67331 + tps: 61795.25036 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19570.06581 - tps: 16697.41969 + dps: 19508.61716 + tps: 16651.07871 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22633.69829 - tps: 18113.03143 + dps: 22407.5844 + tps: 17939.76188 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83158.24366 - tps: 90507.55519 + dps: 82756.666 + tps: 90091.51882 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31351.63575 - tps: 26996.41482 + dps: 31240.66679 + tps: 26907.7608 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41535.62874 - tps: 35107.05059 + dps: 41118.52952 + tps: 34771.22726 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56207.64635 - tps: 62164.84459 + dps: 55958.90924 + tps: 61906.75915 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19602.45457 - tps: 16725.60712 + dps: 19540.31688 + tps: 16678.74651 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22777.17162 - tps: 18239.09801 + dps: 22548.5223 + tps: 18063.88557 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82976.84159 - tps: 90309.23427 + dps: 82579.71692 + tps: 89897.81121 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30977.61317 - tps: 26090.72034 + dps: 30867.69781 + tps: 26003.5782 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41333.12664 - tps: 34595.81228 + dps: 40920.31553 + tps: 34267.05495 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56104.65224 - tps: 62050.47397 + dps: 55858.67331 + tps: 61795.25036 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19488.94795 - tps: 16080.99475 + dps: 19427.64913 + tps: 16035.30727 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22465.7055 - tps: 17647.74224 + dps: 22240.34083 + tps: 17477.74027 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 83158.24366 - tps: 90507.55519 + dps: 82756.666 + tps: 90091.51882 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31044.3861 - tps: 26150.52139 + dps: 30933.23825 + tps: 26062.40212 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41624.91352 - tps: 34858.5062 + dps: 41207.47354 + tps: 34526.06248 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 56207.64635 - tps: 62164.84459 + dps: 55958.90924 + tps: 61906.75915 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19520.72308 - tps: 16108.03058 + dps: 19458.73691 + tps: 16061.8308 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22607.95076 - tps: 17770.8409 + dps: 22380.05906 + tps: 17598.93269 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148430.17448 - tps: 163323.19607 + dps: 147775.83879 + tps: 162640.6411 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49466.7797 - tps: 40450.22533 + dps: 49280.29294 + tps: 40313.20349 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64758.5547 - tps: 51808.95522 + dps: 64065.69295 + tps: 51286.63528 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106335.57406 - tps: 118382.94203 + dps: 105909.54524 + tps: 117934.76794 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32047.09952 - tps: 25601.04217 + dps: 31943.60646 + tps: 25530.60336 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36633.71854 - tps: 27923.00885 + dps: 36262.17811 + tps: 27669.44428 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148754.09765 - tps: 163679.79488 + dps: 148092.42485 + tps: 162989.58637 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49569.4756 - tps: 40536.25731 + dps: 49380.89775 + tps: 40397.69904 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65214.13857 - tps: 52194.45497 + dps: 64513.50772 + tps: 51666.27822 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106534.98067 - tps: 118605.55639 + dps: 106104.17476 + tps: 118152.35689 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32101.87101 - tps: 25644.49286 + dps: 31997.21747 + tps: 25573.26421 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36872.37166 - tps: 28114.04705 + dps: 36496.66512 + tps: 27857.63924 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148430.17448 - tps: 163323.19607 + dps: 147775.83879 + tps: 162640.6411 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49889.73708 - tps: 39821.06658 + dps: 49704.23188 + tps: 39685.675 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64301.99155 - tps: 50441.25307 + dps: 63611.092 + tps: 49926.32656 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106335.57406 - tps: 118382.94203 + dps: 105909.54524 + tps: 117934.76794 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32258.40248 - tps: 25067.0997 + dps: 32155.63178 + tps: 24997.81836 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36668.74493 - tps: 27281.0588 + dps: 36298.80706 + tps: 27032.87484 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148754.09765 - tps: 163679.79488 + dps: 148092.42485 + tps: 162989.58637 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49992.622 - tps: 39906.32822 + dps: 49805.03672 + tps: 39769.41848 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64757.92098 - tps: 50822.37734 + dps: 64059.27433 + tps: 50301.67693 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106534.98067 - tps: 118605.55639 + dps: 106104.17476 + tps: 118152.35689 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32312.85669 - tps: 25109.59371 + dps: 32208.93361 + tps: 25039.53553 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36905.28849 - tps: 27467.87124 + dps: 36531.20247 + tps: 27216.90437 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123996.53242 - tps: 137399.74945 + dps: 123451.25268 + tps: 136830.95365 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39510.67375 - tps: 33325.15919 + dps: 39355.76581 + tps: 33210.76338 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52509.00705 - tps: 43562.2052 + dps: 51931.65543 + tps: 43125.25178 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88288.13706 - tps: 99105.10789 + dps: 87933.11305 + tps: 98731.62948 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25176.12747 - tps: 20728.23232 + dps: 25090.47009 + tps: 20669.6011 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29382.74324 - tps: 22751.95932 + dps: 29074.38592 + tps: 22540.6554 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124265.18298 - tps: 137696.84791 + dps: 123713.78897 + tps: 137121.67416 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39593.47917 - tps: 33396.5726 + dps: 39436.83424 + tps: 33280.89407 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52885.94082 - tps: 43892.52049 + dps: 52302.11532 + tps: 43450.66748 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88452.93884 - tps: 99290.37326 + dps: 88093.93391 + tps: 98912.70701 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25220.64679 - tps: 20764.48368 + dps: 25134.02893 + tps: 20705.19503 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29573.45761 - tps: 22908.03352 + dps: 29261.64265 + tps: 22694.36023 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123996.53242 - tps: 137399.74945 + dps: 123451.25268 + tps: 136830.95365 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40136.97133 - tps: 32855.51278 + dps: 39982.38366 + tps: 32742.68646 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51855.1759 - tps: 41870.91909 + dps: 51279.42587 + tps: 41441.81326 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88288.13706 - tps: 99105.10789 + dps: 87933.11305 + tps: 98731.62948 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25909.41891 - tps: 20666.82123 + dps: 25823.77666 + tps: 20609.08679 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29240.22453 - tps: 22040.37661 + dps: 28931.9428 + tps: 21833.55648 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124265.18298 - tps: 137696.84791 + dps: 123713.78897 + tps: 137121.67416 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40219.94157 - tps: 32925.72433 + dps: 40063.6205 + tps: 32811.63288 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52219.49726 - tps: 42182.95528 + dps: 51637.2913 + tps: 41749.03785 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88452.93884 - tps: 99290.37326 + dps: 88093.93391 + tps: 98912.70701 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25953.42884 - tps: 20701.98855 + dps: 25866.82628 + tps: 20643.60672 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29430.27516 - tps: 22193.17167 + dps: 29118.53665 + tps: 21984.03245 } } dps_results: { diff --git a/sim/warrior/items.go b/sim/warrior/items.go index 4202aa0fb3..095fb36a20 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -12,15 +12,41 @@ import ( var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ ID: 909, Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - agent.GetCharacter().AddStats(stats.Stats{ - stats.Strength: 70, + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() + bonusValue := 70.0 + + character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + // If Sim is undefined ItemSwap is disabled so we can add this statically + if sim == nil { + character.AddStat(stats.Strength, bonusValue) + } else { + character.AddStatDynamic(sim, stats.Strength, bonusValue) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + character.AddStatDynamic(sim, stats.Strength, -bonusValue) + }, }) }, - 4: func(agent core.Agent) { - agent.GetCharacter().AddStats(stats.Stats{ - stats.Strength: 90, + 4: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() + bonusValue := 90.0 + + character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + // If Sim is undefined ItemSwap is disabled so we can add this statically + if sim == nil { + character.AddStat(stats.Strength, bonusValue) + } else { + character.AddStatDynamic(sim, stats.Strength, bonusValue) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + character.AddStatDynamic(sim, stats.Strength, -bonusValue) + }, }) }, }, @@ -28,16 +54,27 @@ var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ Name: "Earthen Warplate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() + + setBonusDep := character.AddDynamicMod(core.SpellModConfig{ ClassMask: SpellMaskBloodthirst | SpellMaskMortalStrike, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) + + character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, - 4: func(agent core.Agent) { - character := agent.GetCharacter() + 4: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 90294} apDep := make([]*stats.StatDependency, 3) @@ -61,7 +98,7 @@ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Rage of the Ages Trigger", ActionID: actionID, Callback: core.CallbackOnCastComplete, @@ -70,40 +107,61 @@ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ buff.Activate(sim) buff.AddStack(sim) }, - }) + }, nil) }, }, }) var ItemSetEarthenBattleplate = core.NewItemSet(core.ItemSet{ Name: "Earthen Battleplate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() + + setBonusDep := character.AddDynamicMod(core.SpellModConfig{ ClassMask: SpellMaskShieldSlam, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) + + character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, - 4: func(agent core.Agent) { - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + 4: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() + + setBonusDep := character.AddDynamicMod(core.SpellModConfig{ ClassMask: SpellMaskShieldWall, Kind: core.SpellMod_Cooldown_Multiplier, FloatValue: -0.5, }) + + character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Activate() + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + setBonusDep.Deactivate() + }, + }) }, }, }) var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Name: "Molten Giant Warplate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - character := agent.GetCharacter() + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 99233} - warrior := agent.(WarriorAgent).GetWarrior() - talentReduction := time.Duration(warrior.Talents.BoomingVoice*3) * time.Second + talentReduction := time.Duration(character.Talents.BoomingVoice*3) * time.Second buff := character.RegisterAura(core.Aura{ Label: "Burning Rage", @@ -117,7 +175,7 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ Name: "Burning Rage Trigger", ActionID: actionID, ClassSpellMask: SpellMaskShouts, @@ -125,18 +183,18 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buff.Activate(sim) }, - }) + }, nil) }, - 4: func(agent core.Agent) { - character := agent.GetCharacter() + 4: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 99237} fieryAttackActionID := core.ActionID{} // actual ID = 99237 - if character.Spec == proto.Spec_SpecArmsWarrior { + switch character.Spec { + case proto.Spec_SpecArmsWarrior: fieryAttackActionID.SpellID = 12294 - } - if character.Spec == proto.Spec_SpecFuryWarrior { + case proto.Spec_SpecFuryWarrior: fieryAttackActionID.SpellID = 85288 } @@ -156,7 +214,7 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Fiery Attack Trigger", ActionID: actionID, Callback: core.CallbackOnSpellHitDealt, @@ -166,16 +224,16 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { fieryAttack.Cast(sim, result.Target) }, - }) + }, nil) }, }, }) var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ Name: "Molten Giant Battleplate", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - character := agent.GetCharacter() + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, _ string) { + character := agent.(WarriorAgent).GetWarrior() cata.RegisterIgniteEffect(&character.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 23922}.WithTag(3), // actual 99240 @@ -195,10 +253,10 @@ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent) { - character := agent.GetCharacter() + 4: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() - character.RegisterAura(core.Aura{ + aura := character.RegisterAura(core.Aura{ Label: "T12 4P Bonus", ActionID: core.ActionID{SpellID: 99242}, Duration: 10 * time.Second, @@ -210,15 +268,26 @@ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ }, }) + character.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + if sim != nil { + aura.Activate(sim) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + aura.Deactivate(sim) + }, + }) + }, }, }) var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Colossal Dragonplate Battlegear", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - character := agent.GetCharacter() + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() mod := character.AddDynamicMod(core.SpellModConfig{ ClassMask: SpellMaskHeroicStrike, @@ -239,7 +308,7 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ Name: "Volatile Outrage Trigger", ActionID: actionID, Callback: core.CallbackOnCastComplete, @@ -247,9 +316,9 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buffAura.Activate(sim) }, - }) + }, nil) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, setName string) { warrior := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 108126} @@ -268,7 +337,7 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ }) // TODO (4.3): Check if this cares that the hit landed - core.MakeProcTriggerAura(&warrior.Unit, core.ProcTrigger{ + warrior.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Warrior T13 4P Bloodthirst Trigger", ActionID: actionID, Callback: core.CallbackOnSpellHitDealt, @@ -277,9 +346,9 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procCS.Cast(sim, result.Target) }, - }) + }, nil) - core.MakeProcTriggerAura(&warrior.Unit, core.ProcTrigger{ + warrior.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Warrior T13 4P Mortal Strike Trigger", ActionID: actionID, Callback: core.CallbackOnSpellHitDealt, @@ -288,16 +357,16 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procCS.Cast(sim, result.Target) }, - }) + }, nil) }, }, }) var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ Name: "Colossal Dragonplate Armor", - Bonuses: map[int32]core.ApplyEffect{ - 2: func(agent core.Agent) { - character := agent.GetCharacter() + Bonuses: map[int32]core.ApplySetItemEffect{ + 2: func(agent core.Agent, setName string) { + character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 105909} duration := time.Second * 6 @@ -306,7 +375,7 @@ var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ return shieldAmt }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ Name: "Shield of Fury Trigger" + character.Label, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskRevenge, @@ -322,9 +391,15 @@ var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ shieldAura.Activate(sim) } }, + }, &core.CustomSetBonusCallbackConfig{ + OnExpire: func(sim *core.Simulation, aura *core.Aura) { + shieldAmt = 0 + shieldAura.Deactivate(sim) + aura.Deactivate(sim) + }, }) }, - 4: func(agent core.Agent) { + 4: func(agent core.Agent, _ string) { // TODO: Implement this, turns Shield Wall into a raid buff }, }, From c434f2097f8b385456b3660e9c644ca2c22d9dec Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 19 Dec 2024 00:21:44 +0100 Subject: [PATCH 046/127] Migrate DK Set Bonuses --- sim/core/item_sets.go | 102 +++++++++++++++++------- sim/death_knight/dancing_rune_weapon.go | 3 +- sim/death_knight/death_knight.go | 5 ++ sim/death_knight/icebound_fortitude.go | 11 ++- sim/death_knight/items.go | 94 +++++++++++++++++----- sim/death_knight/talents_frost.go | 14 ++-- sim/death_knight/talents_unholy.go | 25 +++--- sim/shaman/items.go | 50 ++---------- sim/warrior/items.go | 36 +-------- 9 files changed, 185 insertions(+), 155 deletions(-) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index fff97638dd..6fbe1a11e6 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -208,6 +208,13 @@ func (character *Character) GetActiveSetBonusNames() []string { return names } +type CustomSetBonusCallbackConfig struct { + // Override default behavior when the set bonus is gained. + OnGain func(sim *Simulation, aura *Aura) + // Override default behavior when the set bonus is lost. + OnExpire func(sim *Simulation, aura *Aura) +} + // Adds a proc trigger aura that activates when the character has a set bonus. func (character *Character) MakeProcTriggerAuraForSetBonus(setName string, numPieces int32, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { return character.factory_ProcTriggerAuraForSetBonus(setName, numPieces, &character.Unit, config, customSetBonusCallbackConfig) @@ -224,52 +231,89 @@ func (character *Character) factory_ProcTriggerAuraForSetBonus(setName string, n customSetBonusCallbackConfig = &CustomSetBonusCallbackConfig{} } - if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, slot proto.ItemSlot) { - if character.HasActiveSetBonus(setName, numPieces) { - if customSetBonusCallbackConfig.OnGain != nil { - customSetBonusCallbackConfig.OnGain(sim, aura) - } else { - aura.Activate(sim) - } + character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ + OnGain: func(sim *Simulation, _ proto.ItemSlot) { + if customSetBonusCallbackConfig.OnGain != nil { + customSetBonusCallbackConfig.OnGain(sim, aura) } else { - if customSetBonusCallbackConfig.OnExpire != nil { - customSetBonusCallbackConfig.OnExpire(sim, aura) - } else { - aura.Deactivate(sim) - } + aura.Activate(sim) } - }) - } + }, + OnExpire: func(sim *Simulation, _ proto.ItemSlot) { + if customSetBonusCallbackConfig.OnExpire != nil { + customSetBonusCallbackConfig.OnExpire(sim, aura) + } else { + aura.Deactivate(sim) + } + }, + }) return aura } -type CustomSetBonusCallbackConfig struct { - // Override default behavior when the set bonus is gained. - OnGain func(sim *Simulation, aura *Aura) - // Override default behavior when the set bonus is lost. - OnExpire func(sim *Simulation, aura *Aura) +// Adds a static effect that activates when the character has a set bonus. +func (character *Character) MakeCallbackEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { + character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ + OnGain: func(sim *Simulation, _ proto.ItemSlot) { + if callbackConfig.OnGain != nil { + callbackConfig.OnGain(sim, nil) + } + }, + OnExpire: func(sim *Simulation, _ proto.ItemSlot) { + if callbackConfig.OnExpire != nil { + callbackConfig.OnExpire(sim, nil) + } + }, + OnDisabled: func() { + if callbackConfig.OnGain != nil { + callbackConfig.OnGain(nil, nil) + } + }, + }) } // Adds a static effect that activates when the character has a set bonus. -func (character *Character) MakeCallbackEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { +func (character *Character) MakeDynamicModForSetBonus(setName string, numPieces int32, spellModConfig SpellModConfig) { + + setBonusDep := character.AddDynamicMod(spellModConfig) + character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ + OnGain: func(_ *Simulation, _ proto.ItemSlot) { + setBonusDep.Activate() + }, + OnExpire: func(_ *Simulation, _ proto.ItemSlot) { + setBonusDep.Deactivate() + }, + OnDisabled: func() { + setBonusDep.Activate() + }, + }) +} + +type ItemSwapRegistrationConfig struct { + // Will be called when your set bonus is gained. + OnGain func(sim *Simulation, slot proto.ItemSlot) + // Will be called when your set bonus is lost. + OnExpire func(sim *Simulation, slot proto.ItemSlot) + // Will be called when ItemSwap is disabled. + OnDisabled func() +} + +func (character *Character) registerSetBonusForItemSwap(setName string, numPieces int32, config ItemSwapRegistrationConfig) { if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, _ proto.ItemSlot) { + character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, slot proto.ItemSlot) { if character.HasActiveSetBonus(setName, numPieces) { - if callbackConfig.OnGain != nil { - callbackConfig.OnGain(sim, nil) + if config.OnGain != nil { + config.OnGain(sim, slot) } } else { - if callbackConfig.OnExpire != nil { - callbackConfig.OnExpire(sim, nil) + if config.OnExpire != nil { + config.OnExpire(sim, slot) } } }) } else { - // By default, the effect is always active. - if callbackConfig.OnGain != nil { - callbackConfig.OnGain(nil, nil) + if config.OnDisabled != nil { + config.OnDisabled() } } } diff --git a/sim/death_knight/dancing_rune_weapon.go b/sim/death_knight/dancing_rune_weapon.go index 05df59c922..fe174e5b0e 100644 --- a/sim/death_knight/dancing_rune_weapon.go +++ b/sim/death_knight/dancing_rune_weapon.go @@ -34,7 +34,6 @@ func (dk *DeathKnight) registerDancingRuneWeaponSpell() { hasGlyph := dk.HasMajorGlyph(proto.DeathKnightMajorGlyph_GlyphOfDancingRuneWeapon) - hasT12Set := dk.HasSetBonus(ItemSetElementiumDeathplateBattlearmor, 4) t124PAura := dk.RegisterAura(core.Aura{ Label: "Flaming Rune Weapon", ActionID: core.ActionID{SpellID: 101162}, @@ -73,7 +72,7 @@ func (dk *DeathKnight) registerDancingRuneWeaponSpell() { if hasGlyph { dk.PseudoStats.ThreatMultiplier /= 1.5 } - if hasT12Set { + if dk.hasT12Tank4pc() { t124PAura.Activate(sim) } }, diff --git a/sim/death_knight/death_knight.go b/sim/death_knight/death_knight.go index c2e005d9c1..520be7df6a 100644 --- a/sim/death_knight/death_knight.go +++ b/sim/death_knight/death_knight.go @@ -71,6 +71,11 @@ type DeathKnight struct { // Runic power decay, used during pre pull RunicPowerDecayAura *core.Aura + // Auras + IceBoundFortituteAura *core.Aura + FreezingFogAura *core.Aura + SuddenDoomProcAura *core.Aura + // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet } diff --git a/sim/death_knight/icebound_fortitude.go b/sim/death_knight/icebound_fortitude.go index 1559511325..2b77c56df7 100644 --- a/sim/death_knight/icebound_fortitude.go +++ b/sim/death_knight/icebound_fortitude.go @@ -6,16 +6,19 @@ import ( "github.com/wowsims/cata/sim/core" ) +func (dk *DeathKnight) iceBoundFortituteBaseDuration() time.Duration { + return 12 * time.Second +} + func (dk *DeathKnight) registerIceboundFortitudeSpell() { actionID := core.ActionID{SpellID: 48792} dmgTakenMult := 0.8 - 0.15*float64(dk.Talents.SanguineFortitude) - hasT11Set := dk.HasSetBonus(ItemSetMagmaPlatedBattlearmor, 4) - aura := dk.RegisterAura(core.Aura{ + dk.IceBoundFortituteAura = dk.RegisterAura(core.Aura{ Label: "Icebound Fortitude", ActionID: actionID, - Duration: core.TernaryDuration(hasT11Set, time.Second*18, time.Second*12), + Duration: dk.iceBoundFortituteBaseDuration(), OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.DamageTakenMultiplier *= dmgTakenMult @@ -41,7 +44,7 @@ func (dk *DeathKnight) registerIceboundFortitudeSpell() { }, }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - aura.Activate(sim) + dk.IceBoundFortituteAura.Activate(sim) }, }) diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index 92b438b25f..d9eee17131 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -14,15 +14,17 @@ import ( var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlegear", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { // Increases the critical strike chance of your Death Coil and Frost Strike abilities by 5%. - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + dk := agent.(DeathKnightAgent).GetDeathKnight() + + dk.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, ClassMask: DeathKnightSpellDeathCoil | DeathKnightSpellDeathCoilHeal | DeathKnightSpellFrostStrike, FloatValue: 5, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { // Each time you gain a Death Rune, you also gain 1% increased attack power for 30 sec. Stacks up to 3 times. // Also activated whenever KM procs character := agent.GetCharacter() @@ -47,7 +49,7 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Magma Plated Battlegear", Callback: core.CallbackOnCastComplete, ClassSpellMask: DeathKnightSpellConvertToDeathRune | DeathKnightSpellKillingMachine, @@ -56,7 +58,7 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ aura.Activate(sim) aura.AddStack(sim) }, - }) + }, nil) }, }, }) @@ -65,17 +67,34 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlearmor", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { // Increases the damage done by your Death Strike ability by 5%. - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + dk := agent.(DeathKnightAgent).GetDeathKnight() + + dk.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, ClassMask: DeathKnightSpellDeathStrike, FloatValue: 0.05, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { // Increases the duration of your Icebound Fortitude ability by 50%. // Implemented in icebound_fortitude.go + dk := agent.(DeathKnightAgent).GetDeathKnight() + dk.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(DeathKnightSpellIceboundFortitude) { + return + } + + dk.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, _ *core.Aura) { + dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second + }, + OnExpire: func(_ *core.Simulation, _ *core.Aura) { + dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + }, + }) + }) }, }, }) @@ -84,7 +103,7 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlegear", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { dk := agent.(DeathKnightAgent).GetDeathKnight() actionID := core.ActionID{SpellID: 98971} @@ -108,7 +127,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ + dk.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ Name: "Smolering Rune Trigger", ActionID: actionID, ClassSpellMask: DeathKnightSpellHornOfWinter, @@ -116,10 +135,10 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buff.Activate(sim) }, - }) + }, nil) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { dk := agent.(DeathKnightAgent).GetDeathKnight() damage := 0.0 @@ -145,7 +164,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ var flamingTormentSpellForObliterate = dk.RegisterSpell(newFlamingTormentSpell(49020)) var flamingTormentSpellForScourgeStrike = dk.RegisterSpell(newFlamingTormentSpell(55090)) - core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ + dk.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ Name: "Flaming Torment Trigger", Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: DeathKnightSpellObliterate | DeathKnightSpellScourgeStrike | DeathKnightSpellScourgeStrikeShadow, @@ -158,7 +177,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ flamingTormentSpellForScourgeStrike.Cast(sim, result.Target) } }, - }) + }, nil) }, }, @@ -168,7 +187,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlearmor", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { dk := agent.(DeathKnightAgent).GetDeathKnight() @@ -202,7 +221,7 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ + dk.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ Name: "Burning Blood Trigger", ActionID: core.ActionID{SpellID: 98956}, ProcMask: core.ProcMaskMelee, @@ -213,23 +232,52 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { dk.BurningBloodSpell.Cast(sim, result.Target) }, - }) + }, nil) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go }, }, }) +func (dk *DeathKnight) hasT12Tank4pc() bool { + return dk.HasActiveSetBonus(ItemSetElementiumDeathplateBattlearmor.Name, 4) +} + // T13 - DPS var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Necrotic Boneplate Battlegear", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() + + dk := agent.(DeathKnightAgent).GetDeathKnight() + dk.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(DeathKnightSpellDeathCoil) { + return + } + dk.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(_ *core.Simulation, _ *core.Aura) { + if dk.FreezingFogAura != nil { + dk.FreezingFogAura.MaxStacks = 2 + } + if dk.SuddenDoomProcAura != nil { + dk.SuddenDoomProcAura.MaxStacks = 2 + } + }, + OnExpire: func(_ *core.Simulation, _ *core.Aura) { + if dk.FreezingFogAura != nil { + dk.FreezingFogAura.MaxStacks = 0 + } + if dk.SuddenDoomProcAura != nil { + dk.SuddenDoomProcAura.MaxStacks = 0 + } + }, + }) + }) }, 4: func(agent core.Agent, _ string) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. @@ -239,5 +287,13 @@ var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) +func (dk *DeathKnight) hasT13DPS2pc() bool { + return dk.HasActiveSetBonus(ItemSetNecroticBoneplateBattlegear.Name, 2) +} + +func (dk *DeathKnight) hasT13DPS4pc() bool { + return dk.HasActiveSetBonus(ItemSetNecroticBoneplateBattlegear.Name, 4) +} + func init() { } diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index a0e388d460..6c984e1ca1 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -124,19 +124,17 @@ func (dk *DeathKnight) applyRime() { return } - has2pcT13 := dk.HasSetBonus(ItemSetNecroticBoneplateBattlegear, 2) - rimeMod := dk.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, FloatValue: -1, ClassMask: DeathKnightSpellIcyTouch | DeathKnightSpellHowlingBlast, }) - freezingFogAura := dk.GetOrRegisterAura(core.Aura{ + dk.FreezingFogAura = dk.GetOrRegisterAura(core.Aura{ Label: "Freezing Fog", ActionID: core.ActionID{SpellID: 59052}, Duration: time.Second * 15, - MaxStacks: core.TernaryInt32(has2pcT13, 2, 0), + MaxStacks: 0, OnGain: func(aura *core.Aura, sim *core.Simulation) { rimeMod.Activate() @@ -149,7 +147,7 @@ func (dk *DeathKnight) applyRime() { return } - if has2pcT13 { + if dk.hasT13DPS2pc() { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -165,12 +163,12 @@ func (dk *DeathKnight) applyRime() { Outcome: core.OutcomeLanded, ProcChance: 0.15 * float64(dk.Talents.Rime), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - freezingFogAura.Activate(sim) + dk.FreezingFogAura.Activate(sim) // T13 2pc: Rime has a 60% chance to grant 2 charges when triggered instead of 1. - if has2pcT13 { + if dk.hasT13DPS2pc() { stacks := core.TernaryInt32(sim.Proc(0.6, "T13 2pc"), 2, 1) - freezingFogAura.SetStacks(sim, stacks) + dk.FreezingFogAura.SetStacks(sim, stacks) } }, }) diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index 8744ccae74..099fd75326 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -101,12 +101,7 @@ func (dk *DeathKnight) applyContagion() { func (dk *DeathKnight) applyRunicEmpowerementCorruption() { var handler func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) - has4pcT13 := dk.HasSetBonus(ItemSetNecroticBoneplateBattlegear, 4) - - var runicMasteryAura *core.StatBuffAura - if has4pcT13 { - runicMasteryAura = dk.NewTemporaryStatsAura("Runic Mastery", core.ActionID{SpellID: 105647}, stats.Stats{stats.MasteryRating: 710}, time.Second*12) - } + runicMasteryAura := dk.NewTemporaryStatsAura("Runic Mastery", core.ActionID{SpellID: 105647}, stats.Stats{stats.MasteryRating: 710}, time.Second*12) if dk.Talents.RunicCorruption > 0 { dk.AddStaticMod(core.SpellModConfig{ @@ -138,7 +133,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { } // T13 4pc: Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. - if has4pcT13 && sim.Proc(0.4, "T13 4pc") { + if dk.hasT13DPS4pc() && sim.Proc(0.4, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -155,7 +150,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { dk.RegenRandomDepletedRune(sim, runeMetrics) // T13 4pc: Runic Empowerment has a 25% chance to also grant 710 mastery rating for 12 sec when activated. - if has4pcT13 && sim.Proc(0.25, "T13 4pc") { + if dk.hasT13DPS4pc() && sim.Proc(0.25, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -275,19 +270,17 @@ func (dk *DeathKnight) applySuddenDoom() { return } - has2pcT13 := dk.HasSetBonus(ItemSetNecroticBoneplateBattlegear, 2) - mod := dk.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, ClassMask: DeathKnightSpellDeathCoil | DeathKnightSpellDeathCoilHeal, FloatValue: -1, }) - aura := dk.GetOrRegisterAura(core.Aura{ + dk.SuddenDoomProcAura = dk.GetOrRegisterAura(core.Aura{ Label: "Sudden Doom Proc", ActionID: core.ActionID{SpellID: 81340}, Duration: time.Second * 10, - MaxStacks: core.TernaryInt32(has2pcT13, 2, 0), + MaxStacks: 0, OnGain: func(aura *core.Aura, sim *core.Simulation) { mod.Activate() @@ -304,7 +297,7 @@ func (dk *DeathKnight) applySuddenDoom() { return } - if has2pcT13 { + if dk.hasT13DPS2pc() { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -321,12 +314,12 @@ func (dk *DeathKnight) applySuddenDoom() { PPM: ppm, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - aura.Activate(sim) + dk.SuddenDoomProcAura.Activate(sim) // T13 2pc: Sudden Doom has a 30% chance to grant 2 charges when triggered instead of 1. - if has2pcT13 { + if dk.hasT13DPS2pc() { stacks := core.TernaryInt32(sim.Proc(0.3, "T13 2pc"), 2, 1) - aura.SetStacks(sim, stacks) + dk.SuddenDoomProcAura.SetStacks(sim, stacks) } }, }) diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 1281a4b8e2..54db386cfc 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -87,40 +87,20 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ Name: "Regalia of the Raging Elements", Bonuses: map[int32]core.ApplySetItemEffect{ 2: func(agent core.Agent, setName string) { - shaman := agent.GetCharacter() - - setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ + character := agent.GetCharacter() + character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskFlameShock, }) - - shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, 4: func(agent core.Agent, setName string) { - shaman := agent.GetCharacter() - - setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ + character := agent.GetCharacter() + character.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, FloatValue: -0.1, ClassMask: SpellMaskLightningBolt, }) - - shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, }, }) @@ -322,38 +302,20 @@ var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() - setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ + shaman.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, FloatValue: .10, ClassMask: SpellMaskLavaLash | SpellMaskStormstrike, }) - - shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(_ *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, 4: func(agent core.Agent, setName string) { shaman := agent.(ShamanAgent).GetShaman() - setBonusDep := shaman.AddDynamicMod(core.SpellModConfig{ + shaman.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskLightningBolt, }) - - shaman.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(_ *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, }, }) diff --git a/sim/warrior/items.go b/sim/warrior/items.go index 095fb36a20..9377291fcc 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -57,21 +57,11 @@ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ Bonuses: map[int32]core.ApplySetItemEffect{ 2: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() - - setBonusDep := character.AddDynamicMod(core.SpellModConfig{ + character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ ClassMask: SpellMaskBloodthirst | SpellMaskMortalStrike, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) - - character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, 4: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() @@ -117,39 +107,19 @@ var ItemSetEarthenBattleplate = core.NewItemSet(core.ItemSet{ Bonuses: map[int32]core.ApplySetItemEffect{ 2: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() - - setBonusDep := character.AddDynamicMod(core.SpellModConfig{ + character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ ClassMask: SpellMaskShieldSlam, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) - - character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, 4: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() - - setBonusDep := character.AddDynamicMod(core.SpellModConfig{ + character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ ClassMask: SpellMaskShieldWall, Kind: core.SpellMod_Cooldown_Multiplier, FloatValue: -0.5, }) - - character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Activate() - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - setBonusDep.Deactivate() - }, - }) }, }, }) From 6bb4ddf3d1594dad10dd77a63b30066998a23118 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 19 Dec 2024 01:21:42 +0100 Subject: [PATCH 047/127] Migrate Druid set bonuses & ignite-like set bonuses --- sim/common/cata/other_effects.go | 6 +- sim/core/item_sets.go | 14 +++ sim/druid/barkskin.go | 2 +- sim/druid/berserk.go | 2 +- sim/druid/druid.go | 1 - sim/druid/forms.go | 2 +- sim/druid/items.go | 117 ++++++++++++++---- sim/druid/lacerate.go | 5 +- sim/druid/mangle.go | 2 +- sim/druid/rake.go | 6 +- sim/mage/talents_fire.go | 2 +- sim/paladin/items.go | 7 +- .../retribution/TestRetribution.results | 60 ++++----- sim/rogue/items.go | 7 +- sim/warrior/items.go | 6 +- 15 files changed, 163 insertions(+), 76 deletions(-) diff --git a/sim/common/cata/other_effects.go b/sim/common/cata/other_effects.go index 0e150c0063..ee02840ac8 100644 --- a/sim/common/cata/other_effects.go +++ b/sim/common/cata/other_effects.go @@ -1382,7 +1382,7 @@ type IgniteConfig struct { IncludeAuraDelay bool // "munching" and "free roll-over" interactions } -func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) *core.Spell { +func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) (*core.Spell, *core.Aura) { spellFlags := core.SpellFlagIgnoreModifiers | core.SpellFlagNoSpellMods | core.SpellFlagNoOnCastComplete if config.DisableCastMetrics { @@ -1489,6 +1489,6 @@ func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) *core.Spell { } } - core.MakeProcTriggerAura(unit, procTrigger) - return igniteSpell + procTriggerAura := core.MakeProcTriggerAura(unit, procTrigger) + return igniteSpell, procTriggerAura } diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 6fbe1a11e6..f48d364138 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -272,6 +272,20 @@ func (character *Character) MakeCallbackEffectForSetBonus(setName string, numPie }) } +// Handles "ignite-like" set bonus effects +func (character *Character) MakeIgniteHandlerEffectForSetBonus(setName string, numPieces int32, spell *Spell, procTrigger *Aura) { + character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ + OnGain: func(sim *Simulation, _ proto.ItemSlot) { + spell.Flags &= ^SpellFlagSwapped + procTrigger.Activate(sim) + }, + OnExpire: func(sim *Simulation, _ proto.ItemSlot) { + spell.Flags |= SpellFlagSwapped + procTrigger.Deactivate(sim) + }, + }) +} + // Adds a static effect that activates when the character has a set bonus. func (character *Character) MakeDynamicModForSetBonus(setName string, numPieces int32, spellModConfig SpellModConfig) { diff --git a/sim/druid/barkskin.go b/sim/druid/barkskin.go index 5a5d0f4d8e..0cb56fd1a1 100644 --- a/sim/druid/barkskin.go +++ b/sim/druid/barkskin.go @@ -31,7 +31,7 @@ func (druid *Druid) registerBarkskinCD() { druid.PseudoStats.ReducedCritTakenChance -= 0.25 } - if druid.Feral4pT12Active { + if druid.hasT12Feral4pBonus() { druid.SmokescreenAura.Activate(sim) } }, diff --git a/sim/druid/berserk.go b/sim/druid/berserk.go index 9eb29efd92..8568081217 100644 --- a/sim/druid/berserk.go +++ b/sim/druid/berserk.go @@ -98,7 +98,7 @@ func (druid *Druid) registerBerserkCD() { } func (druid *Druid) ApplyFeral4pT12(sim *core.Simulation) { - if !druid.Feral4pT12Active || !druid.BerserkAura.IsActive() { + if !druid.hasT12Feral4pBonus() || !druid.BerserkAura.IsActive() { return } diff --git a/sim/druid/druid.go b/sim/druid/druid.go index 91a7d627a9..2943ea894e 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -32,7 +32,6 @@ type Druid struct { BleedsActive int AssumeBleedActive bool LeatherSpecActive bool - Feral4pT12Active bool MHAutoSpell *core.Spell ReplaceBearMHFunc core.ReplaceMHSwing diff --git a/sim/druid/forms.go b/sim/druid/forms.go index fdeab1681f..b0693c88ed 100644 --- a/sim/druid/forms.go +++ b/sim/druid/forms.go @@ -172,7 +172,7 @@ func (druid *Druid) registerCatFormSpell() { druid.PredatoryInstinctsAura.Deactivate(sim) } - if druid.StrengthOfThePantherAura.IsActive() { + if druid.hasT11Feral4pBonus() && druid.StrengthOfThePantherAura.IsActive() { druid.StrengthOfThePantherAura.Deactivate(sim) } } diff --git a/sim/druid/items.go b/sim/druid/items.go index 4b6dd826d5..b85eb1f195 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -43,21 +43,29 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ }, }) +func (druid *Druid) hasT11Feral2pBonus() bool { + return druid.HasActiveSetBonus(ItemSetStormridersBattlegarb.Name, 2) +} + +func (druid *Druid) hasT11Feral4pBonus() bool { + return druid.HasActiveSetBonus(ItemSetStormridersBattlegarb.Name, 4) +} + // T11 Balance var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Regalia", Bonuses: map[int32]core.ApplySetItemEffect{ // Increases the critical strike chance of your Insect Swarm and Moonfire spells by 5% - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 5, ClassMask: DruidSpellDoT | DruidSpellMoonfire | DruidSpellSunfire, }) }, // Whenever Eclipse triggers, your critical strike chance with spells is increased by 15% for 8 sec. Each critical strike you achieve reduces that bonus by 5% - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() tierSet4pMod := druid.AddDynamicMod(core.SpellModConfig{ @@ -88,10 +96,12 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ }) druid.AddEclipseCallback(func(_ Eclipse, gained bool, sim *core.Simulation) { - if gained { - tierSet4pAura.Activate(sim) - } else { - tierSet4pAura.Deactivate(sim) + if druid.HasActiveSetBonus(setName, 4) { + if gained { + tierSet4pAura.Activate(sim) + } else { + tierSet4pAura.Deactivate(sim) + } } }) }, @@ -102,10 +112,10 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Battlegarb", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { // TODO: Verify behavior after PTR testing druid := agent.(DruidAgent).GetDruid() - cata.RegisterIgniteEffect(&druid.Unit, cata.IgniteConfig{ + spell, procTrigger := cata.RegisterIgniteEffect(&druid.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 99002}, DotAuraLabel: "Fiery Claws", IncludeAuraDelay: true, @@ -121,11 +131,12 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ return result.Damage * 0.1 }, }) + + druid.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) }, 4: func(agent core.Agent, _ string) { // Full implementation in berserk.go and barkskin.go druid := agent.(DruidAgent).GetDruid() - druid.Feral4pT12Active = true if !druid.InForm(Bear) { return @@ -148,15 +159,19 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ }, }) +func (druid *Druid) hasT12Feral4pBonus() bool { + return druid.HasActiveSetBonus(ItemSetObsidianArborweaveBattlegarb.Name, 4) +} + // T12 Balance var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Regalia", Bonuses: map[int32]core.ApplySetItemEffect{ // You have a chance to summon a Burning Treant to assist you in battle for 15 sec when you cast Wrath or Starfire. (Proc chance: 20%, 45s cooldown) - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() - core.MakeProcTriggerAura(&druid.Unit, core.ProcTrigger{ + druid.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ ActionID: core.ActionID{SpellID: 99019}, Name: "Item - Druid T12 Balance 2P Bonus", Callback: core.CallbackOnCastComplete, @@ -166,27 +181,52 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { druid.BurningTreant.EnableWithTimeout(sim, druid.BurningTreant, time.Second*15) }, - }) + }, nil) }, // While not in an Eclipse state, your Wrath generates 3 additional Lunar Energy and your Starfire generates 5 additional Solar Energy. - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() druid.OnSpellRegistered(func(spell *core.Spell) { if spell.ClassSpellMask == DruidSpellWrath { - druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) + druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) + }, + }) } if spell.ClassSpellMask == DruidSpellStarfire { - druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) + druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) + }, + }) } }) - core.MakePermanent(druid.RegisterAura(core.Aura{ + aura := core.MakePermanent(druid.RegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 99049}, Label: "Item - Druid T12 Balance 4P Bonus", Duration: core.NeverExpires, })) + + druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + if sim != nil { + aura.Activate(sim) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + aura.Deactivate(sim) + }, + }) }, }, }) @@ -199,16 +239,16 @@ var ItemSetDeepEarthRegalia = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, _ string) { }, // Reduces the cooldown of Starsurge by 5 sec and increases its damage by 10% - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() - druid.AddStaticMod(core.SpellModConfig{ + druid.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.05, ClassMask: DruidSpellStarsurge, }) - druid.AddStaticMod(core.SpellModConfig{ + druid.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ Kind: core.SpellMod_Cooldown_Flat, TimeValue: time.Second * -5, ClassMask: DruidSpellStarsurge, @@ -223,16 +263,41 @@ var ItemSetGladiatorsSanctuary = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Sanctuary", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() - druid.AddStats(stats.Stats{ - stats.Agility: 70, + + bonusValue := 70.0 + druid.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + // If Sim is undefined ItemSwap is disabled so we can add this statically + if sim == nil { + druid.AddStat(stats.Agility, bonusValue) + } else { + druid.AddStatDynamic(sim, stats.Agility, bonusValue) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + druid.AddStatDynamic(sim, stats.Agility, -bonusValue) + }, }) + }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setName string) { druid := agent.(DruidAgent).GetDruid() - druid.AddStats(stats.Stats{ - stats.Agility: 90, + bonusValue := 90.0 + + druid.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ + OnGain: func(sim *core.Simulation, _ *core.Aura) { + // If Sim is undefined ItemSwap is disabled so we can add this statically + if sim == nil { + druid.AddStat(stats.Agility, bonusValue) + } else { + druid.AddStatDynamic(sim, stats.Agility, bonusValue) + } + }, + OnExpire: func(sim *core.Simulation, _ *core.Aura) { + druid.AddStatDynamic(sim, stats.Agility, -bonusValue) + }, }) }, }, diff --git a/sim/druid/lacerate.go b/sim/druid/lacerate.go index a2bf101a02..5d50ccf8d7 100644 --- a/sim/druid/lacerate.go +++ b/sim/druid/lacerate.go @@ -12,7 +12,8 @@ func (druid *Druid) registerLacerateSpell() { initialDamage := 3.65700006485 * druid.ClassSpellScaling // ~3608 initialDamageMul := 1.0 - tickDamageMul := core.TernaryFloat64(druid.HasSetBonus(ItemSetStormridersBattlegarb, 2), 1.1, 1) + // Set bonuses can scale up the ticks relative to the initial hit + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.hasT11Feral2pBonus(), 1.1, 1) } druid.Lacerate = druid.RegisterSpell(Bear, core.SpellConfig{ ActionID: core.ActionID{SpellID: 33745}, @@ -52,7 +53,7 @@ func (druid *Druid) registerLacerateSpell() { dot.SnapshotBaseDamage *= float64(dot.Aura.GetStacks()) attackTable := dot.Spell.Unit.AttackTables[target.UnitIndex] - dot.Spell.DamageMultiplier = tickDamageMul + dot.Spell.DamageMultiplier = getTickDamageMultiplier() dot.SnapshotCritChance = dot.Spell.PhysicalCritChance(attackTable) dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(attackTable, true) }, diff --git a/sim/druid/mangle.go b/sim/druid/mangle.go index 2b10222fc6..50aa1bd5d2 100644 --- a/sim/druid/mangle.go +++ b/sim/druid/mangle.go @@ -118,7 +118,7 @@ func (druid *Druid) registerMangleCatSpell() { } // 4pT11 - if druid.StrengthOfThePantherAura != nil { + if druid.hasT11Feral4pBonus() && druid.StrengthOfThePantherAura != nil { aura := druid.StrengthOfThePantherAura if aura.IsActive() { diff --git a/sim/druid/rake.go b/sim/druid/rake.go index 6eb391089b..f5f4846b16 100644 --- a/sim/druid/rake.go +++ b/sim/druid/rake.go @@ -15,7 +15,7 @@ func (druid *Druid) registerRakeSpell() { flatBaseDamage := coefficient * druid.ClassSpellScaling // ~56 // Set bonuses can scale up the ticks relative to the initial hit - tickDamageMultiplier := core.TernaryFloat64(druid.HasSetBonus(ItemSetStormridersBattlegarb, 2), 1.1, 1) + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.hasT11Feral2pBonus(), 1.1, 1) } druid.Rake = druid.RegisterSpell(Cat, core.SpellConfig{ ActionID: core.ActionID{SpellID: 1822}, @@ -47,7 +47,7 @@ func (druid *Druid) registerRakeSpell() { NumberOfTicks: 3 + druid.Talents.EndlessCarnage, TickLength: time.Second * 3, OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, isRollover bool) { - dot.SnapshotBaseDamage = (flatBaseDamage + 0.147*dot.Spell.MeleeAttackPower()) * tickDamageMultiplier + dot.SnapshotBaseDamage = (flatBaseDamage + 0.147*dot.Spell.MeleeAttackPower()) * getTickDamageMultiplier() attackTable := dot.Spell.Unit.AttackTables[target.UnitIndex] dot.SnapshotCritChance = dot.Spell.PhysicalCritChance(attackTable) dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(attackTable, true) @@ -87,7 +87,7 @@ func (druid *Druid) registerRakeSpell() { return initial }, ExpectedTickDamage: func(sim *core.Simulation, target *core.Unit, spell *core.Spell, _ bool) *core.SpellResult { - tickBase := (flatBaseDamage + 0.147*spell.MeleeAttackPower()) * tickDamageMultiplier + tickBase := (flatBaseDamage + 0.147*spell.MeleeAttackPower()) * getTickDamageMultiplier() ticks := spell.CalcPeriodicDamage(sim, target, tickBase, spell.OutcomeExpectedMagicAlwaysHit) attackTable := spell.Unit.AttackTables[target.UnitIndex] diff --git a/sim/mage/talents_fire.go b/sim/mage/talents_fire.go index 73dd644a54..dbf3132a85 100644 --- a/sim/mage/talents_fire.go +++ b/sim/mage/talents_fire.go @@ -346,7 +346,7 @@ func (mage *Mage) applyIgnite() { igniteDamageMultiplier := []float64{0.0, 0.13, 0.26, 0.40}[mage.Talents.Ignite] - mage.Ignite = cata.RegisterIgniteEffect(&mage.Unit, cata.IgniteConfig{ + mage.Ignite, _ = cata.RegisterIgniteEffect(&mage.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 12846}, DotAuraLabel: "Ignite", DotAuraTag: "IgniteDot", diff --git a/sim/paladin/items.go b/sim/paladin/items.go index d6cc35da28..c8c872e5ad 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -38,9 +38,9 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Immolation", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { paladin := agent.(PaladinAgent).GetPaladin() - cata.RegisterIgniteEffect(&paladin.Unit, cata.IgniteConfig{ + spell, procTrigger := cata.RegisterIgniteEffect(&paladin.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 35395}.WithTag(3), // actual 99092 DisableCastMetrics: true, DotAuraLabel: "Flames of the Faithful" + paladin.Label, @@ -57,6 +57,9 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ return result.Damage * 0.15 }, }) + + paladin.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) + }, 4: func(agent core.Agent, _ string) { // Handled in talents_retribution.go diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index 0377bf4946..3f08ff6901 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -2176,15 +2176,15 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 44234.27796 - tps: 47989.84774 + dps: 44234.53136 + tps: 47990.10114 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39972.68436 - tps: 39842.46663 + dps: 39972.8988 + tps: 39842.68108 } } dps_results: { @@ -2197,36 +2197,36 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 26334.8875 - tps: 30126.11856 + dps: 26332.79431 + tps: 30124.02536 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24372.39631 - tps: 24258.94756 + dps: 24379.40754 + tps: 24265.95878 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30910.96336 - tps: 29476.57832 + dps: 30911.05961 + tps: 29476.67457 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43747.71388 - tps: 47621.30679 + dps: 43748.43512 + tps: 47622.02803 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39252.47494 - tps: 39118.11625 + dps: 39253.15722 + tps: 39118.79853 } } dps_results: { @@ -2239,36 +2239,36 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25974.40299 - tps: 29704.77626 + dps: 25973.71971 + tps: 29704.09298 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23981.82247 - tps: 23875.71856 + dps: 23980.19598 + tps: 23874.09207 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31179.83661 - tps: 29753.45684 + dps: 31179.47166 + tps: 29753.0919 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43747.71388 - tps: 47621.30679 + dps: 43748.43512 + tps: 47622.02803 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39252.47494 - tps: 39118.11625 + dps: 39253.15722 + tps: 39118.79853 } } dps_results: { @@ -2281,22 +2281,22 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25974.40299 - tps: 29704.77626 + dps: 25973.71971 + tps: 29704.09298 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23981.82247 - tps: 23875.71856 + dps: 23980.19598 + tps: 23874.09207 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31179.83661 - tps: 29753.45684 + dps: 31179.47166 + tps: 29753.0919 } } dps_results: { diff --git a/sim/rogue/items.go b/sim/rogue/items.go index fc2e0fea3e..ad108294e0 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -78,12 +78,12 @@ func MakeT12StatAura(action core.ActionID, stat stats.Stat, name string) core.Au var Tier12 = core.NewItemSet(core.ItemSet{ Name: "Vestments of the Dark Phoenix", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { // Your melee critical strikes deal 6% additional damage as Fire over 4 sec. // Rolls like ignite // Tentatively, this is just Ignite. Testing required to validate behavior. rogue := agent.GetCharacter() - cata.RegisterIgniteEffect(&rogue.Unit, cata.IgniteConfig{ + spell, procTrigger := cata.RegisterIgniteEffect(&rogue.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 99173}, DotAuraLabel: "Burning Wounds", IncludeAuraDelay: true, @@ -99,6 +99,9 @@ var Tier12 = core.NewItemSet(core.ItemSet{ return result.Damage * .06 }, }) + + rogue.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) + }, 4: func(agent core.Agent, _ string) { // Your Tricks of the Trade ability also causes you to gain a 25% increase to Haste, Mastery, or Critical Strike chosen at random for 30 sec. diff --git a/sim/warrior/items.go b/sim/warrior/items.go index 9377291fcc..c9bc8c6f2e 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -202,10 +202,10 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ Name: "Molten Giant Battleplate", Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() - cata.RegisterIgniteEffect(&character.Unit, cata.IgniteConfig{ + spell, procTrigger := cata.RegisterIgniteEffect(&character.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 23922}.WithTag(3), // actual 99240 DisableCastMetrics: true, DotAuraLabel: "Combust", @@ -222,6 +222,8 @@ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ return result.Damage * 0.2 }, }) + + character.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) }, 4: func(agent core.Agent, setName string) { character := agent.(WarriorAgent).GetWarrior() From 6ba0a2f07fa8e1d0419dd7322a2ac0e1bc42e88f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 20 Dec 2024 18:12:00 +0100 Subject: [PATCH 048/127] WIP: Refactor to set bonus aura --- makefile | 2 +- sim/common/cata/other_effects.go | 12 +- sim/common/cata/stat_bonus_procs.go | 4 +- sim/common/tbc/melee_sets.go | 16 +- sim/common/wotlk/_item_sets.go | 14 +- sim/core/item_sets.go | 187 +++++++++------------ sim/death_knight/items.go | 107 ++++++------ sim/druid/druid.go | 4 +- sim/druid/items.go | 141 ++++++---------- sim/druid/survival_instincts.go | 6 +- sim/hunter/cata_items.go | 149 +++++++++-------- sim/hunter/cobra_shot.go | 5 +- sim/hunter/hunter.go | 4 - sim/hunter/steady_shot.go | 6 +- sim/hunter/wotlk_items.go | 49 +++--- sim/mage/combustion.go | 2 +- sim/mage/items.go | 56 ++++--- sim/mage/mage.go | 4 - sim/mage/talents_arcane.go | 7 +- sim/mage/talents_fire.go | 2 +- sim/mage/talents_frost.go | 2 +- sim/paladin/guardian_of_ancient_kings.go | 56 ++----- sim/paladin/inquisition.go | 4 +- sim/paladin/items.go | 176 ++++++++++++-------- sim/paladin/paladin.go | 2 + sim/paladin/talents_retribution.go | 4 - sim/priest/items.go | 166 +++++++++---------- sim/priest/priest.go | 1 - sim/rogue/assassination/vendetta.go | 8 +- sim/rogue/combat/adrenaline_rush.go | 9 +- sim/rogue/items.go | 87 +++++----- sim/rogue/rogue.go | 4 +- sim/rogue/subtlety/shadow_dance.go | 12 +- sim/shaman/_items_wotlk.go | 60 +++---- sim/shaman/chain_lightning.go | 2 +- sim/shaman/items.go | 198 +++++++++++------------ sim/warlock/doomguard.go | 8 +- sim/warlock/infernal.go | 9 +- sim/warlock/items.go | 70 ++++---- sim/warlock/soul_fire.go | 4 +- sim/warrior/_items.go | 66 ++++---- sim/warrior/items.go | 173 +++++++++----------- sim/warrior/shield_block.go | 11 -- 43 files changed, 908 insertions(+), 1001 deletions(-) diff --git a/makefile b/makefile index 9abb8cbf64..b8b02800d9 100644 --- a/makefile +++ b/makefile @@ -241,7 +241,7 @@ sim/core/items/all_items.go: $(call rwildcard,tools/database,*.go) $(call rwildc .PHONY: test test: $(OUT_DIR)/lib.wasm binary_dist/dist.go - go test --tags=with_db ./sim/... + go test --tags=with_db ./sim/paladin/retribution/... .PHONY: update-tests update-tests: diff --git a/sim/common/cata/other_effects.go b/sim/common/cata/other_effects.go index ee02840ac8..b1ad12ed40 100644 --- a/sim/common/cata/other_effects.go +++ b/sim/common/cata/other_effects.go @@ -1380,9 +1380,10 @@ type IgniteConfig struct { ProcTrigger core.ProcTrigger // Ignores the Handler field and creates a custom one, but uses all others. DamageCalculator IgniteDamageCalculator IncludeAuraDelay bool // "munching" and "free roll-over" interactions + SetBonusAura *core.Aura } -func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) (*core.Spell, *core.Aura) { +func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) *core.Spell { spellFlags := core.SpellFlagIgnoreModifiers | core.SpellFlagNoSpellMods | core.SpellFlagNoOnCastComplete if config.DisableCastMetrics { @@ -1489,6 +1490,11 @@ func RegisterIgniteEffect(unit *core.Unit, config IgniteConfig) (*core.Spell, *c } } - procTriggerAura := core.MakeProcTriggerAura(unit, procTrigger) - return igniteSpell, procTriggerAura + if config.SetBonusAura != nil { + config.SetBonusAura.AttachProcTrigger(procTrigger) + } else { + core.MakeProcTriggerAura(unit, procTrigger) + } + + return igniteSpell } diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 64eaad5f61..56e58591fb 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -1261,8 +1261,8 @@ func init() { var ItemSetAgonyAndTorment = core.NewItemSet(core.ItemSet{ Name: "Agony and Torment", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() procAura := character.NewTemporaryStatsAura( diff --git a/sim/common/tbc/melee_sets.go b/sim/common/tbc/melee_sets.go index 09b51cab8b..643c326e08 100644 --- a/sim/common/tbc/melee_sets.go +++ b/sim/common/tbc/melee_sets.go @@ -12,8 +12,8 @@ import ( var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ Name: "The Fists of Fury", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() procSpell := character.RegisterSpell(core.SpellConfig{ @@ -54,8 +54,8 @@ var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ Name: "Stormshroud Armor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(a core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(a core.Agent, _ *core.Aura) { char := a.GetCharacter() proc := char.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 18980}, @@ -87,7 +87,7 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ }, }) }, - 3: func(a core.Agent, _ string) { + 3: func(a core.Agent, _ *core.Aura) { char := a.GetCharacter() if !char.HasEnergyBar() { return @@ -118,7 +118,7 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ }) }, - 4: func(a core.Agent, _ string) { + 4: func(a core.Agent, _ *core.Aura) { a.GetCharacter().AddStat(stats.AttackPower, 14) }, }, @@ -126,8 +126,8 @@ var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ var ItemSetTwinBladesOfAzzinoth = core.NewItemSet(core.ItemSet{ Name: "The Twin Blades of Azzinoth", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeDemon { diff --git a/sim/common/wotlk/_item_sets.go b/sim/common/wotlk/_item_sets.go index d41e38dc94..7f2bdd54b4 100644 --- a/sim/common/wotlk/_item_sets.go +++ b/sim/common/wotlk/_item_sets.go @@ -12,8 +12,8 @@ import ( var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ Name: "Purified Shard of the Gods", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 222}) applyShardOfTheGodsDamageProc(agent.GetCharacter(), false) applyShardOfTheGodsHealingProc(agent.GetCharacter(), false) @@ -23,8 +23,8 @@ var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ var ItemSetShinyShardOfTheGods = core.NewItemSet(core.ItemSet{ Name: "Shiny Shard of the Gods", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 250}) applyShardOfTheGodsDamageProc(agent.GetCharacter(), true) applyShardOfTheGodsHealingProc(agent.GetCharacter(), true) @@ -121,8 +121,8 @@ func applyShardOfTheGodsHealingProc(character *core.Character, isHeroic bool) { func makeUndeadSet(setName string) *core.ItemSet { return core.NewItemSet(core.ItemSet{ Name: setName, - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { character.PseudoStats.DamageDealtMultiplier *= 1.01 @@ -134,7 +134,7 @@ func makeUndeadSet(setName string) *core.ItemSet { character.PseudoStats.DamageDealtMultiplier *= 1.02 / 1.01 } }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { character.PseudoStats.DamageDealtMultiplier *= 1.03 / 1.02 diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index f48d364138..bd1b554f8b 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -5,9 +5,11 @@ import ( "slices" "github.com/wowsims/cata/sim/core/proto" + "github.com/wowsims/cata/sim/core/stats" ) -type ApplySetItemEffect func(agent Agent, setName string) +type ApplySetBonus func(agent Agent, setBonusAura *Aura) + type ItemSet struct { ID int32 Name string @@ -17,7 +19,7 @@ type ItemSet struct { // before the Sim starts. // // The function should apply any benefits provided by the set bonus. - Bonuses map[int32]ApplySetItemEffect + Bonuses map[int32]ApplySetBonus } var ItemSetSlots = []proto.ItemSlot{ @@ -113,7 +115,7 @@ type SetBonus struct { NumPieces int32 // Function for applying the effects of this set bonus. - BonusEffect ApplySetItemEffect + BonusEffect ApplySetBonus } // Returns a list describing all active set bonuses. @@ -183,20 +185,46 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { activeSetBonuses := character.GetActiveSetBonuses() for _, activeSetBonus := range activeSetBonuses { - activeSetBonus.BonusEffect(agent, activeSetBonus.Name) + setBonusAura := character.makeSetBonusStatusAura(activeSetBonus.Name, activeSetBonus.NumPieces, true) + activeSetBonus.BonusEffect(agent, setBonusAura) } if character.ItemSwap.IsEnabled() { - unequippedSetBonuses := FilterSlice(character.GetSetBonuses(character.ItemSwap.unEquippedItems), func(unequippeBonus SetBonus) bool { - return !character.HasActiveSetBonus(unequippeBonus.Name, unequippeBonus.NumPieces) + unequippedSetBonuses := FilterSlice(character.GetSetBonuses(character.ItemSwap.unEquippedItems), func(unequippedBonus SetBonus) bool { + return !character.HasActiveSetBonus(unequippedBonus.Name, unequippedBonus.NumPieces) }) for _, unequippedSetBonus := range unequippedSetBonuses { - unequippedSetBonus.BonusEffect(agent, unequippedSetBonus.Name) + setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, true) + unequippedSetBonus.BonusEffect(agent, setBonusAura) } } } +func (character *Character) makeSetBonusStatusAura(setName string, numPieces int32, activeAtStart bool) *Aura { + statusAura := character.GetOrRegisterAura(Aura{ + Label: fmt.Sprintf("%s %dP", setName, numPieces), + BuildPhase: Ternary(activeAtStart, CharacterBuildPhaseGear, CharacterBuildPhaseNone), + Duration: NeverExpires, + }) + + if activeAtStart { + statusAura = MakePermanent(statusAura) + } + + if character.ItemSwap.IsEnabled() { + character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, _ proto.ItemSlot) { + if character.HasActiveSetBonus(setName, numPieces) { + statusAura.Activate(sim) + } else { + statusAura.Deactivate(sim) + } + }) + } + + return statusAura +} + // Returns the names of all active set bonuses. func (character *Character) GetActiveSetBonusNames() []string { activeSetBonuses := character.GetActiveSetBonuses() @@ -208,126 +236,61 @@ func (character *Character) GetActiveSetBonusNames() []string { return names } -type CustomSetBonusCallbackConfig struct { - // Override default behavior when the set bonus is gained. - OnGain func(sim *Simulation, aura *Aura) - // Override default behavior when the set bonus is lost. - OnExpire func(sim *Simulation, aura *Aura) -} - -// Adds a proc trigger aura that activates when the character has a set bonus. -func (character *Character) MakeProcTriggerAuraForSetBonus(setName string, numPieces int32, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { - return character.factory_ProcTriggerAuraForSetBonus(setName, numPieces, &character.Unit, config, customSetBonusCallbackConfig) -} - -func (character *Character) MakeProcTriggerAuraForSetBonusWithUnit(setName string, numPieces int32, unit *Unit, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { - return character.factory_ProcTriggerAuraForSetBonus(setName, numPieces, unit, config, customSetBonusCallbackConfig) +// Adds a spellID to the set bonus so it can be exposed to the APL +func (setBonusTracker *Aura) ExposeToAPL(spellID int32) { + setBonusTracker.ActionID = ActionID{SpellID: spellID} } -func (character *Character) factory_ProcTriggerAuraForSetBonus(setName string, numPieces int32, unit *Unit, config ProcTrigger, customSetBonusCallbackConfig *CustomSetBonusCallbackConfig) *Aura { - aura := MakeProcTriggerAura(unit, config) - - if customSetBonusCallbackConfig == nil { - customSetBonusCallbackConfig = &CustomSetBonusCallbackConfig{} +// Creates a new ProcTriggerAura that is dependent on the set bonus being active +func (setBonusTracker *Aura) MakeDependentProcTriggerAura(unit *Unit, config ProcTrigger) *Aura { + customCastCondition := config.ExtraCondition + if customCastCondition != nil { + config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { + return setBonusTracker.IsActive() && customCastCondition(sim, spell, result) + } + } else { + config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { + return setBonusTracker.IsActive() + } } - character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ - OnGain: func(sim *Simulation, _ proto.ItemSlot) { - if customSetBonusCallbackConfig.OnGain != nil { - customSetBonusCallbackConfig.OnGain(sim, aura) - } else { - aura.Activate(sim) - } - }, - OnExpire: func(sim *Simulation, _ proto.ItemSlot) { - if customSetBonusCallbackConfig.OnExpire != nil { - customSetBonusCallbackConfig.OnExpire(sim, aura) - } else { - aura.Deactivate(sim) - } - }, - }) + aura := MakeProcTriggerAura(unit, config) return aura } -// Adds a static effect that activates when the character has a set bonus. -func (character *Character) MakeCallbackEffectForSetBonus(setName string, numPieces int32, callbackConfig CustomSetBonusCallbackConfig) { - character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ - OnGain: func(sim *Simulation, _ proto.ItemSlot) { - if callbackConfig.OnGain != nil { - callbackConfig.OnGain(sim, nil) - } - }, - OnExpire: func(sim *Simulation, _ proto.ItemSlot) { - if callbackConfig.OnExpire != nil { - callbackConfig.OnExpire(sim, nil) - } - }, - OnDisabled: func() { - if callbackConfig.OnGain != nil { - callbackConfig.OnGain(nil, nil) - } - }, - }) +// Attaches a ProcTrigger to the set bonus +func (setBonusTracker *Aura) AttachProcTrigger(config ProcTrigger) { + ApplyProcTriggerCallback(setBonusTracker.Unit, setBonusTracker, config) } -// Handles "ignite-like" set bonus effects -func (character *Character) MakeIgniteHandlerEffectForSetBonus(setName string, numPieces int32, spell *Spell, procTrigger *Aura) { - character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ - OnGain: func(sim *Simulation, _ proto.ItemSlot) { - spell.Flags &= ^SpellFlagSwapped - procTrigger.Activate(sim) - }, - OnExpire: func(sim *Simulation, _ proto.ItemSlot) { - spell.Flags |= SpellFlagSwapped - procTrigger.Deactivate(sim) - }, +// Attaches a SpellMod to the set bonus +func (setBonusTracker *Aura) AttachSpellMod(spellModConfig SpellModConfig) { + setBonusDep := setBonusTracker.Unit.AddDynamicMod(spellModConfig) + + setBonusTracker.ApplyOnGain(func(_ *Aura, _ *Simulation) { + setBonusDep.Activate() }) -} -// Adds a static effect that activates when the character has a set bonus. -func (character *Character) MakeDynamicModForSetBonus(setName string, numPieces int32, spellModConfig SpellModConfig) { - - setBonusDep := character.AddDynamicMod(spellModConfig) - character.registerSetBonusForItemSwap(setName, numPieces, ItemSwapRegistrationConfig{ - OnGain: func(_ *Simulation, _ proto.ItemSlot) { - setBonusDep.Activate() - }, - OnExpire: func(_ *Simulation, _ proto.ItemSlot) { - setBonusDep.Deactivate() - }, - OnDisabled: func() { - setBonusDep.Activate() - }, + setBonusTracker.ApplyOnExpire(func(_ *Aura, _ *Simulation) { + setBonusDep.Deactivate() }) } -type ItemSwapRegistrationConfig struct { - // Will be called when your set bonus is gained. - OnGain func(sim *Simulation, slot proto.ItemSlot) - // Will be called when your set bonus is lost. - OnExpire func(sim *Simulation, slot proto.ItemSlot) - // Will be called when ItemSwap is disabled. - OnDisabled func() +// Adds Stats to the set bonus +func (setBonusTracker *Aura) AttachStatsBuff(stats stats.Stats) { + setBonusTracker.ApplyOnGain(func(aura *Aura, sim *Simulation) { + aura.Unit.AddStatsDynamic(sim, stats) + }) + + setBonusTracker.ApplyOnExpire(func(aura *Aura, sim *Simulation) { + aura.Unit.AddStatsDynamic(sim, stats.Invert()) + }) } -func (character *Character) registerSetBonusForItemSwap(setName string, numPieces int32, config ItemSwapRegistrationConfig) { - if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, slot proto.ItemSlot) { - if character.HasActiveSetBonus(setName, numPieces) { - if config.OnGain != nil { - config.OnGain(sim, slot) - } - } else { - if config.OnExpire != nil { - config.OnExpire(sim, slot) - } - } - }) - } else { - if config.OnDisabled != nil { - config.OnDisabled() - } - } +// Adds a Stat to the set bonus +func (setBonusTracker *Aura) AttachStatBuff(stat stats.Stat, value float64) { + statsToAdd := stats.Stats{} + statsToAdd[stat] = value + setBonusTracker.AttachStatsBuff(statsToAdd) } diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index d9eee17131..b487e148ad 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -13,18 +13,16 @@ import ( // T11 - DPS var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { // Increases the critical strike chance of your Death Coil and Frost Strike abilities by 5%. - dk := agent.(DeathKnightAgent).GetDeathKnight() - - dk.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, ClassMask: DeathKnightSpellDeathCoil | DeathKnightSpellDeathCoilHeal | DeathKnightSpellFrostStrike, FloatValue: 5, }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Each time you gain a Death Rune, you also gain 1% increased attack power for 30 sec. Stacks up to 3 times. // Also activated whenever KM procs character := agent.GetCharacter() @@ -49,7 +47,7 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ }, }) - character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Magma Plated Battlegear", Callback: core.CallbackOnCastComplete, ClassSpellMask: DeathKnightSpellConvertToDeathRune | DeathKnightSpellKillingMachine, @@ -58,7 +56,7 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ aura.Activate(sim) aura.AddStack(sim) }, - }, nil) + }) }, }, }) @@ -66,18 +64,16 @@ var ItemSetMagmaPlatedBattlegear = core.NewItemSet(core.ItemSet{ // T11 - Tank var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Magma Plated Battlearmor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { // Increases the damage done by your Death Strike ability by 5%. - dk := agent.(DeathKnightAgent).GetDeathKnight() - - dk.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, ClassMask: DeathKnightSpellDeathStrike, FloatValue: 0.05, }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the duration of your Icebound Fortitude ability by 50%. // Implemented in icebound_fortitude.go dk := agent.(DeathKnightAgent).GetDeathKnight() @@ -86,14 +82,14 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ return } - dk.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, _ *core.Aura) { - dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second - }, - OnExpire: func(_ *core.Simulation, _ *core.Aura) { - dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() - }, + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second }) + + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + }) + }) }, }, @@ -102,8 +98,8 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ // T12 - DPS var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { dk := agent.(DeathKnightAgent).GetDeathKnight() actionID := core.ActionID{SpellID: 98971} @@ -127,7 +123,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) - dk.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Smolering Rune Trigger", ActionID: actionID, ClassSpellMask: DeathKnightSpellHornOfWinter, @@ -135,11 +131,9 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buff.Activate(sim) }, - }, nil) - + }) }, - 4: func(agent core.Agent, setName string) { - + 4: func(agent core.Agent, setBonusAura *core.Aura) { dk := agent.(DeathKnightAgent).GetDeathKnight() damage := 0.0 @@ -164,7 +158,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ var flamingTormentSpellForObliterate = dk.RegisterSpell(newFlamingTormentSpell(49020)) var flamingTormentSpellForScourgeStrike = dk.RegisterSpell(newFlamingTormentSpell(55090)) - dk.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Flaming Torment Trigger", Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: DeathKnightSpellObliterate | DeathKnightSpellScourgeStrike | DeathKnightSpellScourgeStrikeShadow, @@ -177,8 +171,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ flamingTormentSpellForScourgeStrike.Cast(sim, result.Target) } }, - }, nil) - + }) }, }, }) @@ -186,9 +179,8 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ // T12 - Tank var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Elementium Deathplate Battlearmor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { dk := agent.(DeathKnightAgent).GetDeathKnight() dk.BurningBloodSpell = dk.RegisterSpell(core.SpellConfig{ @@ -221,7 +213,7 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ }, }) - dk.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Burning Blood Trigger", ActionID: core.ActionID{SpellID: 98956}, ProcMask: core.ProcMaskMelee, @@ -232,10 +224,9 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { dk.BurningBloodSpell.Cast(sim, result.Target) }, - }, nil) - + }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go }, @@ -249,8 +240,8 @@ func (dk *DeathKnight) hasT12Tank4pc() bool { // T13 - DPS var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Necrotic Boneplate Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() @@ -259,27 +250,27 @@ var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ if !spell.Matches(DeathKnightSpellDeathCoil) { return } - dk.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, _ *core.Aura) { - if dk.FreezingFogAura != nil { - dk.FreezingFogAura.MaxStacks = 2 - } - if dk.SuddenDoomProcAura != nil { - dk.SuddenDoomProcAura.MaxStacks = 2 - } - }, - OnExpire: func(_ *core.Simulation, _ *core.Aura) { - if dk.FreezingFogAura != nil { - dk.FreezingFogAura.MaxStacks = 0 - } - if dk.SuddenDoomProcAura != nil { - dk.SuddenDoomProcAura.MaxStacks = 0 - } - }, + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + if dk.FreezingFogAura != nil { + dk.FreezingFogAura.MaxStacks = 2 + } + if dk.SuddenDoomProcAura != nil { + dk.SuddenDoomProcAura.MaxStacks = 2 + } + }) + + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + if dk.FreezingFogAura != nil { + dk.FreezingFogAura.MaxStacks = 0 + } + if dk.SuddenDoomProcAura != nil { + dk.SuddenDoomProcAura.MaxStacks = 0 + } }) }) }, - 4: func(agent core.Agent, _ string) { + 4: func(_ core.Agent, _ *core.Aura) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. // Spell: Runic Mastery (id: 105647) // Handled in talents_unholy.go:applyRunicEmpowerementCorruption() diff --git a/sim/druid/druid.go b/sim/druid/druid.go index 2943ea894e..cf05838146 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -374,9 +374,7 @@ func New(char *core.Character, form DruidForm, selfBuffs SelfBuffs, talents stri } } - if druid.HasSetBonus(ItemSetObsidianArborweaveRegalia, 2) { - druid.BurningTreant = druid.NewBurningTreant() - } + druid.BurningTreant = druid.NewBurningTreant() return druid } diff --git a/sim/druid/items.go b/sim/druid/items.go index b85eb1f195..630ea5d8a9 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -11,11 +11,11 @@ import ( // T11 Feral var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Battlegarb", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, _ *core.Aura) { // Implemented in rake.go and lacerate.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, _ *core.Aura) { druid := agent.(DruidAgent).GetDruid() var apDepByStackCount = map[int32]*stats.StatDependency{} @@ -54,18 +54,17 @@ func (druid *Druid) hasT11Feral4pBonus() bool { // T11 Balance var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Increases the critical strike chance of your Insect Swarm and Moonfire spells by 5% - 2: func(agent core.Agent, setName string) { - character := agent.GetCharacter() - character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 5, ClassMask: DruidSpellDoT | DruidSpellMoonfire | DruidSpellSunfire, }) }, // Whenever Eclipse triggers, your critical strike chance with spells is increased by 15% for 8 sec. Each critical strike you achieve reduces that bonus by 5% - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() tierSet4pMod := druid.AddDynamicMod(core.SpellModConfig{ @@ -96,7 +95,7 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ }) druid.AddEclipseCallback(func(_ Eclipse, gained bool, sim *core.Simulation) { - if druid.HasActiveSetBonus(setName, 4) { + if setBonusAura.IsActive() { if gained { tierSet4pAura.Activate(sim) } else { @@ -111,30 +110,32 @@ var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ // T12 Feral var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Battlegarb", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // TODO: Verify behavior after PTR testing druid := agent.(DruidAgent).GetDruid() - spell, procTrigger := cata.RegisterIgniteEffect(&druid.Unit, cata.IgniteConfig{ + cata.RegisterIgniteEffect(&druid.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 99002}, DotAuraLabel: "Fiery Claws", IncludeAuraDelay: true, + SetBonusAura: setBonusAura, ProcTrigger: core.ProcTrigger{ Name: "Fiery Claws Trigger", Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: DruidSpellMangle | DruidSpellMaul | DruidSpellShred, Outcome: core.OutcomeLanded, + ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { + return setBonusAura.IsActive() + }, }, DamageCalculator: func(result *core.SpellResult) float64 { return result.Damage * 0.1 }, }) - - druid.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Full implementation in berserk.go and barkskin.go druid := agent.(DruidAgent).GetDruid() @@ -166,12 +167,12 @@ func (druid *Druid) hasT12Feral4pBonus() bool { // T12 Balance var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // You have a chance to summon a Burning Treant to assist you in battle for 15 sec when you cast Wrath or Starfire. (Proc chance: 20%, 45s cooldown) - 2: func(agent core.Agent, setName string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() - druid.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ ActionID: core.ActionID{SpellID: 99019}, Name: "Item - Druid T12 Balance 2P Bonus", Callback: core.CallbackOnCastComplete, @@ -181,52 +182,35 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { druid.BurningTreant.EnableWithTimeout(sim, druid.BurningTreant, time.Second*15) }, - }, nil) + }) }, // While not in an Eclipse state, your Wrath generates 3 additional Lunar Energy and your Starfire generates 5 additional Solar Energy. - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() druid.OnSpellRegistered(func(spell *core.Spell) { - if spell.ClassSpellMask == DruidSpellWrath { - druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) - }, + if spell.Matches(DruidSpellWrath) { + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) }) - } - if spell.ClassSpellMask == DruidSpellStarfire { - druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) - }, + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) }) } - }) - aura := core.MakePermanent(druid.RegisterAura(core.Aura{ - ActionID: core.ActionID{SpellID: 99049}, - Label: "Item - Druid T12 Balance 4P Bonus", - Duration: core.NeverExpires, - })) + if spell.Matches(DruidSpellStarfire) { + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) + }) - druid.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - if sim != nil { - aura.Activate(sim) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - aura.Deactivate(sim) - }, + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) + }) + } }) + + setBonusAura.ExposeToAPL(99049) }, }, }) @@ -234,21 +218,19 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ // T13 Balance var ItemSetDeepEarthRegalia = core.NewItemSet(core.ItemSet{ Name: "Deep Earth Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Insect Swarm increases all damage done by your Starfire, Starsurge, and Wrath spells against that target by 3% - 2: func(agent core.Agent, _ string) { + 2: func(_ core.Agent, _ *core.Aura) { }, // Reduces the cooldown of Starsurge by 5 sec and increases its damage by 10% - 4: func(agent core.Agent, setName string) { - druid := agent.(DruidAgent).GetDruid() - - druid.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.05, ClassMask: DruidSpellStarsurge, }) - druid.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_Cooldown_Flat, TimeValue: time.Second * -5, ClassMask: DruidSpellStarsurge, @@ -261,44 +243,13 @@ var ItemSetDeepEarthRegalia = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsSanctuary = core.NewItemSet(core.ItemSet{ ID: 922, Name: "Gladiator's Sanctuary", - - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - druid := agent.(DruidAgent).GetDruid() - - bonusValue := 70.0 - druid.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - // If Sim is undefined ItemSwap is disabled so we can add this statically - if sim == nil { - druid.AddStat(stats.Agility, bonusValue) - } else { - druid.AddStatDynamic(sim, stats.Agility, bonusValue) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - druid.AddStatDynamic(sim, stats.Agility, -bonusValue) - }, - }) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Agility, 70) }, - 4: func(agent core.Agent, setName string) { - druid := agent.(DruidAgent).GetDruid() - bonusValue := 90.0 - - druid.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - // If Sim is undefined ItemSwap is disabled so we can add this statically - if sim == nil { - druid.AddStat(stats.Agility, bonusValue) - } else { - druid.AddStatDynamic(sim, stats.Agility, bonusValue) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - druid.AddStatDynamic(sim, stats.Agility, -bonusValue) - }, - }) + 4: func(agent core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Agility, 90) }, }, }) diff --git a/sim/druid/survival_instincts.go b/sim/druid/survival_instincts.go index 1211dd5191..db11d4f374 100644 --- a/sim/druid/survival_instincts.go +++ b/sim/druid/survival_instincts.go @@ -15,11 +15,14 @@ func (druid *Druid) registerSurvivalInstinctsCD() { cdTimer := druid.NewTimer() cd := time.Minute * 3 + getDuration := func() time.Duration { + return core.TernaryDuration(druid.hasT11Feral4pBonus(), time.Second*18, time.Second*12) + } druid.SurvivalInstinctsAura = druid.RegisterAura(core.Aura{ Label: "Survival Instincts", ActionID: actionID, - Duration: core.TernaryDuration(druid.HasSetBonus(ItemSetStormridersBattlegarb, 4), time.Second * 18, time.Second * 12), + Duration: getDuration(), OnGain: func(aura *core.Aura, sim *core.Simulation) { druid.PseudoStats.DamageTakenMultiplier *= 0.5 }, @@ -38,6 +41,7 @@ func (druid *Druid) registerSurvivalInstinctsCD() { }, }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + druid.SurvivalInstinctsAura.Duration = getDuration() druid.SurvivalInstinctsAura.Activate(sim) }, }) diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 20fc0c29f1..643f7678dc 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -4,6 +4,7 @@ import ( "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -31,35 +32,28 @@ func (hunter *Hunter) newFlamingArrowSpell(spellID int32) core.SpellConfig { var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ Name: "Flamewaker's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var flamingArrowSpellForSteadyShot = hunter.RegisterSpell(hunter.newFlamingArrowSpell(56641)) var flamingArrowSpellForCobraShot = hunter.RegisterSpell(hunter.newFlamingArrowSpell(77767)) - hunter.RegisterAura(core.Aura{ - Label: "T12 2-set", - 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 spell != hunter.SteadyShot && spell != hunter.CobraShot { - return - } - procChance := 0.1 - if sim.RandomFloat("Flaming Arrow") < procChance { - if spell == hunter.SteadyShot { - flamingArrowSpellForSteadyShot.Cast(sim, result.Target) - } else { - flamingArrowSpellForCobraShot.Cast(sim, result.Target) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "T12 2-set", + ClassSpellMask: HunterSpellSteadyShot | HunterSpellCobraShot, + ProcChance: 0.1, + Callback: core.CallbackOnSpellHitDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if spell.Matches(HunterSpellSteadyShot) { + flamingArrowSpellForSteadyShot.Cast(sim, result.Target) + } else { + flamingArrowSpellForCobraShot.Cast(sim, result.Target) } }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var baMod = hunter.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_PowerCost_Pct, @@ -95,32 +89,31 @@ var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ baMod.Deactivate() }, }) - hunter.RegisterAura(core.Aura{ - Label: "T12 4-set", - 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 spell != hunter.AutoAttacks.RangedAuto() { - return - } - procChance := 0.1 - if sim.RandomFloat("Burning Adrenaline") < procChance { - burningAdrenaline.Activate(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "T12 4-set", + ProcChance: 0.1, + ProcMask: core.ProcMaskRangedAuto, + Callback: core.CallbackOnSpellHitDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + burningAdrenaline.Activate(sim) }, }) }, }, }) + var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ Name: "Wyrmstalker Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - // Handled in Cobra and Steady code respectively + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + // Handled in Cobra Shot + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_DamageDone_Flat, + FloatValue: 0.1, + ClassMask: HunterSpellSteadyShot, + }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() var chronoHunter = hunter.RegisterAura(core.Aura{ // 105919 Label: "Chronohunter", @@ -134,7 +127,7 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T13 4-set", Callback: core.CallbackOnCastComplete, ClassSpellMask: HunterSpellArcaneShot, @@ -147,20 +140,34 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ }, }, }) + +func (hunter *Hunter) has2pcT13() bool { + return hunter.HasActiveSetBonus(ItemSetWyrmstalkerBattleGear.Name, 2) +} + var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ Name: "Lightning-Charged Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { // 5% Crit on SS - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, ClassMask: HunterSpellSerpentSting, FloatValue: 5, }) }, - 4: func(agent core.Agent, _ string) { - // Cobra & Steady Shot < 0.2s cast time - // Cannot be spell modded for now + 4: func(_ core.Agent, setBonusAura *core.Aura) { + // Cobra & Steady Shot -0.2s cast time + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_CastTime_Flat, + ClassMask: HunterSpellCobraShot, + TimeValue: -200 * time.Millisecond, + }) + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_CastTime_Flat, + ClassMask: HunterSpellCobraShot, + TimeValue: -200 * time.Millisecond, + }) }, }, }) @@ -168,32 +175,48 @@ var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ ID: 920, Name: "Gladiator's Pursuit", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - hunter := agent.(HunterAgent).GetHunter() - hunter.AddStats(stats.Stats{ - stats.Agility: 70, - }) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Agility, 70) }, - 4: func(agent core.Agent, _ string) { - hunter := agent.(HunterAgent).GetHunter() + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Agility, 90) + // Multiply focus regen 1.05 - hunter.AddStats(stats.Stats{ - stats.Agility: 90, + focusRegenMultiplier := 1.05 + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + aura.Unit.MultiplyFocusRegenSpeed(sim, focusRegenMultiplier) + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + aura.Unit.MultiplyFocusRegenSpeed(sim, 1/focusRegenMultiplier) }) + }, }, }) func (hunter *Hunter) addBloodthirstyGloves() { - switch hunter.Hands().ID { - case 64991, 64709, 60424, 65544, 70534, 70260, 70441, 72369, 73717, 73583: - hunter.AddStaticMod(core.SpellModConfig{ - ClassMask: HunterSpellExplosiveTrap | HunterSpellBlackArrow, - Kind: core.SpellMod_Cooldown_Flat, - TimeValue: -time.Second * 2, + spellMod := hunter.AddDynamicMod(core.SpellModConfig{ + ClassMask: HunterSpellExplosiveTrap | HunterSpellBlackArrow, + Kind: core.SpellMod_Cooldown_Flat, + TimeValue: -time.Second * 2, + }) + + checkGloves := func() { + switch hunter.Hands().ID { + case 64991, 64709, 60424, 65544, 70534, 70260, 70441, 72369, 73717, 73583: + spellMod.Activate() + return + default: + spellMod.Deactivate() + } + } + + if hunter.ItemSwap.IsEnabled() { + hunter.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *core.Simulation, _ proto.ItemSlot) { + checkGloves() }) - default: - break + } else { + checkGloves() } } diff --git a/sim/hunter/cobra_shot.go b/sim/hunter/cobra_shot.go index 2bcdf4111f..2eae8eb2c5 100644 --- a/sim/hunter/cobra_shot.go +++ b/sim/hunter/cobra_shot.go @@ -9,7 +9,6 @@ import ( func (hunter *Hunter) registerCobraShotSpell() { csMetrics := hunter.NewFocusMetrics(core.ActionID{SpellID: 77767}) - focus := core.TernaryFloat64(hunter.HasSetBonus(ItemSetWyrmstalkerBattleGear, 2), 9*2, 9) hunter.CobraShot = hunter.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 77767}, SpellSchool: core.SpellSchoolNature, @@ -25,7 +24,7 @@ func (hunter *Hunter) registerCobraShotSpell() { Cast: core.CastConfig{ DefaultCast: core.Cast{ GCD: time.Second, - CastTime: time.Millisecond*2000 - core.TernaryDuration(hunter.HasSetBonus(ItemSetLightningChargedBattleGear, 4), time.Millisecond*200, 0), + CastTime: time.Millisecond * 2000, }, IgnoreHaste: true, // Hunter GCD is locked at 1.5s ModifyCast: func(_ *core.Simulation, spell *core.Spell, cast *core.Cast) { @@ -42,7 +41,7 @@ func (hunter *Hunter) registerCobraShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (276.806 + spell.RangedAttackPower(target)*0.017) - intFocus := focus + intFocus := core.TernaryFloat64(hunter.has2pcT13(), 9*2, 9) if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 } diff --git a/sim/hunter/hunter.go b/sim/hunter/hunter.go index 4d8b68976d..4f2000e72d 100644 --- a/sim/hunter/hunter.go +++ b/sim/hunter/hunter.go @@ -94,10 +94,6 @@ func NewHunter(character *core.Character, options *proto.Player, hunterOptions * core.FillTalentsProto(hunter.Talents.ProtoReflect(), options.TalentsString, TalentTreeSizes) focusPerSecond := 4.0 - if hunter.HasSetBonus(ItemSetGladiatorsPursuit, 4) { - focusPerSecond *= 1.05 - } - hunter.EnableFocusBar(100+(float64(hunter.Talents.KindredSpirits)*5), focusPerSecond, true, nil) hunter.PseudoStats.CanParry = true diff --git a/sim/hunter/steady_shot.go b/sim/hunter/steady_shot.go index de938a8580..014eba62ed 100644 --- a/sim/hunter/steady_shot.go +++ b/sim/hunter/steady_shot.go @@ -11,7 +11,6 @@ func (hunter *Hunter) registerSteadyShotSpell() { ssMetrics := hunter.NewFocusMetrics(core.ActionID{SpellID: 56641}) - focus := core.TernaryFloat64(hunter.HasSetBonus(ItemSetWyrmstalkerBattleGear, 2), 9*2, 9) hunter.SteadyShot = hunter.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 56641}, SpellSchool: core.SpellSchoolPhysical, @@ -28,7 +27,7 @@ func (hunter *Hunter) registerSteadyShotSpell() { Cast: core.CastConfig{ DefaultCast: core.Cast{ GCD: time.Second, - CastTime: time.Millisecond*2000 - core.TernaryDuration(hunter.HasSetBonus(ItemSetLightningChargedBattleGear, 4), time.Millisecond*200, 0), + CastTime: time.Millisecond * 2000, }, IgnoreHaste: true, ModifyCast: func(_ *core.Simulation, spell *core.Spell, cast *core.Cast) { @@ -47,7 +46,8 @@ func (hunter *Hunter) registerSteadyShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (280.182 + (spell.RangedAttackPower(target) * 0.021)) - intFocus := focus + intFocus := core.TernaryFloat64(hunter.has2pcT13(), 9*2, 9) + if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 } diff --git a/sim/hunter/wotlk_items.go b/sim/hunter/wotlk_items.go index 24ccf966db..97784f5ec1 100644 --- a/sim/hunter/wotlk_items.go +++ b/sim/hunter/wotlk_items.go @@ -11,15 +11,13 @@ import ( var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Ahn'Kahar Blood Hunter's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() - const procChance = 0.05 - actionID := core.ActionID{SpellID: 70727} procAura := hunter.RegisterAura(core.Aura{ Label: "AhnKahar 2pc Proc", - ActionID: actionID, + ActionID: core.ActionID{SpellID: 70727}, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.DamageDealtMultiplier *= 1.15 @@ -29,28 +27,23 @@ var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ }, }) - hunter.RegisterAura(core.Aura{ - Label: "AhnKahar 2pc", - 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 spell == hunter.AutoAttacks.RangedAuto() && sim.RandomFloat("AhnKahar 2pc") < procChance { - procAura.Activate(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "AhnKahar 2pc", + ProcChance: 0.05, + ProcMask: core.ProcMaskRangedAuto, + Callback: core.CallbackOnSpellHitDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procAura.Activate(sim) }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() - const procChance = 0.05 - actionID := core.ActionID{SpellID: 70730} var curBonus stats.Stats procAura := hunter.RegisterAura(core.Aura{ Label: "AhnKahar 4pc Proc", - ActionID: actionID, + ActionID: core.ActionID{SpellID: 70730}, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { curBonus = stats.Stats{ @@ -65,16 +58,13 @@ var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ }, }) - hunter.RegisterAura(core.Aura{ - Label: "AhnKahar 4pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell == hunter.SerpentSting && sim.RandomFloat("AhnKahar 4pc") < procChance { - procAura.Activate(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "AhnKahar 4pc", + ProcChance: 0.05, + ClassSpellMask: HunterSpellSerpentSting, + Callback: core.CallbackOnSpellHitDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procAura.Activate(sim) }, }) }, @@ -136,6 +126,7 @@ func init() { triggerAura.OnInit = func(aura *core.Aura, sim *core.Simulation) { initSpell() } + }) }) diff --git a/sim/mage/combustion.go b/sim/mage/combustion.go index 9c686f65bf..711e5e6fce 100644 --- a/sim/mage/combustion.go +++ b/sim/mage/combustion.go @@ -38,7 +38,7 @@ func (mage *Mage) registerCombustionSpell() { spell.DealDamage(sim, result) spell.RelatedDotSpell.Cast(sim, target) } - if mage.t13ProcAura != nil && spell.ProcMask&core.ProcMaskSpellProc == 0 { + if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() && spell.ProcMask&core.ProcMaskSpellProc == 0 { spell.CD.Reduce(time.Second * time.Duration(5*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/items.go b/sim/mage/items.go index 8064b382cb..bfa531d055 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -10,18 +10,18 @@ import ( // T11 var ItemSetFirelordsVestments = core.NewItemSet(core.ItemSet{ Name: "Firelord's Vestments", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { // Increases the critical strike chance of your Death Coil and Frost Strike abilities by 5%. - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, ClassMask: MageSpellArcaneMissilesTick | MageSpellIceLance | MageSpellPyroblast | MageSpellPyroblastDot, FloatValue: 5, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(_ core.Agent, setBonusAura *core.Aura) { //Reduces cast time of Arcane Blast, Fireball, FFB, and Frostbolt by 10% - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, ClassMask: MageSpellArcaneBlast | MageSpellFireball | MageSpellFrostfireBolt | MageSpellFrostbolt, FloatValue: -0.1, @@ -33,13 +33,15 @@ var ItemSetFirelordsVestments = core.NewItemSet(core.ItemSet{ // T12 var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ Name: "Firehawk Robes of Conflagration", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // You have a chance to summon a Mirror Image to assist you in battle for 15 sec when you cast Frostbolt, Fireball, Frostfire Bolt, or Arcane Blast. // (Proc chance: 20%, 45s cooldown) - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { mage := agent.(MageAgent).GetMage() - core.MakeProcTriggerAura(&mage.Unit, core.ProcTrigger{ + mage.t12MirrorImage = mage.NewT12MirrorImage() + + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Mage T12 2P Bonus", Callback: core.CallbackOnCastComplete, ClassSpellMask: MageSpellArcaneBlast | MageSpellFireball | MageSpellFrostfireBolt | MageSpellFrostbolt, @@ -52,36 +54,38 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ }, // Your spells have an increased chance to trigger Brain Freeze or Hot Streak. // In addition, Arcane Power decreases the cost of your damaging spells by 10% instead of increasing their cost. - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Arcane Power Cost reduction implemented in: // talents_arcane.go#278 mage := agent.(MageAgent).GetMage() - core.MakePermanent(mage.RegisterAura(core.Aura{ - Label: "Item - Mage T12 4P Bonus", - ActionID: core.ActionID{SpellID: 99064}, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - mage.brainFreezeProcChance += .15 - mage.baseHotStreakProcChance += 0.30 - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - mage.brainFreezeProcChance -= .15 - mage.baseHotStreakProcChance -= .30 - }, - })) + setBonusAura.ApplyOnGain(func(_ *core.Aura, _ *core.Simulation) { + mage.brainFreezeProcChance += .15 + mage.baseHotStreakProcChance += 0.30 + }) + setBonusAura.ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) { + mage.brainFreezeProcChance -= .15 + mage.baseHotStreakProcChance -= .30 + }) + + setBonusAura.ExposeToAPL(99064) }, }, }) +func (mage *Mage) has4pcT12() bool { + return mage.HasActiveSetBonus(ItemSetFirehawkRobesOfConflagration.Name, 4) +} + // T13 var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ Name: "Time Lord's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Your Arcane Blast has a 100% chance and your Fireball, Pyroblast, Frostfire Bolt, and Frostbolt spells have a 50% chance to grant Stolen Time, increasing your haste rating by 50 for 30 sec and stacking up to 10 times. // When Arcane Power, Combustion, or Icy Veins expires, all stacks of Stolen Time are lost. - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() mage := agent.(MageAgent).GetMage() @@ -99,8 +103,8 @@ var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ BonusPerStack: stats.Stats{stats.HasteRating: 50}, }) - newStolenTimeTrigger := func(procChance float64, spellMask int64) { - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + newStolenTimeTrigger := func(procChance float64, spellMask int64) *core.Aura { + return setBonusAura.MakeDependentProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Stolen Time Trigger", ActionID: core.ActionID{ItemID: 105788}, Callback: core.CallbackOnSpellHitDealt, @@ -118,7 +122,7 @@ var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ newStolenTimeTrigger(0.5, MageSpellFireball|MageSpellPyroblast|MageSpellFrostfireBolt|MageSpellFrostbolt) }, // Each stack of Stolen Time also reduces the cooldown of Arcane Power by 7 sec, Combustion by 5 sec, and Icy Veins by 15 sec. - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Cooldown reduction handlers can be found in: // combustion.go // talents_arcane.go diff --git a/sim/mage/mage.go b/sim/mage/mage.go index a16accad20..fa2f38bd73 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -177,10 +177,6 @@ func NewMage(character *core.Character, options *proto.Player, mageOptions *prot mage.flameOrb = mage.NewFlameOrb() mage.frostfireOrb = mage.NewFrostfireOrb() - if mage.HasSetBonus(ItemSetFirehawkRobesOfConflagration, 2) { - mage.t12MirrorImage = mage.NewT12MirrorImage() - } - return mage } diff --git a/sim/mage/talents_arcane.go b/sim/mage/talents_arcane.go index bc657896c0..b66a304aa7 100644 --- a/sim/mage/talents_arcane.go +++ b/sim/mage/talents_arcane.go @@ -284,7 +284,7 @@ func (mage *Mage) registerArcanePowerCD() { arcanePowerCostMod := mage.AddDynamicMod(core.SpellModConfig{ ClassMask: MageSpellsAllDamaging, - FloatValue: core.TernaryFloat64(mage.HasSetBonus(ItemSetFirehawkRobesOfConflagration, 4), -0.1, 0.2), + FloatValue: 0.2, Kind: core.SpellMod_PowerCost_Pct, }) @@ -302,7 +302,10 @@ func (mage *Mage) registerArcanePowerCD() { if mage.arcanePowerGCDmod != nil { mage.arcanePowerGCDmod.Activate() } + + arcanePowerCostMod.UpdateFloatValue(core.TernaryFloat64(mage.has4pcT12(), -0.1, 0.2)) arcanePowerCostMod.Activate() + arcanePowerDmgMod.Activate() }, OnExpire: func(_ *core.Aura, sim *core.Simulation) { @@ -328,7 +331,7 @@ func (mage *Mage) registerArcanePowerCD() { }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { arcanePowerAura.Activate(sim) - if mage.t13ProcAura != nil { + if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() { spell.CD.Reduce(time.Second * time.Duration(7*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/talents_fire.go b/sim/mage/talents_fire.go index dbf3132a85..73dd644a54 100644 --- a/sim/mage/talents_fire.go +++ b/sim/mage/talents_fire.go @@ -346,7 +346,7 @@ func (mage *Mage) applyIgnite() { igniteDamageMultiplier := []float64{0.0, 0.13, 0.26, 0.40}[mage.Talents.Ignite] - mage.Ignite, _ = cata.RegisterIgniteEffect(&mage.Unit, cata.IgniteConfig{ + mage.Ignite = cata.RegisterIgniteEffect(&mage.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 12846}, DotAuraLabel: "Ignite", DotAuraTag: "IgniteDot", diff --git a/sim/mage/talents_frost.go b/sim/mage/talents_frost.go index be8cdc4321..546923f1ab 100644 --- a/sim/mage/talents_frost.go +++ b/sim/mage/talents_frost.go @@ -121,7 +121,7 @@ func (mage *Mage) registerIcyVeinsCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { icyVeinsAura.Activate(sim) - if mage.t13ProcAura != nil { + if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() { spell.CD.Reduce(time.Second * time.Duration(15*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index 12a48b296e..b99793c31a 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -8,13 +8,6 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -func applyT11Prot4pcBonus(duration time.Duration) time.Duration { - return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) -} -func (paladin *Paladin) hasT11Prot4pc() bool { - return paladin.HasActiveSetBonus(ItemSetReinforcedSapphiriumBattlearmor.Name, 4) -} - func (paladin *Paladin) registerGuardianOfAncientKings() { var duration time.Duration @@ -44,11 +37,7 @@ func (paladin *Paladin) registerGuardianOfAncientKings() { func (paladin *Paladin) registerHolyGuardian(duration time.Duration) *core.Spell { actionID := core.ActionID{SpellID: 86150} - if paladin.hasT11Prot4pc() { - duration = applyT11Prot4pcBonus(duration) - } - - goakAura := paladin.RegisterAura(core.Aura{ + paladin.GoakAura = paladin.RegisterAura(core.Aura{ Label: "Guardian of Ancient Kings" + paladin.Label, ActionID: actionID, Duration: duration, @@ -77,7 +66,7 @@ func (paladin *Paladin) registerHolyGuardian(duration time.Duration) *core.Spell }, ApplyEffects: func(sim *core.Simulation, unit *core.Unit, spell *core.Spell) { - goakAura.Activate(sim) + paladin.GoakAura.Activate(sim) paladin.AncientGuardian.Enable(sim, paladin.AncientGuardian) paladin.AncientGuardian.CancelGCDTimer(sim) }, @@ -87,12 +76,7 @@ func (paladin *Paladin) registerHolyGuardian(duration time.Duration) *core.Spell func (paladin *Paladin) registerProtectionGuardian(duration time.Duration) *core.Spell { actionID := core.ActionID{SpellID: 86150} - hasT11Prot4pc := paladin.hasT11Prot4pc() - if hasT11Prot4pc { - duration = applyT11Prot4pcBonus(duration) - } - - goakAura := paladin.RegisterAura(core.Aura{ + paladin.GoakAura = paladin.RegisterAura(core.Aura{ Label: "Guardian of Ancient Kings" + paladin.Label, ActionID: actionID, Duration: duration, @@ -122,7 +106,7 @@ func (paladin *Paladin) registerProtectionGuardian(duration time.Duration) *core }, ApplyEffects: func(sim *core.Simulation, unit *core.Unit, spell *core.Spell) { - goakAura.Activate(sim) + paladin.GoakAura.Activate(sim) }, }) } @@ -134,11 +118,10 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor strDepByStackCount[int32(i)] = paladin.NewDynamicMultiplyStat(stats.Strength, 1.0+0.01*float64(i)) } - ancientPowerDuration := duration + time.Second*1 - ancientPower := paladin.RegisterAura(core.Aura{ + paladin.AncientPowerAura = paladin.RegisterAura(core.Aura{ Label: "Ancient Power" + paladin.Label, ActionID: core.ActionID{SpellID: 86700}, - Duration: ancientPowerDuration, + Duration: duration + time.Second*1, MaxStacks: 20, OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { @@ -182,7 +165,7 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor // Deals X Holy damage per application of Ancient Power, // divided evenly among all targets within 10 yards. - baseDamage *= float64(ancientPower.GetStacks()) + baseDamage *= float64(paladin.AncientPowerAura.GetStacks()) baseDamage /= float64(numTargets) for idx := int32(0); idx < numTargets; idx++ { @@ -198,7 +181,7 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor actionID := core.ActionID{SpellID: 86150} - goakAura := paladin.RegisterAura(core.Aura{ + paladin.GoakAura = paladin.RegisterAura(core.Aura{ Label: "Guardian of Ancient Kings" + paladin.Label, ActionID: actionID, Duration: duration, @@ -208,33 +191,18 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor return } - ancientPower.AddStack(sim) + paladin.AncientPowerAura.AddStack(sim) }, OnGain: func(aura *core.Aura, sim *core.Simulation) { - ancientPower.Activate(sim) + paladin.AncientPowerAura.Activate(sim) }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { paladin.AncientGuardian.Pet.Disable(sim) ancientFury.Cast(sim, paladin.CurrentTarget) - ancientPower.Deactivate(sim) + paladin.AncientPowerAura.Deactivate(sim) }, }) - if paladin.ItemSwap.IsEnabled() { - paladin.RegisterItemSwapCallback(core.ItemSetSlots, - func(sim *core.Simulation, _ proto.ItemSlot) { - hasT11Prot4pc := paladin.hasT11Prot4pc() - - if hasT11Prot4pc { - goakAura.Duration = applyT11Prot4pcBonus(duration) - ancientPower.Duration = applyT11Prot4pcBonus(ancientPowerDuration) - } else { - goakAura.Duration = duration - ancientPower.Duration = ancientPowerDuration - } - }) - } - return paladin.RegisterSpell(core.SpellConfig{ ActionID: actionID, Flags: core.SpellFlagAPL, @@ -252,7 +220,7 @@ func (paladin *Paladin) registerRetributionGuardian(duration time.Duration) *cor }, ApplyEffects: func(sim *core.Simulation, unit *core.Unit, spell *core.Spell) { - goakAura.Activate(sim) + paladin.GoakAura.Activate(sim) paladin.AncientGuardian.Enable(sim, paladin.AncientGuardian) paladin.AncientGuardian.CancelGCDTimer(sim) }, diff --git a/sim/paladin/inquisition.go b/sim/paladin/inquisition.go index b835f5aa2f..666e8018b1 100644 --- a/sim/paladin/inquisition.go +++ b/sim/paladin/inquisition.go @@ -11,8 +11,6 @@ func (paladin *Paladin) registerInquisition() { hpMetrics := paladin.NewHolyPowerMetrics(actionId) inquisitionDuration := time.Millisecond * time.Duration(4000*[]float64{1, 1.66, 2.33, 3.0}[paladin.Talents.InquiryOfFaith]) - hasT114pc := paladin.HasSetBonus(ItemSetReinforcedSapphiriumBattleplate, 4) - inquisitionMod := paladin.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.3, @@ -54,7 +52,7 @@ func (paladin *Paladin) registerInquisition() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { holyPower := paladin.GetHolyPowerValue() - if hasT114pc { + if paladin.hasT11Ret4pc() { holyPower += 1 } diff --git a/sim/paladin/items.go b/sim/paladin/items.go index c8c872e5ad..d0e7b6d85b 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -5,71 +5,79 @@ import ( "github.com/wowsims/cata/sim/common/cata" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) // Tier 11 ret var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ Name: "Reinforced Sapphirium Battleplate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - paladin := agent.(PaladinAgent).GetPaladin() - - paladin.AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, ClassMask: SpellMaskTemplarsVerdict, FloatValue: 0.1, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(_ core.Agent, setBonusAura *core.Aura) { // Handled in inquisition.go - - paladin := agent.(PaladinAgent).GetPaladin() - // Used for APL aura check - core.MakePermanent(paladin.RegisterAura(core.Aura{ - Label: "Reinforced Sapphirium Battleplate - T11 4pc" + paladin.Label, - ActionID: core.ActionID{SpellID: 90299}, - })) + setBonusAura.ExposeToAPL(90299) }, }, }) +func (paladin *Paladin) hasT11Ret4pc() bool { + return paladin.HasActiveSetBonus(ItemSetReinforcedSapphiriumBattleplate.Name, 4) +} + // Tier 12 ret var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Immolation", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() - spell, procTrigger := cata.RegisterIgniteEffect(&paladin.Unit, cata.IgniteConfig{ + + cata.RegisterIgniteEffect(&paladin.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 35395}.WithTag(3), // actual 99092 DisableCastMetrics: true, DotAuraLabel: "Flames of the Faithful" + paladin.Label, IncludeAuraDelay: true, + SetBonusAura: setBonusAura, ProcTrigger: core.ProcTrigger{ Name: "Flames of the Faithful" + paladin.Label, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskCrusaderStrike, Outcome: core.OutcomeLanded, + ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { + return setBonusAura.IsActive() + }, }, DamageCalculator: func(result *core.SpellResult) float64 { return result.Damage * 0.15 }, }) - - paladin.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) - }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Handled in talents_retribution.go - paladin := agent.(PaladinAgent).GetPaladin() - // Used for APL aura check - core.MakePermanent(paladin.RegisterAura(core.Aura{ - Label: "Battleplate of Immolation - T12 4pc" + paladin.Label, - ActionID: core.ActionID{SpellID: 99116}, - })) + + paladin.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(SpellMaskZealotry) { + return + } + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + paladin.ZealotryAura.Duration += time.Second * 15 + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + paladin.ZealotryAura.Duration -= time.Second * 15 + }) + }) + + setBonusAura.ExposeToAPL(99116) }, }, }) @@ -77,8 +85,8 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ // Tier 13 ret var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Radiant Glory", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() // Actual buff credited with the Holy Power gain is Virtuous Empowerment hpMetrics := paladin.NewHolyPowerMetrics(core.ActionID{SpellID: 105767}) @@ -89,7 +97,7 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ Label: "Virtuous Empowerment" + paladin.Label, }) - core.MakeProcTriggerAura(&paladin.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T13 2pc trigger" + paladin.Label, ActionID: core.ActionID{SpellID: 105765}, Callback: core.CallbackOnSpellHitDealt, @@ -116,7 +124,7 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() damageMod := paladin.AddDynamicMod(core.SpellModConfig{ @@ -137,7 +145,7 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&paladin.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T13 4pc trigger" + paladin.Label, ActionID: core.ActionID{SpellID: 105820}, Callback: core.CallbackOnCastComplete, @@ -156,17 +164,13 @@ var ItemSetBattleplateOfRadiantGlory = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsVindication = core.NewItemSet(core.ItemSet{ ID: 917, Name: "Gladiator's Vindication", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - paladin := agent.(PaladinAgent).GetPaladin() - - paladin.AddStat(stats.Strength, 70) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Strength, 70) }, - 4: func(agent core.Agent, _ string) { - paladin := agent.(PaladinAgent).GetPaladin() - - paladin.AddStat(stats.Strength, 90) - paladin.AddStaticMod(core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Strength, 90) + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_Cooldown_Flat, ClassMask: SpellMaskJudgementBase, TimeValue: -1 * time.Second, @@ -176,33 +180,71 @@ var ItemSetGladiatorsVindication = core.NewItemSet(core.ItemSet{ }) func (paladin *Paladin) addBloodthirstyGloves() { - switch paladin.Hands().ID { - case 64844, 70649, 60414, 65591, 72379, 70250, 70488, 73707, 73570: - paladin.AddStaticMod(core.SpellModConfig{ - Kind: core.SpellMod_DamageDone_Flat, - ClassMask: SpellMaskCrusaderStrike, - FloatValue: 0.05, + spellMod := paladin.AddDynamicMod(core.SpellModConfig{ + Kind: core.SpellMod_DamageDone_Flat, + ClassMask: SpellMaskCrusaderStrike, + FloatValue: 0.05, + }) + + checkGloves := func() { + switch paladin.Hands().ID { + case 64844, 70649, 60414, 65591, 72379, 70250, 70488, 73707, 73570: + spellMod.Activate() + return + default: + spellMod.Deactivate() + } + } + + if paladin.ItemSwap.IsEnabled() { + paladin.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *core.Simulation, _ proto.ItemSlot) { + checkGloves() }) - default: - break + } else { + checkGloves() } } // Tier 11 prot var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ Name: "Reinforced Sapphirium Battlearmor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - paladin := agent.(PaladinAgent).GetPaladin() - - paladin.AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, ClassMask: SpellMaskCrusaderStrike, FloatValue: 0.1, }) }, - 4: func(agent core.Agent, _ string) { - // Handled in guardian_of_ancient_kings.go + 4: func(agent core.Agent, setBonusAura *core.Aura) { + paladin := agent.(PaladinAgent).GetPaladin() + + paladin.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(SpellMaskGuardianOfAncientKings) { + return + } + + goakBaseDuration := paladin.GoakAura.Duration + acientPowerBaseDuration := paladin.GoakAura.Duration + + applyT11Prot4pcBonus := func(duration time.Duration) time.Duration { + return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) + } + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + if paladin.AncientPowerAura != nil { + paladin.AncientPowerAura.Duration = applyT11Prot4pcBonus(acientPowerBaseDuration) + } + paladin.GoakAura.Duration = applyT11Prot4pcBonus(goakBaseDuration) + }) + + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + if paladin.AncientPowerAura != nil { + paladin.AncientPowerAura.Duration = acientPowerBaseDuration + } + paladin.GoakAura.Duration = goakBaseDuration + }) + }) }, }, }) @@ -210,8 +252,8 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ // Tier 12 prot var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battlearmor of Immolation", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() procDamage := 0.0 @@ -233,7 +275,7 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&paladin.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Righteous Flames" + paladin.Label, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskShieldOfTheRighteous, @@ -246,7 +288,7 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() flamingAegis := paladin.GetOrRegisterAura(core.Aura{ @@ -262,7 +304,7 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&paladin.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "T12 4pc trigger" + paladin.Label, Callback: core.CallbackOnCastComplete, ClassSpellMask: SpellMaskDivineProtection, @@ -286,8 +328,8 @@ var ItemSetBattlearmorOfImmolation = core.NewItemSet(core.ItemSet{ // Tier 13 prot var ItemSetArmorOfRadiantGlory = core.NewItemSet(core.ItemSet{ Name: "Armor of Radiant Glory", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() actionID := core.ActionID{SpellID: 105801} @@ -298,7 +340,7 @@ var ItemSetArmorOfRadiantGlory = core.NewItemSet(core.ItemSet{ return shieldStrength }) - core.MakeProcTriggerAura(&paladin.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Delayed Judgement Proc" + paladin.Label, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskJudgement, @@ -313,8 +355,12 @@ var ItemSetArmorOfRadiantGlory = core.NewItemSet(core.ItemSet{ } }, }) + + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shieldStrength = 0 + }) }, - 4: func(agent core.Agent, _ string) { + 4: func(_ core.Agent, _ *core.Aura) { // Divine Guardian not implemented since it's a raid cooldown and doesn't affect the Paladin }, }, diff --git a/sim/paladin/paladin.go b/sim/paladin/paladin.go index 9cb26911db..3e98067daf 100644 --- a/sim/paladin/paladin.go +++ b/sim/paladin/paladin.go @@ -183,6 +183,8 @@ type Paladin struct { JudgementsOfThePureAura *core.Aura GrandCrusaderAura *core.Aura SacredDutyAura *core.Aura + GoakAura *core.Aura + AncientPowerAura *core.Aura // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet diff --git a/sim/paladin/talents_retribution.go b/sim/paladin/talents_retribution.go index 0a61994459..0e6e31505c 100644 --- a/sim/paladin/talents_retribution.go +++ b/sim/paladin/talents_retribution.go @@ -339,10 +339,6 @@ func (paladin *Paladin) applyZealotry() { actionId := core.ActionID{SpellID: 85696} duration := time.Second * 20 - if paladin.HasSetBonus(ItemSetBattleplateOfImmolation, 4) { - duration += time.Second * 15 - } - paladin.ZealotryAura = paladin.RegisterAura(core.Aura{ Label: "Zealotry" + paladin.Label, ActionID: actionId, diff --git a/sim/priest/items.go b/sim/priest/items.go index 5d99ffffb1..8355115210 100644 --- a/sim/priest/items.go +++ b/sim/priest/items.go @@ -9,8 +9,8 @@ import ( // var ItemSetVestmentsOfAbsolution = core.NewItemSet(core.ItemSet{ // Name: "Vestments of Absolution", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -18,7 +18,7 @@ import ( // ClassMask: PriestSpellPrayerOfHealing, // }) // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -31,8 +31,8 @@ import ( // var ItemSetValorous = core.NewItemSet(core.ItemSet{ // Name: "Garb of Faith", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -40,7 +40,7 @@ import ( // ClassMask: PriestSpellMindBlast, // }) // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -53,11 +53,11 @@ import ( // var ItemSetRegaliaOfFaith = core.NewItemSet(core.ItemSet{ // Name: "Regalia of Faith", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // // Not implemented // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_PowerCost_Pct, @@ -70,8 +70,8 @@ import ( // var ItemSetConquerorSanct = core.NewItemSet(core.ItemSet{ // Name: "Sanctification Garb", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -79,7 +79,7 @@ import ( // ClassMask: PriestSpellDevouringPlague, // }) // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // priest := agent.(PriestAgent).GetPriest() // procAura := priest.NewTemporaryStatsAura("Devious Mind", core.ActionID{SpellID: 64907}, stats.Stats{stats.SpellHaste: 240}, time.Second*4) @@ -102,8 +102,8 @@ import ( // var ItemSetSanctificationRegalia = core.NewItemSet(core.ItemSet{ // Name: "Sanctification Regalia", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -111,7 +111,7 @@ import ( // ClassMask: PriestSpellPrayerOfHealing, // }) // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // priest := agent.(PriestAgent).GetPriest() // procAura := priest.NewTemporaryStatsAura("Sanctification Reglia 4pc", core.ActionID{SpellID: 64912}, stats.Stats{stats.SpellPower: 250}, time.Second*5) @@ -135,12 +135,12 @@ import ( // var ItemSetZabras = core.NewItemSet(core.ItemSet{ // Name: "Zabra's Regalia", // AlternativeName: "Velen's Regalia", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // // Modifies dot length, need to implement later again // // Requieres tests and proper modification of SpellMods // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_BonusCrit_Rating, @@ -154,8 +154,8 @@ import ( // var ItemSetZabrasRaiment = core.NewItemSet(core.ItemSet{ // Name: "Zabra's Raiment", // AlternativeName: "Velen's Raiment", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, _ string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // character := agent.GetCharacter() // character.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_DamageDone_Flat, @@ -163,7 +163,7 @@ import ( // ClassMask: PriestSpellPrayerOfMending, // }) // }, -// 4: func(agent core.Agent, _ string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // // changed in cata to flat 5% heal // character := agent.GetCharacter() // character.PseudoStats.DamageDealtMultiplier *= 1.05 @@ -173,18 +173,16 @@ import ( var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{ Name: "Crimson Acolyte's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 5, ClassMask: PriestSpellShadowWordPain | PriestSpellDevouringPlague | PriestSpellVampiricTouch | PriestSpellImprovedDevouringPlague, }) }, - 4: func(agent core.Agent, _ string) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DotTickLength_Flat, TimeValue: -time.Millisecond * 170, ClassMask: PriestSpellMindFlay, @@ -195,8 +193,8 @@ var ItemSetCrimsonAcolyte = core.NewItemSet(core.ItemSet{ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ Name: "Crimson Acolyte's Raiment", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { priest := agent.(PriestAgent).GetPriest() var curAmount float64 @@ -211,7 +209,7 @@ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ Hot: core.DotConfig{ Aura: core.Aura{ - Label: "CrimsonAcolyteRaiment2pc", + Label: "Crimson Acolytes Raiment 2pc - Hot", }, NumberOfTicks: 3, TickLength: time.Second * 3, @@ -225,32 +223,31 @@ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ }, }) - priest.RegisterAura(core.Aura{ - Label: "Crimson Acolytes Raiment 2pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnHealDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell.ClassSpellMask != PriestSpellFlashHeal || !sim.Proc(0.33, "Crimson Acolytes Raiment 2pc") { - return - } - + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Crimson Acolytes Raiment 2pc", + ClassSpellMask: PriestSpellFlashHeal, + ProcChance: 1.0 / 3, + Callback: core.CallbackOnHealDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { curAmount = result.Damage hot := procSpell.Hot(result.Target) hot.Apply(sim) }, }) + + setBonusAura.ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) { + curAmount = 0 + }) + }, - 4: func(agent core.Agent, _ string) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.05, ClassMask: PriestSpellPowerWordShield, }) - character.AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, FloatValue: 0.10, ClassMask: PriestSpellCircleOfHealing, @@ -261,26 +258,24 @@ var ItemSetCrimsonAcolytesRaiment = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsInvestiture = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Investiture", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.ResilienceRating, 400) - agent.GetCharacter().AddStat(stats.Intellect, 70) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatsBuff(stats.Stats{stats.ResilienceRating: 400, stats.Intellect: 70}) }, - 4: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.Intellect, 90) + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Intellect, 90) }, }, }) var ItemSetGladiatorsRaiment = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Raiment", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.ResilienceRating, 400) - agent.GetCharacter().AddStat(stats.Intellect, 70) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatsBuff(stats.Stats{stats.ResilienceRating: 400, stats.Intellect: 70}) }, - 4: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.Intellect, 90) + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Intellect, 90) }, }, }) @@ -288,18 +283,16 @@ var ItemSetGladiatorsRaiment = core.NewItemSet(core.ItemSet{ // T11 - Shadow var ItemSetMercurialRegalia = core.NewItemSet(core.ItemSet{ Name: "Mercurial Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 5, ClassMask: PriestSpellMindFlay | PriestSpellMindSear, }) }, - 4: func(agent core.Agent, _ string) { - character := agent.GetCharacter() - character.AddStaticMod(core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.3, ClassMask: PriestSpellShadowyApparation, @@ -311,13 +304,11 @@ var ItemSetMercurialRegalia = core.NewItemSet(core.ItemSet{ // T12 - Shadow var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ Name: "Regalia of the Cleansing Flame", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Fiend deals 20% extra damage as fire damage and cooldown reduced by 75 seconds - character := agent.GetCharacter() - - character.AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_Cooldown_Flat, TimeValue: -time.Second * 75, ClassMask: PriestSpellShadowFiend, @@ -350,23 +341,22 @@ var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ }, }) - core.MakePermanent( - core.MakeProcTriggerAura(&priest.ShadowfiendPet.Unit, core.ProcTrigger{ - ActionID: core.ActionID{SpellID: 99155}, - Name: "Shadowflame (T12-2P)", - Callback: core.CallbackOnSpellHitDealt, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeLanded, - ProcChance: 1.0, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - - // deal 20% of melee damage on hit - shadowFlameProc.BonusSpellPower = result.Damage * 0.2 - shadowFlameProc.Cast(sim, result.Target) - }, - })) + setBonusAura.MakeDependentProcTriggerAura(&priest.ShadowfiendPet.Unit, core.ProcTrigger{ + ActionID: core.ActionID{SpellID: 99155}, + Name: "Shadowflame (T12-2P)", + Callback: core.CallbackOnSpellHitDealt, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeLanded, + ProcChance: 1.0, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + // deal 20% of melee damage on hit + shadowFlameProc.BonusSpellPower = result.Damage * 0.2 + shadowFlameProc.Cast(sim, result.Target) + }, + }) + }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() mbMod := character.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, @@ -389,7 +379,7 @@ var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ priest := agent.(PriestAgent).GetPriest() dotTracker := make([]int, len(priest.Env.AllUnits)) setHandler := func(aura *core.Aura, sim *core.Simulation) { - if aura.IsActive() { + if setBonusAura.IsActive() && aura.IsActive() { dotTracker[aura.Unit.UnitIndex]++ } else { dotTracker[aura.Unit.UnitIndex]-- @@ -407,7 +397,7 @@ var ItemSetRegaliaOfTheCleansingFlame = core.NewItemSet(core.ItemSet{ } priest.OnSpellRegistered(func(spell *core.Spell) { - if spell.ClassSpellMask&(PriestSpellShadowWordPain|PriestSpellVampiricTouch|PriestSpellDevouringPlague) == 0 { + if !spell.Matches(PriestSpellShadowWordPain | PriestSpellVampiricTouch | PriestSpellDevouringPlague) { return } diff --git a/sim/priest/priest.go b/sim/priest/priest.go index fd487c97f7..19417bddd7 100644 --- a/sim/priest/priest.go +++ b/sim/priest/priest.go @@ -94,7 +94,6 @@ func (priest *Priest) Initialize() { })) } - // priest.registerSetBonuses() priest.registerDevouringPlagueSpell() priest.registerShadowWordPainSpell() diff --git a/sim/rogue/assassination/vendetta.go b/sim/rogue/assassination/vendetta.go index daebe4e48c..32b3c3dfa7 100644 --- a/sim/rogue/assassination/vendetta.go +++ b/sim/rogue/assassination/vendetta.go @@ -15,14 +15,15 @@ func (sinRogue *AssassinationRogue) registerVendetta() { actionID := core.ActionID{SpellID: 79140} hasGlyph := sinRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) - t13Bonus := sinRogue.HasSetBonus(rogue.Tier13, 4) - duration := time.Duration((30.0+core.TernaryFloat64(t13Bonus, 3.0, 0))*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second + getDuration := func() time.Duration { + return time.Duration((30.0+core.TernaryFloat64(sinRogue.Has4pcT13(), 3.0, 0))*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second + } vendettaAura := sinRogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { return target.GetOrRegisterAura(core.Aura{ Label: "Vendetta", ActionID: actionID, - Duration: duration, + Duration: getDuration(), OnGain: func(aura *core.Aura, sim *core.Simulation) { sinRogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier *= 1.2 }, @@ -49,6 +50,7 @@ func (sinRogue *AssassinationRogue) registerVendetta() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { aura := vendettaAura.Get(target) + aura.Duration = getDuration() aura.Activate(sim) }, }) diff --git a/sim/rogue/combat/adrenaline_rush.go b/sim/rogue/combat/adrenaline_rush.go index 82a4e13c29..f8174a9f52 100644 --- a/sim/rogue/combat/adrenaline_rush.go +++ b/sim/rogue/combat/adrenaline_rush.go @@ -18,11 +18,15 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { speedBonus := 1.2 inverseBonus := 1 / speedBonus + getDuration := func() time.Duration { + return core.TernaryDuration(comRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfAdrenalineRush), time.Second*20, time.Second*15) + + core.TernaryDuration(comRogue.Has4pcT13(), time.Second*3, 0) + } + comRogue.AdrenalineRushAura = comRogue.RegisterAura(core.Aura{ Label: "Adrenaline Rush", ActionID: AdrenalineRushActionID, - Duration: core.TernaryDuration(comRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfAdrenalineRush), time.Second*20, time.Second*15) + - core.TernaryDuration(comRogue.HasSetBonus(rogue.Tier13, 4), time.Second*3, 0), + Duration: getDuration(), OnGain: func(aura *core.Aura, sim *core.Simulation) { comRogue.ApplyAdditiveEnergyRegenBonus(sim, 1.0) comRogue.MultiplyMeleeSpeed(sim, speedBonus) @@ -50,6 +54,7 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { comRogue.BreakStealth(sim) + comRogue.AdrenalineRushAura.Duration = getDuration() comRogue.AdrenalineRushAura.Activate(sim) }, }) diff --git a/sim/rogue/items.go b/sim/rogue/items.go index ad108294e0..dd93ace569 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -12,16 +12,16 @@ import ( var Tier11 = core.NewItemSet(core.ItemSet{ Name: "Wind Dancer's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { // +5% Crit to Backstab, Mutilate, and Sinister Strike - agent.GetCharacter().AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 5, ClassMask: RogueSpellBackstab | RogueSpellMutilate | RogueSpellSinisterStrike, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // 1% Chance on Auto Attack to increase crit of next Evis or Envenom by +100% for 15 seconds rogue := agent.(RogueAgent).GetRogue() @@ -45,7 +45,7 @@ var Tier11 = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&rogue.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Deadly Scheme Aura", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeWhiteHit, @@ -77,16 +77,18 @@ func MakeT12StatAura(action core.ActionID, stat stats.Stat, name string) core.Au var Tier12 = core.NewItemSet(core.ItemSet{ Name: "Vestments of the Dark Phoenix", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Your melee critical strikes deal 6% additional damage as Fire over 4 sec. // Rolls like ignite // Tentatively, this is just Ignite. Testing required to validate behavior. rogue := agent.GetCharacter() - spell, procTrigger := cata.RegisterIgniteEffect(&rogue.Unit, cata.IgniteConfig{ + + cata.RegisterIgniteEffect(&rogue.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 99173}, DotAuraLabel: "Burning Wounds", IncludeAuraDelay: true, + SetBonusAura: setBonusAura, ProcTrigger: core.ProcTrigger{ Name: "Rogue T12 2P Bonus", @@ -100,10 +102,8 @@ var Tier12 = core.NewItemSet(core.ItemSet{ }, }) - rogue.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) - }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Your Tricks of the Trade ability also causes you to gain a 25% increase to Haste, Mastery, or Critical Strike chosen at random for 30 sec. // Cannot pick the same stat twice in a row. No other logic appears to exist // Not a dynamic 1.25% mod; snapshots stats and applies that much as bonus rating for duration @@ -117,7 +117,7 @@ var Tier12 = core.NewItemSet(core.ItemSet{ auraArray := [3]*core.Aura{hasteAura, critAura, mastAura} // Proc aura watching for ToT threat transfer start - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue T12 4P Bonus", Callback: core.CallbackOnApplyEffects, ClassSpellMask: RogueSpellTricksOfTheTrade, @@ -139,10 +139,10 @@ var Tier12 = core.NewItemSet(core.ItemSet{ var Tier13 = core.NewItemSet(core.ItemSet{ Name: "Blackfang Battleweave", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // After triggering Tricks of the Trade, your abilities cost 20% less energy for 6 sec. // This is implemented as it is because the 20% reduction is applied -before- talents/glyphs/passives, which is not how SpellMod_PowerCost_Pct operates - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() bonus60e := rogue.AddDynamicMod(core.SpellModConfig{ @@ -203,7 +203,7 @@ var Tier13 = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&rogue.Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue T13 2P Bonus", Callback: core.CallbackOnApplyEffects, ClassSpellMask: RogueSpellTricksOfTheTrade, @@ -214,12 +214,15 @@ var Tier13 = core.NewItemSet(core.ItemSet{ }, // Increases the duration of Shadow Dance by 2 sec, Adrenaline Rush by 3 sec, and Vendetta by 9 sec. // Implemented in respective spells - 4: func(agent core.Agent, _ string) { - + 4: func(agent core.Agent, setBonusAura *core.Aura) { }, }, }) +func (rogue *Rogue) Has4pcT13() bool { + return rogue.HasActiveSetBonus(Tier13.Name, 4) +} + // Pulled from old Shadowcraft/SimC logic. // There exists Blizzard sourced numbers, but those were from MoP beta. TBD which is valid. // The final difference between the Blizzard numbers and old TC numbers is exceedingly small either way. @@ -237,9 +240,9 @@ func getFangsProcRate(character *core.Character) float64 { // Fear + Vengeance var JawsOfRetribution = core.NewItemSet(core.ItemSet{ Name: "Jaws of Retribution", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Suffering, increasing your Agility by 2, stacking up to 50 times. - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ Label: "Suffering", ActionID: core.ActionID{SpellID: 109959}, @@ -254,7 +257,7 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue Legendary Daggers Stage 1", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, @@ -272,9 +275,9 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ // Sleeper + Dreamer var MawOfOblivion = core.NewItemSet(core.ItemSet{ Name: "Maw of Oblivion", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Nightmare, increasing your Agility by 5, stacking up to 50 times. - 2: func(agent core.Agent, _ string) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ Label: "Nightmare", ActionID: core.ActionID{SpellID: 109955}, @@ -289,7 +292,7 @@ var MawOfOblivion = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue Legendary Daggers Stage 2", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, @@ -307,17 +310,18 @@ var MawOfOblivion = core.NewItemSet(core.ItemSet{ // Golad + Tiriosh var FangsOfTheFather = core.NewItemSet(core.ItemSet{ Name: "Fangs of the Father", - Bonuses: map[int32]core.ApplySetItemEffect{ + Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Shadows of the Destroyer, increasing your Agility by 17, stacking up to 50 times. // Each application past 30 grants an increasing chance to trigger Fury of the Destroyer. // When triggered, this consumes all applications of Shadows of the Destroyer, immediately granting 5 combo points and cause your finishing moves to generate 5 combo points. // Lasts 6 sec. // Tooltip is deceptive. The stacks of Shadows of the Destroyer only clear when the 5 Combo Point effect ends - 2: func(agent core.Agent, _ string) { - cpMetrics := agent.GetCharacter().NewComboPointMetrics(core.ActionID{SpellID: 109950}) + 2: func(agent core.Agent, setBonusAura *core.Aura) { + character := agent.GetCharacter() + cpMetrics := character.NewComboPointMetrics(core.ActionID{SpellID: 109950}) - agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ + agiAura := character.GetOrRegisterAura(core.Aura{ Label: "Shadows of the Destroyer", ActionID: core.ActionID{SpellID: 109941}, MaxStacks: 50, @@ -331,7 +335,7 @@ var FangsOfTheFather = core.NewItemSet(core.ItemSet{ }, }) - wingsProc := agent.GetCharacter().GetOrRegisterAura(core.Aura{ + wingsProc := character.GetOrRegisterAura(core.Aura{ Label: "Fury of the Destroyer", ActionID: core.ActionID{SpellID: 109949}, Duration: time.Second * 6, @@ -349,12 +353,12 @@ var FangsOfTheFather = core.NewItemSet(core.ItemSet{ }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rogue Legendary Daggers Stage 3", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, Outcome: core.OutcomeLanded, - ProcChance: getFangsProcRate(agent.GetCharacter()), + ProcChance: getFangsProcRate(character), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { // Adding a stack and activating the combo point effect is mutually exclusive. // Agility bonus is lost when combo point effect ends @@ -379,13 +383,24 @@ var FangsOfTheFather = core.NewItemSet(core.ItemSet{ var CataPVPSet = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Vestments", ID: 914, - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.Agility, 70) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Agility, 70) }, - 4: func(agent core.Agent, _ string) { - agent.GetCharacter().AddStat(stats.Agility, 90) - // 10 maximum energy added in rogue.go + 4: func(agent core.Agent, setBonusAura *core.Aura) { + character := agent.GetCharacter() + setBonusAura.AttachStatBuff(stats.Agility, 90) + + actionID := core.ActionID{SpellID: 21975} + energyMetrics := character.NewEnergyMetrics(actionID) + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + character.UpdateMaxEnergy(sim, 10, energyMetrics) + }) + setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + character.UpdateMaxEnergy(sim, -10, energyMetrics) + }) + setBonusAura.ExposeToAPL(actionID.SpellID) }, }, }) diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index c2f8200ff5..0cea4f3e70 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -268,9 +268,7 @@ func NewRogue(character *core.Character, options *proto.RogueOptions, talents st rogue.PseudoStats.CanParry = true maxEnergy := 100.0 - if rogue.HasSetBonus(CataPVPSet, 4) { - maxEnergy += 10 - } + if rogue.Spec == proto.Spec_SpecAssassinationRogue && rogue.GetMHWeapon() != nil && rogue.GetMHWeapon().WeaponType == proto.WeaponType_WeaponTypeDagger { diff --git a/sim/rogue/subtlety/shadow_dance.go b/sim/rogue/subtlety/shadow_dance.go index 1919e2bb7c..844ebc11ad 100644 --- a/sim/rogue/subtlety/shadow_dance.go +++ b/sim/rogue/subtlety/shadow_dance.go @@ -3,10 +3,9 @@ package subtlety import ( "time" + "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/rogue" - - "github.com/wowsims/cata/sim/core" ) func (subRogue *SubtletyRogue) registerShadowDanceCD() { @@ -15,15 +14,15 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { } hasGlyph := subRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfShadowDance) - t13Bonus := subRogue.HasSetBonus(rogue.Tier13, 4) - duration := core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6) + core.TernaryDuration(t13Bonus, time.Second*2, 0) - + getDuration := func() time.Duration { + return core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6) + core.TernaryDuration(subRogue.Has4pcT13(), time.Second*2, 0) + } actionID := core.ActionID{SpellID: 51713} subRogue.ShadowDanceAura = subRogue.RegisterAura(core.Aura{ Label: "Shadow Dance", ActionID: actionID, - Duration: duration, + Duration: getDuration(), // Can now cast opening abilities outside of stealth // Covered in rogue.go by IsStealthed() }) @@ -42,6 +41,7 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { subRogue.BreakStealth(sim) + subRogue.ShadowDanceAura.Duration = getDuration() subRogue.ShadowDanceAura.Activate(sim) }, }) diff --git a/sim/shaman/_items_wotlk.go b/sim/shaman/_items_wotlk.go index 6cbe4f98c5..30f6e98665 100644 --- a/sim/shaman/_items_wotlk.go +++ b/sim/shaman/_items_wotlk.go @@ -11,11 +11,11 @@ import ( var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ Name: "Thrall's Regalia", AlternativeName: "Nobundo's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // shocks.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // lavaburst.go }, }, @@ -23,22 +23,22 @@ var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ var ItemSetEarthShatterGarb = core.NewItemSet(core.ItemSet{ Name: "Earthshatter Garb", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Reduces LB cost by 5% }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // lavaburst crit strike dmg +10% }, }, }) var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ Name: "Worldbreaker Garb", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // shocks.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // lightning_bolt.go }, }, @@ -46,11 +46,11 @@ var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ var ItemSetFrostWitchRegalia = core.NewItemSet(core.ItemSet{ Name: "Frost Witch's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // This is implemented in talents.go so that the aura has easy access to the elemental mastery MCD. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() shaman.RegisterAura(core.Aura{ Label: "Shaman T10 Elemental 4P Bonus", @@ -199,11 +199,11 @@ func init() { var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ Name: "Earthshatter Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // 10% damage to lightning shield. implemented in lightning_shield.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // +5% to flurry. implemented in talents.go }, }, @@ -211,11 +211,11 @@ var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Worldbreaker Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { //20% damage to stormstrike and lava lash }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { //20% increase to maelstrom proc rate }, }, @@ -224,11 +224,11 @@ var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Thrall's Battlegear", AlternativeName: "Nobundo's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // +3% increase to static shock proc rate }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // +25% shock damage }, }, @@ -236,11 +236,11 @@ var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ Name: "Frost Witch's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // TODO: add 12% damage buff to shamanistic rage }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // TODO: at 5 maelstrom stacks, 15% chance to gain +20% attack power for 10s }, }, @@ -248,13 +248,13 @@ var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Earthshaker", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.AttackPower, 50) shaman.AddStat(stats.Resilience, 100) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.AttackPower, 150) // also -2s on stormstrike CD @@ -264,13 +264,13 @@ var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsWartide = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Wartide", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.SpellPower, 29) shaman.AddStat(stats.Resilience, 100) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() shaman.AddStat(stats.SpellPower, 88) }, diff --git a/sim/shaman/chain_lightning.go b/sim/shaman/chain_lightning.go index ad96ca85dd..adc64942ab 100644 --- a/sim/shaman/chain_lightning.go +++ b/sim/shaman/chain_lightning.go @@ -35,7 +35,7 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe numHits = min(numHits, shaman.Env.GetNumTargets()) spellConfig.ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - bounceReduction := core.TernaryFloat64(shaman.HasActiveSetBonus(ItemSetTidefury.Name, 2) && !isElementalOverload, 0.83, 0.7) + bounceReduction := core.TernaryFloat64(shaman.hasDungeonSet3() && !isElementalOverload, 0.83, 0.7) baseDamage := shaman.CalcAndRollDamageRange(sim, 1.08800005913, 0.13300000131) curTarget := target diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 54db386cfc..0563aabfa9 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -13,37 +13,28 @@ import ( // (4) Set: Your Water Shield ability grants an additional 56 mana each time it triggers and an additional 3 mana per 5 sec. var ItemSetTidefury = core.NewItemSet(core.ItemSet{ Name: "Tidefury Raiment", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, _ *core.Aura) { // Handled in chain_lightning.go }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { - shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - // If Sim is undefined ItemSwap is disabled so we can add this statically - if sim == nil { - shaman.AddStat(stats.MP5, 3) - } else { - shaman.AddStatDynamic(sim, stats.MP5, 3) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - shaman.AddStatDynamic(sim, stats.MP5, -3) - }, - }) + setBonusAura.AttachStatBuff(stats.MP5, 3) } - }, }, }) +func (shaman *Shaman) hasDungeonSet3() bool { + return shaman.HasActiveSetBonus(ItemSetTidefury.Name, 2) +} + // var ItemSetSkyshatterRegalia = core.NewItemSet(core.ItemSet{ // Name: "Skyshatter Regalia", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, setName string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // shaman := agent.(ShamanAgent).GetShaman() // if shaman.Totems.Air == proto.AirTotem_NoAirTotem || @@ -57,7 +48,7 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // shaman.AddStat(stats.SpellCrit, 35) // shaman.AddStat(stats.SpellPower, 45) // }, -// 4: func(agent core.Agent, setName string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // // Increases damage done by Lightning Bolt by 5%. // // Implemented in lightning_bolt.go. // }, @@ -70,11 +61,11 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // var ItemSetSkyshatterHarness = core.NewItemSet(core.ItemSet{ // Name: "Skyshatter Harness", -// Bonuses: map[int32]core.ApplySetItemEffect{ -// 2: func(agent core.Agent, setName string) { +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { // // implemented in shocks.go // }, -// 4: func(agent core.Agent, setName string) { +// 4: func(agent core.Agent, setBonusAura *core.Aura) { // // implemented in stormstrike.go // }, // }, @@ -85,18 +76,16 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ // (4) Set: Reduces the cast time of your Lightning Bolt spell by 10%. var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ Name: "Regalia of the Raging Elements", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - character := agent.GetCharacter() - character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskFlameShock, }) }, - 4: func(agent core.Agent, setName string) { - character := agent.GetCharacter() - character.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, FloatValue: -0.1, ClassMask: SpellMaskLightningBolt, @@ -110,8 +99,8 @@ var ItemSetRagingElementsRegalia = core.NewItemSet(core.ItemSet{ // (4) Set: Your Lava Surge talent also makes Lava Burst instant when it triggers. var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ Name: "Volcanic Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() var procConfig core.ProcTrigger @@ -145,10 +134,10 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ } } - shaman.MakeProcTriggerAuraForSetBonus(setName, 2, procConfig, nil) + setBonusAura.AttachProcTrigger(procConfig) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() instantLavaSurgeMod := shaman.AddDynamicMod(core.SpellModConfig{ @@ -169,7 +158,6 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }, }) //in talents.go under lava surge proc - }, }, }) @@ -183,8 +171,8 @@ func (shaman *Shaman) hasT12Ele4pc() bool { // (4) Set: Each time Elemental Overload triggers, you gain 250 haste rating for 4 sec, stacking up to 3 times. var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ Name: "Spiritwalker's Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() aura := shaman.RegisterAura(core.Aura{ @@ -199,7 +187,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, }) - shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Shaman T13 Elemental 2P Bonus (Elemental Mastery)", ActionID: core.ActionID{SpellID: 105780}, ClassSpellMask: SpellMaskElementalMastery, @@ -207,10 +195,10 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, - }, nil) + }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() procAura := shaman.RegisterAura(core.Aura{ @@ -224,7 +212,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, }) - shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Spiritwalker's Regalia 4P", ClassSpellMask: SpellMaskOverload, Callback: core.CallbackOnCastComplete, @@ -232,7 +220,7 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ procAura.Activate(sim) procAura.AddStack(sim) }, - }, nil) + }) }, }, }) @@ -242,11 +230,11 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ // (4) Set: Increases the duration of Spiritwalker's Grace by 5 sec, and you gain 30% haste while Spiritwalker's grace is active. var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ Name: "Spiritwalker's Vestments", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, _ *core.Aura) { // Not implemented }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() hasteMulti := 1.30 @@ -269,16 +257,7 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ return } - shaman.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, _ *core.Aura) { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second - }, - OnExpire: func(_ *core.Simulation, _ *core.Aura) { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() - }, - }) - - shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace) - Proc", ActionID: core.ActionID{SpellID: 105876}, ClassSpellMask: SpellMaskSpiritwalkersGrace, @@ -286,7 +265,14 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, - }, nil) + }) + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + }) }) }, @@ -298,20 +284,16 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ // (4) Set: Increases the critical strike chance of your Lightning Bolt spell by 10%. var ItemSetRagingElementsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Battlegear of the Raging Elements", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - shaman := agent.(ShamanAgent).GetShaman() - - shaman.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, FloatValue: .10, ClassMask: SpellMaskLavaLash | SpellMaskStormstrike, }) }, - 4: func(agent core.Agent, setName string) { - shaman := agent.(ShamanAgent).GetShaman() - - shaman.MakeDynamicModForSetBonus(setName, 4, core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BonusCrit_Percent, FloatValue: 10, ClassMask: SpellMaskLightningBolt, @@ -332,11 +314,11 @@ func tier12StormstrikeBonus(_ *core.Simulation, spell *core.Spell, _ *core.Attac // (4) Set: Your Stormstrike ability also causes the target to take 6% increased damage from your Fire Nova, Flame Shock, Flametongue Weapon, Lava Burst, Lava Lash, and Unleash Flame abilities. var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ Name: "Volcanic Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, _ *core.Aura) { // Implemented in lavalash.go }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() stormFireAuras := shaman.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { @@ -353,7 +335,7 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ }) }) - shaman.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Shaman T12 Enhancement 4P Bonus", ActionID: core.ActionID{SpellID: 99213}, Callback: core.CallbackOnSpellHitDealt, @@ -364,7 +346,7 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ stormFire := stormFireAuras.Get(result.Target) stormFire.Activate(sim) }, - }, nil) + }) }, }, }) @@ -374,8 +356,8 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ // 4 pieces: Your Feral Spirits have a 45% chance to grant you a charge of Maelstrom Weapon each time they deal damage. var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ Name: "Spiritwalker's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() if shaman.Talents.MaelstromWeapon == 0 { @@ -410,7 +392,7 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ }) shaman.MaelstromWeaponAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - if shaman.HasActiveSetBonus(setName, 2) { + if setBonusAura.IsActive() { temporalMaelstrom.Activate(sim) } }) @@ -419,44 +401,56 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ temporalMaelstrom.Deactivate(sim) }) }) + }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() if !shaman.Talents.FeralSpirit || shaman.Talents.MaelstromWeapon == 0 { return } - // var wolfProctriggerAura *core.Aura + + wolfProcTriggerConfig := core.ProcTrigger{ + Name: "Spiritwalker's Battlegear 4pc" + shaman.Label, + ActionID: core.ActionID{SpellID: 105872}, + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + ProcMask: core.ProcMaskMelee, + Harmful: true, + ProcChance: 0.45, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + shaman.MaelstromWeaponAura.Activate(sim) + shaman.MaelstromWeaponAura.AddStack(sim) + }, + } + spiritWolves := []*SpiritWolf{shaman.SpiritWolves.SpiritWolf1, shaman.SpiritWolves.SpiritWolf2} + procTriggerAuras := make([]*core.Aura, len(spiritWolves)) for _, wolf := range spiritWolves { - shaman.MakeProcTriggerAuraForSetBonusWithUnit(setName, 4, &wolf.Unit, core.ProcTrigger{ - Name: "Spiritwalker's Battlegear 4pc" + shaman.Label, - ActionID: core.ActionID{SpellID: 105872}, - Callback: core.CallbackOnSpellHitDealt, - Outcome: core.OutcomeLanded, - ProcMask: core.ProcMaskMelee, - Harmful: true, - ProcChance: 0.45, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - shaman.MaelstromWeaponAura.Activate(sim) - shaman.MaelstromWeaponAura.AddStack(sim) - }, - }, &core.CustomSetBonusCallbackConfig{ - OnGain: func(_ *core.Simulation, aura *core.Aura) { - wolf.Pet.OnPetEnable = func(sim *core.Simulation) { - aura.Activate(sim) - } - wolf.Pet.OnPetDisable = func(sim *core.Simulation) { - aura.Deactivate(sim) - } - }, - OnExpire: func(sim *core.Simulation, aura *core.Aura) { - aura.Deactivate(sim) - wolf.Pet.OnPetEnable = nil - wolf.Pet.OnPetDisable = nil - }, - }) + aura := setBonusAura.MakeDependentProcTriggerAura(&wolf.Unit, wolfProcTriggerConfig) + procTriggerAuras = append(procTriggerAuras, aura) } + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + for index, wolf := range spiritWolves { + aura := procTriggerAuras[index] + wolf.Pet.OnPetEnable = func(sim *core.Simulation) { + aura.Activate(sim) + } + wolf.Pet.OnPetDisable = func(sim *core.Simulation) { + aura.Deactivate(sim) + } + } + }) + + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + for index, wolf := range spiritWolves { + aura := procTriggerAuras[index] + aura.Deactivate(sim) + wolf.Pet.OnPetEnable = nil + wolf.Pet.OnPetDisable = nil + } + }) }, }, }) diff --git a/sim/warlock/doomguard.go b/sim/warlock/doomguard.go index 2353388468..007016e1c7 100644 --- a/sim/warlock/doomguard.go +++ b/sim/warlock/doomguard.go @@ -9,12 +9,14 @@ import ( ) func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { - duration := time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second + getDuration := func() time.Duration { + return time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second + } summonDoomguardAura := warlock.RegisterAura(core.Aura{ Label: "Summon Doomguard", ActionID: core.ActionID{SpellID: 18540}, - Duration: duration, + Duration: getDuration(), }) warlock.RegisterSpell(core.SpellConfig{ @@ -34,7 +36,9 @@ func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + duration := getDuration() warlock.Doomguard.EnableWithTimeout(sim, warlock.Doomguard, duration) + summonDoomguardAura.Duration = duration summonDoomguardAura.Activate(sim) }, }) diff --git a/sim/warlock/infernal.go b/sim/warlock/infernal.go index e0aef9971e..6d0a7828ab 100644 --- a/sim/warlock/infernal.go +++ b/sim/warlock/infernal.go @@ -10,12 +10,14 @@ import ( ) func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { - duration := time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second + getDuration := func() time.Duration { + return time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second + } summonInfernalAura := warlock.RegisterAura(core.Aura{ Label: "Summon Infernal", ActionID: core.ActionID{SpellID: 1122}, - Duration: duration, + Duration: getDuration(), }) warlock.RegisterSpell(core.SpellConfig{ @@ -48,10 +50,11 @@ func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { warlock.CalcAndRollDamageRange(sim, 0.48500001431, 0.11999999732) spell.CalcAndDealDamage(sim, aoeTarget, baseDamage, spell.OutcomeMagicHitAndCrit) } - + duration := getDuration() warlock.Infernal.EnableWithTimeout(sim, warlock.Infernal, duration) // fake aura to show duration + summonInfernalAura.Duration = duration summonInfernalAura.Activate(sim) }, }) diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 1b03af6471..a0c5f88649 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -11,15 +11,15 @@ import ( // T11 var ItemSetMaleficRaiment = core.NewItemSet(core.ItemSet{ Name: "Shadowflame Regalia", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { agent.(WarlockAgent).GetWarlock().AddStaticMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, ClassMask: WarlockSpellChaosBolt | WarlockSpellHandOfGuldan | WarlockSpellHaunt, FloatValue: -0.1, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() dmgMod := warlock.AddDynamicMod(core.SpellModConfig{ @@ -46,18 +46,17 @@ var ItemSetMaleficRaiment = core.NewItemSet(core.ItemSet{ }, }) - core.MakePermanent(warlock.RegisterAura(core.Aura{ - Label: "Item - Warlock T11 4P Bonus", - ActionID: core.ActionID{SpellID: 89935}, - ActionIDForProc: aura.ActionID, - OnPeriodicDamageDealt: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { - if spell.Matches(WarlockSpellImmolateDot|WarlockSpellUnstableAffliction) && - sim.Proc(0.02, "Warlock 4pT11") { - aura.Activate(sim) - aura.SetStacks(sim, 2) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Item - Warlock T11 4P Bonus", + ActionID: core.ActionID{SpellID: 89935}, + ClassSpellMask: WarlockSpellImmolateDot | WarlockSpellUnstableAffliction, + Callback: core.CallbackOnPeriodicDamageDealt, + ProcChance: 0.02, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) + aura.SetStacks(sim, 2) }, - })) + }) }, }, }) @@ -141,8 +140,8 @@ func (pet *FieryImpPet) registerFlameBlast(warlock *Warlock) { var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ Name: "Balespider's Burning Vestments", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() core.MakePermanent(warlock.RegisterAura(core.Aura{ @@ -160,7 +159,7 @@ var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ }, })) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() dmgMod := warlock.AddDynamicMod(core.SpellModConfig{ @@ -181,17 +180,16 @@ var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ }, }) - core.MakePermanent(warlock.RegisterAura(core.Aura{ - Label: "Item - Warlock T12 4P Bonus", - ActionID: core.ActionID{SpellID: 99229}, - ActionIDForProc: aura.ActionID, - OnCastComplete: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.Matches(WarlockSpellShadowBolt|WarlockSpellIncinerate|WarlockSpellSoulFire|WarlockSpellDrainSoul) && - sim.Proc(0.05, "Warlock 4pT12") { - aura.Activate(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Item - Warlock T12 4P Bonus", + ActionID: core.ActionID{SpellID: 99229}, + ClassSpellMask: WarlockSpellShadowBolt | WarlockSpellIncinerate | WarlockSpellSoulFire | WarlockSpellDrainSoul, + ProcChance: 0.05, + Callback: core.CallbackOnCastComplete, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) }, - })) + }) }, }, }) @@ -200,13 +198,13 @@ var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{ ID: 910, Name: "Gladiator's Felshroud", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { agent.(WarlockAgent).GetWarlock().AddStats(stats.Stats{ stats.Intellect: 70, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { lock := agent.(WarlockAgent).GetWarlock() lock.AddStats(stats.Stats{ stats.Intellect: 90, @@ -225,8 +223,8 @@ var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{ // T13 var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ Name: "Vestments of the Faceless Shroud", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() warlock.AddStaticMod(core.SpellModConfig{ @@ -235,7 +233,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() spDep := warlock.NewDynamicMultiplyStat(stats.SpellPower, 1.1) @@ -265,8 +263,12 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ }, }) +func (warlock *Warlock) has4pcT13() bool { + return warlock.HasActiveSetBonus(ItemSetVestmentsOfTheFacelessShroud.Name, 4) +} + func (warlock *Warlock) Calc2PT13SummonDuration() int32 { - has2PT13 := warlock.HasSetBonus(ItemSetVestmentsOfTheFacelessShroud, 2) + has2PT13 := warlock.HasActiveSetBonus(ItemSetVestmentsOfTheFacelessShroud.Name, 2) if has2PT13 { return core.TernaryInt32(warlock.Spec == proto.Spec_SpecDemonologyWarlock, 20, 30) } else { diff --git a/sim/warlock/soul_fire.go b/sim/warlock/soul_fire.go index 3d0457233b..93c54e57d3 100644 --- a/sim/warlock/soul_fire.go +++ b/sim/warlock/soul_fire.go @@ -8,8 +8,6 @@ import ( ) func (warlock *Warlock) registerSoulFire() { - hasT134P := warlock.HasSetBonus(ItemSetVestmentsOfTheFacelessShroud, 4) - var improvedSoulFire *core.Aura = nil if warlock.Talents.ImprovedSoulFire > 0 { damageBonus := 1 + .04*float64(warlock.Talents.ImprovedSoulFire) @@ -58,7 +56,7 @@ func (warlock *Warlock) registerSoulFire() { baseDamage := warlock.CalcAndRollDamageRange(sim, 2.54299998283, 0.22499999404) result := spell.CalcDamage(sim, target, baseDamage, spell.OutcomeMagicHitAndCrit) - if hasT134P && warlock.SoulBurnAura.IsActive() { + if warlock.has4pcT13() && warlock.SoulBurnAura.IsActive() { warlock.AddSoulShard() } diff --git a/sim/warrior/_items.go b/sim/warrior/_items.go index 1a8882375b..17e2965a84 100644 --- a/sim/warrior/_items.go +++ b/sim/warrior/_items.go @@ -13,11 +13,11 @@ import ( var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ Name: "Onslaught Armor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the health bonus from your Commanding Shout ability by 170. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the damage of your Shield Slam ability by 10%. // Handled in shield_slam.go. }, @@ -26,11 +26,11 @@ var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ Name: "Onslaught Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Reduces the rage cost of your Execute ability by 3. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the damage of your Mortal Strike and Bloodthirst abilities by 5%. // Handled in bloodthirst.go and mortal_strike.go. }, @@ -43,14 +43,14 @@ var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Increases attack power by 50. // +100 resilience rating. agent.GetCharacter().AddStat(stats.Resilience, 100) agent.GetCharacter().AddStat(stats.AttackPower, 50) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Reduces the cooldown of your Intercept ability by 5 sec. // Increases attack power by 150. agent.GetCharacter().AddStat(stats.AttackPower, 150) @@ -60,12 +60,12 @@ var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ Name: "Dreadnaught Plate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the damage of your Shield Slam ability by 10%. // Handled in shield_slam.go. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the duration of Shield Wall by 3 seconds. // NYI }, @@ -74,12 +74,12 @@ var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ Name: "Siegebreaker Plate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the critical strike chance of Devastate by 10%. // Handled in devastate.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Shield Block grants 10% magic DR // NYI }, @@ -89,15 +89,15 @@ var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ Name: "Wrynn's Plate", AlternativeName: "Hellscream's Plate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Decreases the cooldown on Taunt by 2sec // NYI // Increases damage done by Devastate by 5% // Handled in devastate.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Decreases the cooldown of Shield Block by 10 sec // NYI }, @@ -106,12 +106,12 @@ var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ Name: "Ymirjar Lord's Plate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Shield Slam and Shockwave deal 20% increased damage // Handled in shield_slam.go and shockwave.go }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Bloodrage no longer costs health to use, and now causes you to absorb damage equal to 20% max HP // NYI }, @@ -120,11 +120,11 @@ var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ Name: "Dreadnaught Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the damage of your Slam by 10%. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Your Bleed periodic effects have a chance to make your next ability cost 5 less rage. warrior := agent.(WarriorAgent).GetWarrior() rageMetrics := warrior.NewRageMetrics(core.ActionID{SpellID: 61571}) @@ -174,8 +174,8 @@ var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ Name: "Siegebreaker Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Heroic Strike and Slam critical strikes have a chance to grant you 150 haste rating for 5 sec. warrior := agent.(WarriorAgent).GetWarrior() procAura := warrior.RegisterAura(core.Aura{ @@ -209,7 +209,7 @@ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the critical strike chance of Mortal Strike and Bloodthirst by 10%. // Handled in bloodthirst.go and mortal_strike.go. }, @@ -219,12 +219,12 @@ var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Wrynn's Battlegear", AlternativeName: "Hellscream's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Berserker Stance grants an additional 2% critical strike chance, and Battle Stance grants an additional 6% armor penetration. // Handled in stances.go. }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the critical strike chance of your Slam and Heroic Strike abilities by 5%. // Handled in slam.go and heroic_strike_cleave.go. }, @@ -233,8 +233,8 @@ var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ Name: "Ymirjar Lord's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, _ string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { // When your Deep Wounds ability deals damage you have a 3% chance to gain 16% attack power for 10 sec. warrior := agent.(WarriorAgent).GetWarrior() var bonusAP float64 @@ -267,7 +267,7 @@ var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ }, }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // You have a 20% chance for your Bloodsurge and Sudden Death talents to grant 2 charges of their effect instead of 1, // reduce the global cooldown on Execute or Slam by 0.5 sec, and for the duration of the effect to be increased by 100%. diff --git a/sim/warrior/items.go b/sim/warrior/items.go index c9bc8c6f2e..c6836c11c9 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -12,58 +12,27 @@ import ( var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ ID: 909, Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - character := agent.(WarriorAgent).GetWarrior() - bonusValue := 70.0 - - character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - // If Sim is undefined ItemSwap is disabled so we can add this statically - if sim == nil { - character.AddStat(stats.Strength, bonusValue) - } else { - character.AddStatDynamic(sim, stats.Strength, bonusValue) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - character.AddStatDynamic(sim, stats.Strength, -bonusValue) - }, - }) + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Strength, 70) }, - 4: func(agent core.Agent, setName string) { - character := agent.(WarriorAgent).GetWarrior() - bonusValue := 90.0 - - character.MakeCallbackEffectForSetBonus(setName, 2, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - // If Sim is undefined ItemSwap is disabled so we can add this statically - if sim == nil { - character.AddStat(stats.Strength, bonusValue) - } else { - character.AddStatDynamic(sim, stats.Strength, bonusValue) - } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - character.AddStatDynamic(sim, stats.Strength, -bonusValue) - }, - }) + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachStatBuff(stats.Strength, 90) }, }, }) var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ Name: "Earthen Warplate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - character := agent.(WarriorAgent).GetWarrior() - character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskBloodthirst | SpellMaskMortalStrike, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 90294} @@ -88,7 +57,7 @@ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ }, }) - character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Rage of the Ages Trigger", ActionID: actionID, Callback: core.CallbackOnCastComplete, @@ -97,25 +66,23 @@ var ItemSetEarthenWarplate = core.NewItemSet(core.ItemSet{ buff.Activate(sim) buff.AddStack(sim) }, - }, nil) + }) }, }, }) var ItemSetEarthenBattleplate = core.NewItemSet(core.ItemSet{ Name: "Earthen Battleplate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { - character := agent.(WarriorAgent).GetWarrior() - character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskShieldSlam, Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.05, }) }, - 4: func(agent core.Agent, setName string) { - character := agent.(WarriorAgent).GetWarrior() - character.MakeDynamicModForSetBonus(setName, 2, core.SpellModConfig{ + 4: func(_ core.Agent, setBonusAura *core.Aura) { + setBonusAura.AttachSpellMod(core.SpellModConfig{ ClassMask: SpellMaskShieldWall, Kind: core.SpellMod_Cooldown_Multiplier, FloatValue: -0.5, @@ -126,8 +93,8 @@ var ItemSetEarthenBattleplate = core.NewItemSet(core.ItemSet{ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Name: "Molten Giant Warplate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 99233} @@ -145,7 +112,7 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ }, }) - character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Burning Rage Trigger", ActionID: actionID, ClassSpellMask: SpellMaskShouts, @@ -153,9 +120,9 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buff.Activate(sim) }, - }, nil) + }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 99237} @@ -184,7 +151,7 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ }, }) - character.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Fiery Attack Trigger", ActionID: actionID, Callback: core.CallbackOnSpellHitDealt, @@ -194,42 +161,44 @@ var ItemSetMoltenGiantWarplate = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { fieryAttack.Cast(sim, result.Target) }, - }, nil) + }) }, }, }) var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ Name: "Molten Giant Battleplate", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() - spell, procTrigger := cata.RegisterIgniteEffect(&character.Unit, cata.IgniteConfig{ + cata.RegisterIgniteEffect(&character.Unit, cata.IgniteConfig{ ActionID: core.ActionID{SpellID: 23922}.WithTag(3), // actual 99240 DisableCastMetrics: true, DotAuraLabel: "Combust", IncludeAuraDelay: true, + SetBonusAura: setBonusAura, ProcTrigger: core.ProcTrigger{ Name: "Combust", Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskShieldSlam, Outcome: core.OutcomeLanded, + ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { + return setBonusAura.IsActive() + }, }, DamageCalculator: func(result *core.SpellResult) float64 { return result.Damage * 0.2 }, }) - - character.MakeIgniteHandlerEffectForSetBonus(setName, 2, spell, procTrigger) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() aura := character.RegisterAura(core.Aura{ - Label: "T12 4P Bonus", + Label: "Item - Warrior T12 Protection 4P Bonus", ActionID: core.ActionID{SpellID: 99242}, Duration: 10 * time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { @@ -240,25 +209,25 @@ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ }, }) - character.MakeCallbackEffectForSetBonus(setName, 4, core.CustomSetBonusCallbackConfig{ - OnGain: func(sim *core.Simulation, _ *core.Aura) { - if sim != nil { + character.OnSpellRegistered(func(spell *core.Spell) { + if !spell.Matches(SpellMaskShieldBlock) { + return + } + + character.ShieldBlockAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + if setBonusAura.IsActive() { aura.Activate(sim) } - }, - OnExpire: func(sim *core.Simulation, _ *core.Aura) { - aura.Deactivate(sim) - }, + }) }) - }, }, }) var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Colossal Dragonplate Battlegear", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() mod := character.AddDynamicMod(core.SpellModConfig{ @@ -280,7 +249,7 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) - character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Volatile Outrage Trigger", ActionID: actionID, Callback: core.CallbackOnCastComplete, @@ -288,9 +257,9 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { buffAura.Activate(sim) }, - }, nil) + }) }, - 4: func(agent core.Agent, setName string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { warrior := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 108126} @@ -308,36 +277,42 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ }, }) + baseProcTriggerConfig := func(config core.ProcTrigger) core.ProcTrigger { + return core.ProcTrigger{ + Name: config.Name, + ClassSpellMask: config.ClassSpellMask, + ProcChance: config.ProcChance, + ActionID: actionID, + Callback: core.CallbackOnSpellHitDealt, + ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { + return setBonusAura.IsActive() + }, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + procCS.Cast(sim, result.Target) + }, + } + } + // TODO (4.3): Check if this cares that the hit landed - warrior.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.MakeDependentProcTriggerAura(&warrior.Unit, baseProcTriggerConfig(core.ProcTrigger{ Name: "Warrior T13 4P Bloodthirst Trigger", - ActionID: actionID, - Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskBloodthirst, ProcChance: 0.06, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procCS.Cast(sim, result.Target) - }, - }, nil) + })) - warrior.MakeProcTriggerAuraForSetBonus(setName, 4, core.ProcTrigger{ + setBonusAura.MakeDependentProcTriggerAura(&warrior.Unit, baseProcTriggerConfig(core.ProcTrigger{ Name: "Warrior T13 4P Mortal Strike Trigger", - ActionID: actionID, - Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskMortalStrike, ProcChance: 0.13, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procCS.Cast(sim, result.Target) - }, - }, nil) + })) }, }, }) var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ Name: "Colossal Dragonplate Armor", - Bonuses: map[int32]core.ApplySetItemEffect{ - 2: func(agent core.Agent, setName string) { + Bonuses: map[int32]core.ApplySetBonus{ + 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(WarriorAgent).GetWarrior() actionID := core.ActionID{SpellID: 105909} duration := time.Second * 6 @@ -347,7 +322,7 @@ var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ return shieldAmt }) - character.MakeProcTriggerAuraForSetBonus(setName, 2, core.ProcTrigger{ + setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Shield of Fury Trigger" + character.Label, Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskRevenge, @@ -363,15 +338,13 @@ var ItemSetColossalDragonplateArmor = core.NewItemSet(core.ItemSet{ shieldAura.Activate(sim) } }, - }, &core.CustomSetBonusCallbackConfig{ - OnExpire: func(sim *core.Simulation, aura *core.Aura) { - shieldAmt = 0 - shieldAura.Deactivate(sim) - aura.Deactivate(sim) - }, + }) + + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shieldAmt = 0 }) }, - 4: func(agent core.Agent, _ string) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // TODO: Implement this, turns Shield Wall into a raid buff }, }, diff --git a/sim/warrior/shield_block.go b/sim/warrior/shield_block.go index 0c5850c099..0b210dc360 100644 --- a/sim/warrior/shield_block.go +++ b/sim/warrior/shield_block.go @@ -14,13 +14,6 @@ func (warrior *Warrior) RegisterShieldBlockCD() { atkTableAttacker := &core.Unit{Level: warrior.Level + 3, Type: core.EnemyUnit} atkTable := core.NewAttackTable(atkTableAttacker, &warrior.Unit) - hasT12_4P_bonus := warrior.HasSetBonus(ItemSetMoltenGiantBattleplate, 4) - var T12_4P_bonus *core.Aura - - if hasT12_4P_bonus { - T12_4P_bonus = warrior.GetAuraByID(core.ActionID{SpellID: 99242}) - } - extraAvoidance := 0.0 warrior.ShieldBlockAura = warrior.RegisterAura(core.Aura{ Label: "Shield Block", @@ -43,10 +36,6 @@ func (warrior *Warrior) RegisterShieldBlockCD() { if extraAvoidance > 0.0 { warrior.CriticalBlockChance[1] -= extraAvoidance } - - if sim.CurrentTime != sim.Duration && hasT12_4P_bonus { - T12_4P_bonus.Activate(sim) - } }, }) From 8833606d30ed832fdaf4038b8b06597a053ddbd3 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 20 Dec 2024 22:25:34 +0100 Subject: [PATCH 049/127] WIP set bonus aura refactor --- makefile | 2 +- sim/core/item_sets.go | 15 + sim/death_knight/dancing_rune_weapon.go | 2 +- sim/death_knight/death_knight.go | 5 + sim/death_knight/items.go | 52 +- sim/death_knight/talents_frost.go | 5 +- sim/death_knight/talents_unholy.go | 9 +- sim/druid/barkskin.go | 2 +- sim/druid/berserk.go | 2 +- sim/druid/druid.go | 5 + sim/druid/forms.go | 2 +- sim/druid/items.go | 42 +- sim/druid/lacerate.go | 2 +- sim/druid/mangle.go | 2 +- sim/druid/rake.go | 2 +- sim/druid/survival_instincts.go | 2 +- sim/hunter/cata_items.go | 9 +- sim/hunter/cobra_shot.go | 2 +- sim/hunter/hunter.go | 3 + sim/hunter/steady_shot.go | 2 +- sim/mage/items.go | 7 +- sim/mage/mage.go | 4 + sim/mage/talents_arcane.go | 2 +- sim/paladin/inquisition.go | 2 +- sim/paladin/items.go | 29 +- sim/paladin/paladin.go | 3 + .../retribution/TestRetribution.results | 224 +-- sim/rogue/assassination/vendetta.go | 2 +- sim/rogue/combat/adrenaline_rush.go | 2 +- sim/rogue/items.go | 7 +- sim/rogue/rogue.go | 3 + sim/rogue/subtlety/shadow_dance.go | 2 +- sim/shaman/chain_lightning.go | 2 +- sim/shaman/elemental/TestElemental.results | 7 - .../enhancement/TestEnhancement.results | 1267 +++++++------- sim/shaman/enhancement/lavalash.go | 2 +- sim/shaman/items.go | 44 +- sim/shaman/shaman.go | 16 +- sim/shaman/talents.go | 4 +- sim/warlock/affliction/TestAffliction.results | 1200 ++++++------- sim/warlock/demonology/TestDemonology.results | 1488 ++++++++--------- .../destruction/TestDestruction.results | 1200 ++++++------- sim/warlock/items.go | 10 +- sim/warlock/soul_fire.go | 2 +- sim/warlock/warlock.go | 4 + 45 files changed, 2869 insertions(+), 2831 deletions(-) diff --git a/makefile b/makefile index b8b02800d9..9abb8cbf64 100644 --- a/makefile +++ b/makefile @@ -241,7 +241,7 @@ sim/core/items/all_items.go: $(call rwildcard,tools/database,*.go) $(call rwildc .PHONY: test test: $(OUT_DIR)/lib.wasm binary_dist/dist.go - go test --tags=with_db ./sim/paladin/retribution/... + go test --tags=with_db ./sim/... .PHONY: update-tests update-tests: diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index bd1b554f8b..173420fa4a 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -294,3 +294,18 @@ func (setBonusTracker *Aura) AttachStatBuff(stat stats.Stat, value float64) { statsToAdd[stat] = value setBonusTracker.AttachStatsBuff(statsToAdd) } + +// Attaches a Boolean to the set bonus +func (setBonusTracker *Aura) AttachBooleanToggle(toggleArg bool) { + setBonusTracker.ApplyOnGain(func(aura *Aura, sim *Simulation) { + toggleArg = true + }) + + setBonusTracker.ApplyOnExpire(func(aura *Aura, sim *Simulation) { + toggleArg = false + }) + + if setBonusTracker.IsActive() { + toggleArg = true + } +} diff --git a/sim/death_knight/dancing_rune_weapon.go b/sim/death_knight/dancing_rune_weapon.go index fe174e5b0e..762b47fbda 100644 --- a/sim/death_knight/dancing_rune_weapon.go +++ b/sim/death_knight/dancing_rune_weapon.go @@ -72,7 +72,7 @@ func (dk *DeathKnight) registerDancingRuneWeaponSpell() { if hasGlyph { dk.PseudoStats.ThreatMultiplier /= 1.5 } - if dk.hasT12Tank4pc() { + if dk.HasT12Tank4pc { t124PAura.Activate(sim) } }, diff --git a/sim/death_knight/death_knight.go b/sim/death_knight/death_knight.go index 520be7df6a..be13aeb185 100644 --- a/sim/death_knight/death_knight.go +++ b/sim/death_knight/death_knight.go @@ -78,6 +78,11 @@ type DeathKnight struct { // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet + + // Item sets + HasT12Tank4pc bool + HasT13Dps2pc bool + HasT13Dps4pc bool } func (deathKnight *DeathKnight) GetTentacles() []*cata.TentacleOfTheOldOnesPet { diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index b487e148ad..23d76c5dbe 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -82,14 +82,21 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ return } - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip := func() { dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second + } + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip() }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() }) + if setBonusAura.IsActive() { + onEquip() + } }) }, }, @@ -229,14 +236,12 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go + dk := agent.(DeathKnightAgent).GetDeathKnight() + setBonusAura.AttachBooleanToggle(dk.HasT12Tank4pc) }, }, }) -func (dk *DeathKnight) hasT12Tank4pc() bool { - return dk.HasActiveSetBonus(ItemSetElementiumDeathplateBattlearmor.Name, 4) -} - // T13 - DPS var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ Name: "Necrotic Boneplate Battlegear", @@ -244,47 +249,18 @@ var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() - dk := agent.(DeathKnightAgent).GetDeathKnight() - dk.OnSpellRegistered(func(spell *core.Spell) { - if !spell.Matches(DeathKnightSpellDeathCoil) { - return - } - - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { - if dk.FreezingFogAura != nil { - dk.FreezingFogAura.MaxStacks = 2 - } - if dk.SuddenDoomProcAura != nil { - dk.SuddenDoomProcAura.MaxStacks = 2 - } - }) - - setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { - if dk.FreezingFogAura != nil { - dk.FreezingFogAura.MaxStacks = 0 - } - if dk.SuddenDoomProcAura != nil { - dk.SuddenDoomProcAura.MaxStacks = 0 - } - }) - }) + setBonusAura.AttachBooleanToggle(dk.HasT13Dps2pc) }, - 4: func(_ core.Agent, _ *core.Aura) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. // Spell: Runic Mastery (id: 105647) // Handled in talents_unholy.go:applyRunicEmpowerementCorruption() + dk := agent.(DeathKnightAgent).GetDeathKnight() + setBonusAura.AttachBooleanToggle(dk.HasT13Dps4pc) }, }, }) -func (dk *DeathKnight) hasT13DPS2pc() bool { - return dk.HasActiveSetBonus(ItemSetNecroticBoneplateBattlegear.Name, 2) -} - -func (dk *DeathKnight) hasT13DPS4pc() bool { - return dk.HasActiveSetBonus(ItemSetNecroticBoneplateBattlegear.Name, 4) -} - func init() { } diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index 6c984e1ca1..69328bed3d 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -147,7 +147,7 @@ func (dk *DeathKnight) applyRime() { return } - if dk.hasT13DPS2pc() { + if dk.HasT13Dps2pc { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -166,7 +166,8 @@ func (dk *DeathKnight) applyRime() { dk.FreezingFogAura.Activate(sim) // T13 2pc: Rime has a 60% chance to grant 2 charges when triggered instead of 1. - if dk.hasT13DPS2pc() { + dk.FreezingFogAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) + if dk.HasT13Dps2pc { stacks := core.TernaryInt32(sim.Proc(0.6, "T13 2pc"), 2, 1) dk.FreezingFogAura.SetStacks(sim, stacks) } diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index 099fd75326..c5dd7df0d6 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -133,7 +133,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { } // T13 4pc: Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. - if dk.hasT13DPS4pc() && sim.Proc(0.4, "T13 4pc") { + if dk.HasT13Dps4pc && sim.Proc(0.4, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -150,7 +150,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { dk.RegenRandomDepletedRune(sim, runeMetrics) // T13 4pc: Runic Empowerment has a 25% chance to also grant 710 mastery rating for 12 sec when activated. - if dk.hasT13DPS4pc() && sim.Proc(0.25, "T13 4pc") { + if dk.HasT13Dps4pc && sim.Proc(0.25, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -297,7 +297,7 @@ func (dk *DeathKnight) applySuddenDoom() { return } - if dk.hasT13DPS2pc() { + if dk.HasT13Dps2pc { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -317,7 +317,8 @@ func (dk *DeathKnight) applySuddenDoom() { dk.SuddenDoomProcAura.Activate(sim) // T13 2pc: Sudden Doom has a 30% chance to grant 2 charges when triggered instead of 1. - if dk.hasT13DPS2pc() { + dk.SuddenDoomProcAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) + if dk.HasT13Dps2pc { stacks := core.TernaryInt32(sim.Proc(0.3, "T13 2pc"), 2, 1) dk.SuddenDoomProcAura.SetStacks(sim, stacks) } diff --git a/sim/druid/barkskin.go b/sim/druid/barkskin.go index 0cb56fd1a1..bd602bea6f 100644 --- a/sim/druid/barkskin.go +++ b/sim/druid/barkskin.go @@ -31,7 +31,7 @@ func (druid *Druid) registerBarkskinCD() { druid.PseudoStats.ReducedCritTakenChance -= 0.25 } - if druid.hasT12Feral4pBonus() { + if druid.HasT12Feral4pBonus { druid.SmokescreenAura.Activate(sim) } }, diff --git a/sim/druid/berserk.go b/sim/druid/berserk.go index 8568081217..f054810928 100644 --- a/sim/druid/berserk.go +++ b/sim/druid/berserk.go @@ -98,7 +98,7 @@ func (druid *Druid) registerBerserkCD() { } func (druid *Druid) ApplyFeral4pT12(sim *core.Simulation) { - if !druid.hasT12Feral4pBonus() || !druid.BerserkAura.IsActive() { + if !druid.HasT12Feral4pBonus || !druid.BerserkAura.IsActive() { return } diff --git a/sim/druid/druid.go b/sim/druid/druid.go index cf05838146..e46e24116b 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -123,6 +123,11 @@ type Druid struct { form DruidForm disabledMCDs []*core.MajorCooldown + + // Item sets + HasT11Feral2pBonus bool + HasT11Feral4pBonus bool + HasT12Feral4pBonus bool } const ( diff --git a/sim/druid/forms.go b/sim/druid/forms.go index b0693c88ed..8b9fd98afc 100644 --- a/sim/druid/forms.go +++ b/sim/druid/forms.go @@ -172,7 +172,7 @@ func (druid *Druid) registerCatFormSpell() { druid.PredatoryInstinctsAura.Deactivate(sim) } - if druid.hasT11Feral4pBonus() && druid.StrengthOfThePantherAura.IsActive() { + if druid.HasT11Feral4pBonus && druid.StrengthOfThePantherAura.IsActive() { druid.StrengthOfThePantherAura.Deactivate(sim) } } diff --git a/sim/druid/items.go b/sim/druid/items.go index 630ea5d8a9..facdfbb584 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -12,10 +12,12 @@ import ( var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Battlegarb", Bonuses: map[int32]core.ApplySetBonus{ - 2: func(_ core.Agent, _ *core.Aura) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in rake.go and lacerate.go + druid := agent.(DruidAgent).GetDruid() + setBonusAura.AttachBooleanToggle(druid.HasT11Feral2pBonus) }, - 4: func(agent core.Agent, _ *core.Aura) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() var apDepByStackCount = map[int32]*stats.StatDependency{} @@ -39,18 +41,12 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ } }, }) + + setBonusAura.AttachBooleanToggle(druid.HasT11Feral4pBonus) }, }, }) -func (druid *Druid) hasT11Feral2pBonus() bool { - return druid.HasActiveSetBonus(ItemSetStormridersBattlegarb.Name, 2) -} - -func (druid *Druid) hasT11Feral4pBonus() bool { - return druid.HasActiveSetBonus(ItemSetStormridersBattlegarb.Name, 4) -} - // T11 Balance var ItemSetStormridersRegalia = core.NewItemSet(core.ItemSet{ Name: "Stormrider's Regalia", @@ -156,14 +152,11 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ druid.PseudoStats.BaseDodgeChance -= 0.1 }, }) + setBonusAura.AttachBooleanToggle(druid.HasT12Feral4pBonus) }, }, }) -func (druid *Druid) hasT12Feral4pBonus() bool { - return druid.HasActiveSetBonus(ItemSetObsidianArborweaveBattlegarb.Name, 4) -} - // T12 Balance var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ Name: "Obsidian Arborweave Regalia", @@ -190,23 +183,40 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ druid.OnSpellRegistered(func(spell *core.Spell) { if spell.Matches(DruidSpellWrath) { - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip := func() { druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) + } + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip() }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) }) + + if setBonusAura.IsActive() { + onEquip() + } + } if spell.Matches(DruidSpellStarfire) { - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip := func() { druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) + } + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip() }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) }) + + if setBonusAura.IsActive() { + onEquip() + } } }) diff --git a/sim/druid/lacerate.go b/sim/druid/lacerate.go index 5d50ccf8d7..fe463a8d9d 100644 --- a/sim/druid/lacerate.go +++ b/sim/druid/lacerate.go @@ -13,7 +13,7 @@ func (druid *Druid) registerLacerateSpell() { initialDamageMul := 1.0 // Set bonuses can scale up the ticks relative to the initial hit - getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.hasT11Feral2pBonus(), 1.1, 1) } + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.HasT11Feral2pBonus, 1.1, 1) } druid.Lacerate = druid.RegisterSpell(Bear, core.SpellConfig{ ActionID: core.ActionID{SpellID: 33745}, diff --git a/sim/druid/mangle.go b/sim/druid/mangle.go index 50aa1bd5d2..f64332a009 100644 --- a/sim/druid/mangle.go +++ b/sim/druid/mangle.go @@ -118,7 +118,7 @@ func (druid *Druid) registerMangleCatSpell() { } // 4pT11 - if druid.hasT11Feral4pBonus() && druid.StrengthOfThePantherAura != nil { + if druid.HasT11Feral4pBonus && druid.StrengthOfThePantherAura != nil { aura := druid.StrengthOfThePantherAura if aura.IsActive() { diff --git a/sim/druid/rake.go b/sim/druid/rake.go index f5f4846b16..3bde634763 100644 --- a/sim/druid/rake.go +++ b/sim/druid/rake.go @@ -15,7 +15,7 @@ func (druid *Druid) registerRakeSpell() { flatBaseDamage := coefficient * druid.ClassSpellScaling // ~56 // Set bonuses can scale up the ticks relative to the initial hit - getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.hasT11Feral2pBonus(), 1.1, 1) } + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.HasT11Feral2pBonus, 1.1, 1) } druid.Rake = druid.RegisterSpell(Cat, core.SpellConfig{ ActionID: core.ActionID{SpellID: 1822}, diff --git a/sim/druid/survival_instincts.go b/sim/druid/survival_instincts.go index db11d4f374..ed5ec8ddef 100644 --- a/sim/druid/survival_instincts.go +++ b/sim/druid/survival_instincts.go @@ -16,7 +16,7 @@ func (druid *Druid) registerSurvivalInstinctsCD() { cdTimer := druid.NewTimer() cd := time.Minute * 3 getDuration := func() time.Duration { - return core.TernaryDuration(druid.hasT11Feral4pBonus(), time.Second*18, time.Second*12) + return core.TernaryDuration(druid.HasT11Feral4pBonus, time.Second*18, time.Second*12) } druid.SurvivalInstinctsAura = druid.RegisterAura(core.Aura{ diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 643f7678dc..db9afb35f0 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -105,13 +105,16 @@ var ItemSetFlameWakersBattleGear = core.NewItemSet(core.ItemSet{ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ Name: "Wyrmstalker Battlegear", Bonuses: map[int32]core.ApplySetBonus{ - 2: func(_ core.Agent, setBonusAura *core.Aura) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { + hunter := agent.(HunterAgent).GetHunter() + // Handled in Cobra Shot setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Flat, FloatValue: 0.1, ClassMask: HunterSpellSteadyShot, }) + setBonusAura.AttachBooleanToggle(hunter.Has2pcT13) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() @@ -141,10 +144,6 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ }, }) -func (hunter *Hunter) has2pcT13() bool { - return hunter.HasActiveSetBonus(ItemSetWyrmstalkerBattleGear.Name, 2) -} - var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ Name: "Lightning-Charged Battlegear", Bonuses: map[int32]core.ApplySetBonus{ diff --git a/sim/hunter/cobra_shot.go b/sim/hunter/cobra_shot.go index 2eae8eb2c5..3121ea29a2 100644 --- a/sim/hunter/cobra_shot.go +++ b/sim/hunter/cobra_shot.go @@ -41,7 +41,7 @@ func (hunter *Hunter) registerCobraShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (276.806 + spell.RangedAttackPower(target)*0.017) - intFocus := core.TernaryFloat64(hunter.has2pcT13(), 9*2, 9) + intFocus := core.TernaryFloat64(hunter.Has2pcT13, 9*2, 9) if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 } diff --git a/sim/hunter/hunter.go b/sim/hunter/hunter.go index 4f2000e72d..1affb89ca7 100644 --- a/sim/hunter/hunter.go +++ b/sim/hunter/hunter.go @@ -73,6 +73,9 @@ type Hunter struct { MasterMarksmanAura *core.Aura MasterMarksmanCounterAura *core.Aura TrapLauncherAura *core.Aura + + // Item sets + Has2pcT13 bool } func (hunter *Hunter) GetCharacter() *core.Character { diff --git a/sim/hunter/steady_shot.go b/sim/hunter/steady_shot.go index 014eba62ed..70890ed2ee 100644 --- a/sim/hunter/steady_shot.go +++ b/sim/hunter/steady_shot.go @@ -46,7 +46,7 @@ func (hunter *Hunter) registerSteadyShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (280.182 + (spell.RangedAttackPower(target) * 0.021)) - intFocus := core.TernaryFloat64(hunter.has2pcT13(), 9*2, 9) + intFocus := core.TernaryFloat64(hunter.Has2pcT13, 9*2, 9) if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 diff --git a/sim/mage/items.go b/sim/mage/items.go index bfa531d055..cfadfc4c0f 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -39,8 +39,6 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { mage := agent.(MageAgent).GetMage() - mage.t12MirrorImage = mage.NewT12MirrorImage() - setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Mage T12 2P Bonus", Callback: core.CallbackOnCastComplete, @@ -70,15 +68,12 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ mage.baseHotStreakProcChance -= .30 }) + setBonusAura.AttachBooleanToggle(mage.Has4pcT12) setBonusAura.ExposeToAPL(99064) }, }, }) -func (mage *Mage) has4pcT12() bool { - return mage.HasActiveSetBonus(ItemSetFirehawkRobesOfConflagration.Name, 4) -} - // T13 var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ Name: "Time Lord's Regalia", diff --git a/sim/mage/mage.go b/sim/mage/mage.go index fa2f38bd73..7821ad7c8b 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -52,6 +52,9 @@ type Mage struct { previousCombustionDotEstimate int32 ClassSpellScaling float64 + + // Item sets + Has4pcT12 bool } func (mage *Mage) GetCharacter() *core.Character { @@ -176,6 +179,7 @@ func NewMage(character *core.Character, options *proto.Player, mageOptions *prot mage.mirrorImage = mage.NewMirrorImage() mage.flameOrb = mage.NewFlameOrb() mage.frostfireOrb = mage.NewFrostfireOrb() + mage.t12MirrorImage = mage.NewT12MirrorImage() return mage } diff --git a/sim/mage/talents_arcane.go b/sim/mage/talents_arcane.go index b66a304aa7..9b330e5b5b 100644 --- a/sim/mage/talents_arcane.go +++ b/sim/mage/talents_arcane.go @@ -303,7 +303,7 @@ func (mage *Mage) registerArcanePowerCD() { mage.arcanePowerGCDmod.Activate() } - arcanePowerCostMod.UpdateFloatValue(core.TernaryFloat64(mage.has4pcT12(), -0.1, 0.2)) + arcanePowerCostMod.UpdateFloatValue(core.TernaryFloat64(mage.Has4pcT12, -0.1, 0.2)) arcanePowerCostMod.Activate() arcanePowerDmgMod.Activate() diff --git a/sim/paladin/inquisition.go b/sim/paladin/inquisition.go index 666e8018b1..052b964a1d 100644 --- a/sim/paladin/inquisition.go +++ b/sim/paladin/inquisition.go @@ -52,7 +52,7 @@ func (paladin *Paladin) registerInquisition() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { holyPower := paladin.GetHolyPowerValue() - if paladin.hasT11Ret4pc() { + if paladin.HasT11Ret4pc { holyPower += 1 } diff --git a/sim/paladin/items.go b/sim/paladin/items.go index d0e7b6d85b..5505c86c08 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -20,17 +20,16 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ FloatValue: 0.1, }) }, - 4: func(_ core.Agent, setBonusAura *core.Aura) { + 4: func(agent core.Agent, setBonusAura *core.Aura) { + character := agent.(PaladinAgent).GetPaladin() + setBonusAura.AttachBooleanToggle(character.HasT11Ret4pc) + // Handled in inquisition.go setBonusAura.ExposeToAPL(90299) }, }, }) -func (paladin *Paladin) hasT11Ret4pc() bool { - return paladin.HasActiveSetBonus(ItemSetReinforcedSapphiriumBattleplate.Name, 4) -} - // Tier 12 ret var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ Name: "Battleplate of Immolation", @@ -69,12 +68,20 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ return } - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + onEquip := func() { paladin.ZealotryAura.Duration += time.Second * 15 + } + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + onEquip() }) setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { paladin.ZealotryAura.Duration -= time.Second * 15 }) + + if setBonusAura.IsActive() { + onEquip() + } }) setBonusAura.ExposeToAPL(99116) @@ -231,11 +238,15 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) } - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip := func() { if paladin.AncientPowerAura != nil { paladin.AncientPowerAura.Duration = applyT11Prot4pcBonus(acientPowerBaseDuration) } paladin.GoakAura.Duration = applyT11Prot4pcBonus(goakBaseDuration) + } + + setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { + onEquip() }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { @@ -244,6 +255,10 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ } paladin.GoakAura.Duration = goakBaseDuration }) + + if setBonusAura.IsActive() { + onEquip() + } }) }, }, diff --git a/sim/paladin/paladin.go b/sim/paladin/paladin.go index 3e98067daf..c4fe73891f 100644 --- a/sim/paladin/paladin.go +++ b/sim/paladin/paladin.go @@ -188,6 +188,9 @@ type Paladin struct { // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet + + // Item sets + HasT11Ret4pc bool } func (paladin *Paladin) GetTentacles() []*cata.TentacleOfTheOldOnesPet { diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index 3f08ff6901..470d23af88 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -1236,15 +1236,15 @@ dps_results: { dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattlearmor" value: { - dps: 30558.76595 - tps: 30581.30202 + dps: 30783.49855 + tps: 30684.8149 } } dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattleplate" value: { - dps: 33098.10813 - tps: 33134.4054 + dps: 32450.21943 + tps: 32485.99946 } } dps_results: { @@ -2050,379 +2050,379 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37220.90434 - tps: 41473.66458 + dps: 35964.0789 + tps: 40318.26642 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32545.57781 - tps: 32431.66212 + dps: 31644.43092 + tps: 31535.27793 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 45318.58813 - tps: 43762.82519 + dps: 44339.03237 + tps: 42772.15587 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21388.25433 - tps: 25530.18145 + dps: 20874.90176 + tps: 24982.13328 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19582.07222 - tps: 19487.39636 + dps: 18989.55411 + tps: 18897.29742 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 25192.36628 - tps: 23793.24029 + dps: 24519.46478 + tps: 23125.5194 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37862.45122 - tps: 42128.53137 + dps: 36663.9701 + tps: 40979.6835 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32979.57632 - tps: 32870.41224 + dps: 32096.04754 + tps: 31989.66427 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44487.75583 - tps: 42952.11795 + dps: 43423.29585 + tps: 41867.22173 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21399.39561 - tps: 25514.93862 + dps: 21038.96761 + tps: 25137.8077 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19672.70292 - tps: 19578.06106 + dps: 19119.49279 + tps: 19026.56736 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24530.82854 - tps: 23134.48434 + dps: 23862.18143 + tps: 22471.26201 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36504.17418 - tps: 40782.41582 + dps: 35518.15221 + tps: 39813.36873 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32069.09772 - tps: 31960.73832 + dps: 31157.97227 + tps: 31046.64833 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44827.61873 - tps: 43282.92441 + dps: 43963.15159 + tps: 42401.14983 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21618.38308 - tps: 26037.24678 + dps: 21092.91953 + tps: 25618.0493 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19075.64301 - tps: 18993.56097 + dps: 18469.5281 + tps: 18389.36412 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24565.57781 - tps: 23169.67696 + dps: 23952.03293 + tps: 22565.13836 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 44234.53136 - tps: 47990.10114 + dps: 43548.30463 + tps: 47303.87441 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39972.8988 - tps: 39842.68108 + dps: 39265.47218 + tps: 39135.25445 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 55115.11175 - tps: 53492.12716 + dps: 54180.27596 + tps: 52557.29137 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 26332.79431 - tps: 30124.02536 + dps: 25903.24017 + tps: 29694.47122 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24379.40754 - tps: 24265.95878 + dps: 23946.0448 + tps: 23832.59605 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30911.05961 - tps: 29476.67457 + dps: 30444.69938 + tps: 29010.31434 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43748.43512 - tps: 47622.02803 + dps: 43082.9519 + tps: 46956.54481 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39253.15722 - tps: 39118.79853 + dps: 38574.99385 + tps: 38440.63516 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 55043.80834 - tps: 53415.33097 + dps: 54162.49471 + tps: 52534.01735 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25973.71971 - tps: 29704.09298 + dps: 25555.67099 + tps: 29286.04426 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23980.19598 - tps: 23874.09207 + dps: 23557.10949 + tps: 23451.00558 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31179.47166 - tps: 29753.0919 + dps: 30710.21266 + tps: 29283.8329 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 43748.43512 - tps: 47622.02803 + dps: 43082.9519 + tps: 46956.54481 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39253.15722 - tps: 39118.79853 + dps: 38574.99385 + tps: 38440.63516 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 55043.80834 - tps: 53415.33097 + dps: 54162.49471 + tps: 52534.01735 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25973.71971 - tps: 29704.09298 + dps: 25555.67099 + tps: 29286.04426 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23980.19598 - tps: 23874.09207 + dps: 23557.10949 + tps: 23451.00558 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p3_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31179.47166 - tps: 29753.0919 + dps: 30710.21266 + tps: 29283.8329 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 58286.0195 - tps: 60283.38973 + dps: 57499.24171 + tps: 59496.61194 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 52010.13165 - tps: 49342.68349 + dps: 51226.04298 + tps: 48558.59482 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 68525.0538 - tps: 64828.18587 + dps: 67472.92644 + tps: 63776.0585 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 36199.12617 - tps: 38527.00468 + dps: 35705.53217 + tps: 38046.19784 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32951.29971 - tps: 30694.08886 + dps: 32454.71494 + tps: 30191.55145 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 39728.50458 - tps: 36904.70592 + dps: 39129.29844 + tps: 36312.11384 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57615.73899 - tps: 59617.20708 + dps: 56838.47866 + tps: 58839.94676 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51677.03532 - tps: 48999.28858 + dps: 50897.3513 + tps: 48219.60456 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 68666.95274 - tps: 64962.94163 + dps: 67614.35071 + tps: 63910.3396 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35793.08449 - tps: 38104.42786 + dps: 35308.0867 + tps: 37631.1149 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32604.11591 - tps: 30321.58104 + dps: 32109.87283 + tps: 29822.70813 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 38992.67021 - tps: 36155.64345 + dps: 38403.18045 + tps: 35579.38179 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 57798.70579 - tps: 59845.60116 + dps: 57028.33526 + tps: 59075.23063 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 51821.1691 - tps: 49166.70562 + dps: 51033.37415 + tps: 48378.91067 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 70097.07451 - tps: 66400.20658 + dps: 69010.03043 + tps: 65313.16249 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 35968.99128 - tps: 38279.45277 + dps: 35477.4778 + tps: 37799.62412 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32922.31109 - tps: 30645.47855 + dps: 32423.49169 + tps: 30139.38369 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p4_with_on_use-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40559.55426 - tps: 37729.14155 + dps: 39959.47113 + tps: 37135.67247 } } dps_results: { diff --git a/sim/rogue/assassination/vendetta.go b/sim/rogue/assassination/vendetta.go index 32b3c3dfa7..08016b2bc3 100644 --- a/sim/rogue/assassination/vendetta.go +++ b/sim/rogue/assassination/vendetta.go @@ -16,7 +16,7 @@ func (sinRogue *AssassinationRogue) registerVendetta() { actionID := core.ActionID{SpellID: 79140} hasGlyph := sinRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) getDuration := func() time.Duration { - return time.Duration((30.0+core.TernaryFloat64(sinRogue.Has4pcT13(), 3.0, 0))*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second + return time.Duration((30.0+core.TernaryFloat64(sinRogue.Has4pcT13, 3.0, 0))*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second } vendettaAura := sinRogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { diff --git a/sim/rogue/combat/adrenaline_rush.go b/sim/rogue/combat/adrenaline_rush.go index f8174a9f52..de9ac96757 100644 --- a/sim/rogue/combat/adrenaline_rush.go +++ b/sim/rogue/combat/adrenaline_rush.go @@ -20,7 +20,7 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { getDuration := func() time.Duration { return core.TernaryDuration(comRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfAdrenalineRush), time.Second*20, time.Second*15) + - core.TernaryDuration(comRogue.Has4pcT13(), time.Second*3, 0) + core.TernaryDuration(comRogue.Has4pcT13, time.Second*3, 0) } comRogue.AdrenalineRushAura = comRogue.RegisterAura(core.Aura{ diff --git a/sim/rogue/items.go b/sim/rogue/items.go index dd93ace569..ee4955c4de 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -215,14 +215,13 @@ var Tier13 = core.NewItemSet(core.ItemSet{ // Increases the duration of Shadow Dance by 2 sec, Adrenaline Rush by 3 sec, and Vendetta by 9 sec. // Implemented in respective spells 4: func(agent core.Agent, setBonusAura *core.Aura) { + rogue := agent.(RogueAgent).GetRogue() + + setBonusAura.AttachBooleanToggle(rogue.Has4pcT13) }, }, }) -func (rogue *Rogue) Has4pcT13() bool { - return rogue.HasActiveSetBonus(Tier13.Name, 4) -} - // Pulled from old Shadowcraft/SimC logic. // There exists Blizzard sourced numbers, but those were from MoP beta. TBD which is valid. // The final difference between the Blizzard numbers and old TC numbers is exceedingly small either way. diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 0cea4f3e70..80d7023fe9 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -104,6 +104,9 @@ type Rogue struct { ruthlessnessMetrics *core.ResourceMetrics relentlessStrikesMetrics *core.ResourceMetrics + + // Item sets + Has4pcT13 bool } func (rogue *Rogue) GetCharacter() *core.Character { diff --git a/sim/rogue/subtlety/shadow_dance.go b/sim/rogue/subtlety/shadow_dance.go index 844ebc11ad..270dbff194 100644 --- a/sim/rogue/subtlety/shadow_dance.go +++ b/sim/rogue/subtlety/shadow_dance.go @@ -15,7 +15,7 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { hasGlyph := subRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfShadowDance) getDuration := func() time.Duration { - return core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6) + core.TernaryDuration(subRogue.Has4pcT13(), time.Second*2, 0) + return core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6) + core.TernaryDuration(subRogue.Has4pcT13, time.Second*2, 0) } actionID := core.ActionID{SpellID: 51713} diff --git a/sim/shaman/chain_lightning.go b/sim/shaman/chain_lightning.go index adc64942ab..0c19124dd0 100644 --- a/sim/shaman/chain_lightning.go +++ b/sim/shaman/chain_lightning.go @@ -35,7 +35,7 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe numHits = min(numHits, shaman.Env.GetNumTargets()) spellConfig.ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - bounceReduction := core.TernaryFloat64(shaman.hasDungeonSet3() && !isElementalOverload, 0.83, 0.7) + bounceReduction := core.TernaryFloat64(shaman.HasDungeonSet3 && !isElementalOverload, 0.83, 0.7) baseDamage := shaman.CalcAndRollDamageRange(sim, 1.08800005913, 0.13300000131) curTarget := target diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index ca4862933e..a1e922025a 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -1564,13 +1564,6 @@ dps_results: { tps: 1746.63005 } } -dps_results: { - key: "TestElemental-AllItems-Spiritwalker'sVestments" - value: { - dps: 34715.09325 - tps: 1731.74858 - } -} dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77202" value: { diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 3d1a86bb62..8b3e1e1529 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -38,2215 +38,2208 @@ character_stats_results: { dps_results: { key: "TestEnhancement-AllItems-AgileShadowspiritDiamond" value: { - dps: 36886.00904 - tps: 23607.4739 + dps: 36887.3206 + tps: 23608.7695 } } dps_results: { key: "TestEnhancement-AllItems-AgonyandTorment" value: { - dps: 33359.11814 - tps: 20777.94427 + dps: 33355.55111 + tps: 20774.30462 } } dps_results: { key: "TestEnhancement-AllItems-Althor'sAbacus-50366" value: { - dps: 34582.43448 - tps: 22257.25007 + dps: 34584.30356 + tps: 22257.58013 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-55889" value: { - dps: 34783.853 - tps: 22358.72417 + dps: 34780.0441 + tps: 22353.86568 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-56407" value: { - dps: 34869.82226 - tps: 22501.14785 + dps: 34867.68103 + tps: 22499.04119 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 35890.01435 - tps: 22984.87401 + dps: 35890.62413 + tps: 22984.52136 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 36066.69656 - tps: 23081.82643 + dps: 36067.13693 + tps: 23081.38245 } } dps_results: { key: "TestEnhancement-AllItems-ArrowofTime-72897" value: { - dps: 36620.81757 - tps: 23470.36875 + dps: 36619.96826 + tps: 23467.44545 } } dps_results: { key: "TestEnhancement-AllItems-AustereShadowspiritDiamond" value: { - dps: 36167.09527 - tps: 23143.7657 + dps: 36169.50927 + tps: 23144.7489 } } dps_results: { key: "TestEnhancement-AllItems-BattlegearoftheRagingElements" value: { - dps: 31109.13936 - tps: 20464.22275 + dps: 31109.93907 + tps: 20462.51889 } } dps_results: { key: "TestEnhancement-AllItems-BaubleofTrueBlood-50726" value: { - dps: 34559.46703 - tps: 22252.41576 + dps: 34561.36122 + tps: 22252.75559 hps: 94.85146 } } dps_results: { key: "TestEnhancement-AllItems-BedrockTalisman-58182" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-59326" value: { - dps: 34968.73931 - tps: 22562.4721 + dps: 34976.39396 + tps: 22570.28757 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-65053" value: { - dps: 35020.96436 - tps: 22594.92216 + dps: 35027.82606 + tps: 22602.71459 } } dps_results: { key: "TestEnhancement-AllItems-BindingPromise-67037" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-BlackBruise-50692" value: { - dps: 33852.18526 - tps: 21370.73606 + dps: 33859.86653 + tps: 21374.58379 } } dps_results: { key: "TestEnhancement-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 35892.80731 - tps: 23025.79314 + dps: 35894.50008 + tps: 23026.81018 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-55995" value: { - dps: 35033.63231 - tps: 22485.69097 + dps: 35035.52689 + tps: 22485.99814 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-56414" value: { - dps: 35095.92242 - tps: 22516.22157 + dps: 35097.81705 + tps: 22516.52446 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36309.35507 - tps: 23371.47329 + dps: 36313.82024 + tps: 23374.63238 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 35145.6237 - tps: 22599.54953 + dps: 35147.51788 + tps: 22599.88937 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 34939.30393 - tps: 22533.89955 + dps: 34946.43123 + tps: 22540.67942 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 34557.96241 - tps: 22252.48641 + dps: 34559.85659 + tps: 22252.82624 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 35835.64344 - tps: 23066.7247 + dps: 35839.34019 + tps: 23068.09965 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 35097.27861 - tps: 22569.44577 + dps: 35099.17279 + tps: 22569.78561 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77210" value: { - dps: 36306.26798 - tps: 23737.16317 + dps: 36311.51807 + tps: 23739.80822 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77982" value: { - dps: 36050.39704 - tps: 23493.6143 + dps: 36047.5067 + tps: 23489.13574 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-78002" value: { - dps: 36497.8342 - tps: 23876.69214 + dps: 36497.4729 + tps: 23874.8196 } } dps_results: { key: "TestEnhancement-AllItems-BottledLightning-66879" value: { - dps: 34774.97037 - tps: 22403.62717 + dps: 34777.13388 + tps: 22405.02977 } } dps_results: { key: "TestEnhancement-AllItems-BottledWishes-77114" value: { - dps: 35123.87323 - tps: 22599.18815 + dps: 35123.12793 + tps: 22599.66169 } } dps_results: { key: "TestEnhancement-AllItems-BracingShadowspiritDiamond" value: { - dps: 36180.70752 - tps: 22692.36653 + dps: 36183.14043 + tps: 22693.3486 } } dps_results: { key: "TestEnhancement-AllItems-Brawler'sTrophy-232015" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-BurningShadowspiritDiamond" value: { - dps: 36690.24399 - tps: 23500.43304 + dps: 36692.693 + tps: 23501.4542 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 36779.58914 - tps: 23643.96645 + dps: 36782.05634 + tps: 23646.99656 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 35493.19443 - tps: 22804.78256 + dps: 35495.08861 + tps: 22805.1224 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 36649.07491 - tps: 23624.82808 + dps: 36652.74208 + tps: 23627.53268 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 35450.2243 - tps: 22786.55298 + dps: 35452.11849 + tps: 22786.89281 } } dps_results: { key: "TestEnhancement-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 35923.64815 - tps: 23119.46816 + dps: 35931.29193 + tps: 23127.26634 } } dps_results: { key: "TestEnhancement-AllItems-CoreofRipeness-58184" value: { - dps: 34601.55648 - tps: 22262.03351 + dps: 34603.45433 + tps: 22262.38375 } } dps_results: { key: "TestEnhancement-AllItems-CorpseTongueCoin-50349" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 35866.97687 - tps: 23131.99705 + dps: 35866.12644 + tps: 23130.25199 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 35659.80586 - tps: 23031.83011 + dps: 35661.62977 + tps: 23031.36273 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 36105.01897 - tps: 23284.2645 + dps: 36104.01376 + tps: 23282.48066 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-59506" value: { - dps: 35566.33206 - tps: 22902.02314 + dps: 35561.07741 + tps: 22895.58941 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-65118" value: { - dps: 35587.2226 - tps: 22794.85005 + dps: 35584.06661 + tps: 22792.00494 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77208" value: { - dps: 35299.01416 - tps: 22965.4689 + dps: 35308.00284 + tps: 22971.18225 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77980" value: { - dps: 35232.17347 - tps: 22897.04858 + dps: 35236.78991 + tps: 22900.03481 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-78000" value: { - dps: 35465.4866 - tps: 23107.69795 + dps: 35473.73063 + tps: 23112.50118 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 35550.4096 - tps: 23021.13077 + dps: 35554.51698 + tps: 23022.31678 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 36316.3127 - tps: 23506.44456 + dps: 36316.39828 + tps: 23503.74025 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 34601.55648 - tps: 22262.03351 + dps: 34603.45433 + tps: 22262.38375 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 35308.65801 - tps: 22761.14208 + dps: 35310.1477 + tps: 22761.41416 } } dps_results: { key: "TestEnhancement-AllItems-Deathbringer'sWill-50363" value: { - dps: 35414.86757 - tps: 22748.39545 + dps: 35416.19233 + tps: 22748.77537 } } dps_results: { key: "TestEnhancement-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 36225.23898 - tps: 23163.99519 + dps: 36226.63127 + tps: 23165.26921 } } dps_results: { key: "TestEnhancement-AllItems-DislodgedForeignObject-50348" value: { - dps: 34769.84032 - tps: 22294.06296 + dps: 34769.96064 + tps: 22292.31672 } } dps_results: { key: "TestEnhancement-AllItems-Dragonwrath,Tarecgosa'sRest-71086" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Dwyer'sCaber-70141" value: { - dps: 35615.02401 - tps: 23010.14608 + dps: 35621.77367 + tps: 23014.51948 } } dps_results: { key: "TestEnhancement-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 36167.09527 - tps: 23143.7657 + dps: 36169.50927 + tps: 23144.7489 } } dps_results: { key: "TestEnhancement-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 34576.45494 - tps: 22288.65848 + dps: 34578.46494 + tps: 22289.03343 } } dps_results: { key: "TestEnhancement-AllItems-EmberShadowspiritDiamond" value: { - dps: 36180.70752 - tps: 23150.9922 + dps: 36183.14043 + tps: 23151.99431 } } dps_results: { key: "TestEnhancement-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 36225.23898 - tps: 23163.99519 + dps: 36226.63127 + tps: 23165.26921 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-59473" value: { - dps: 36061.33085 - tps: 23352.2734 + dps: 36067.28475 + tps: 23356.5154 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-65140" value: { - dps: 36238.48231 - tps: 23449.85173 + dps: 36244.61928 + tps: 23454.54577 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 35871.30019 - tps: 22950.15027 + dps: 35873.19498 + tps: 22950.44046 } } dps_results: { key: "TestEnhancement-AllItems-EternalShadowspiritDiamond" value: { - dps: 36167.09527 - tps: 23143.7657 + dps: 36169.50927 + tps: 23144.7489 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77200" value: { - dps: 36020.29488 - tps: 23127.99296 + dps: 36022.18907 + tps: 23128.3328 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77977" value: { - dps: 35854.12074 - tps: 23028.5106 + dps: 35856.01492 + tps: 23028.85044 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77997" value: { - dps: 36203.08644 - tps: 23237.42356 + dps: 36204.98063 + tps: 23237.76339 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-59500" value: { - dps: 34601.55648 - tps: 22262.03351 + dps: 34603.45433 + tps: 22262.38375 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-65124" value: { - dps: 34610.46829 - tps: 22266.79946 + dps: 34612.56866 + tps: 22267.36071 } } dps_results: { key: "TestEnhancement-AllItems-FieryQuintessence-69000" value: { - dps: 34599.88141 - tps: 22335.00577 + dps: 34603.3581 + tps: 22337.04198 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36194.88202 - tps: 23293.77135 + dps: 36195.36691 + tps: 23291.82577 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DreamOwl-52354" value: { - dps: 34595.17953 - tps: 22260.42722 + dps: 34597.07737 + tps: 22260.77745 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 34595.17953 - tps: 22260.42722 + dps: 34597.07737 + tps: 22260.77745 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-KingofBoars-52351" value: { - dps: 35655.17238 - tps: 22845.44444 + dps: 35657.06702 + tps: 22845.74734 } } dps_results: { key: "TestEnhancement-AllItems-FireoftheDeep-77117" value: { - dps: 35422.47358 - tps: 22676.27594 + dps: 35424.36849 + tps: 22676.55641 } } dps_results: { key: "TestEnhancement-AllItems-FleetShadowspiritDiamond" value: { - dps: 36271.55133 - tps: 23194.91395 + dps: 36273.96914 + tps: 23195.8909 } } dps_results: { key: "TestEnhancement-AllItems-FluidDeath-58181" value: { - dps: 36354.90623 - tps: 23424.58884 + dps: 36357.21523 + tps: 23425.40197 } } dps_results: { key: "TestEnhancement-AllItems-ForlornShadowspiritDiamond" value: { - dps: 36180.70752 - tps: 23151.09527 + dps: 36183.14043 + tps: 23152.09738 } } dps_results: { key: "TestEnhancement-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 35418.09714 - tps: 22667.99509 + dps: 35418.66301 + tps: 22667.94336 } } dps_results: { key: "TestEnhancement-AllItems-FuryofAngerforge-59461" value: { - dps: 35627.49459 - tps: 22954.65184 + dps: 35635.14924 + tps: 22962.46731 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56138" value: { - dps: 34772.97576 - tps: 22401.08699 + dps: 34774.76572 + tps: 22403.8964 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56462" value: { - dps: 34711.28105 - tps: 22301.61831 + dps: 34712.3748 + tps: 22302.16365 } } dps_results: { key: "TestEnhancement-AllItems-GearDetector-61462" value: { - dps: 35463.80444 - tps: 22773.44451 + dps: 35462.73898 + tps: 22772.31324 } } dps_results: { key: "TestEnhancement-AllItems-GlowingTwilightScale-54589" value: { - dps: 34583.56403 - tps: 22257.21583 + dps: 34585.49264 + tps: 22257.54588 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-55266" value: { - dps: 35453.25581 - tps: 22808.24554 + dps: 35456.9779 + tps: 22812.25584 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-56295" value: { - dps: 35576.45786 - tps: 22995.82421 + dps: 35577.61165 + tps: 22997.11862 } } dps_results: { key: "TestEnhancement-AllItems-HarmlightToken-63839" value: { - dps: 34809.32345 - tps: 22475.5818 + dps: 34811.15383 + tps: 22475.96561 } } dps_results: { key: "TestEnhancement-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 35320.6549 - tps: 22669.17648 + dps: 35322.68579 + tps: 22669.61666 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-59514" value: { - dps: 34798.4392 - tps: 22454.31584 + dps: 34798.8445 + tps: 22451.46459 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-65110" value: { - dps: 34938.70155 - tps: 22465.08479 + dps: 34937.47274 + tps: 22462.18213 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-59224" value: { - dps: 35373.96498 - tps: 22773.29033 + dps: 35371.90163 + tps: 22770.22958 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-65072" value: { - dps: 35465.51896 - tps: 22821.48552 + dps: 35463.4556 + tps: 22818.42477 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-55868" value: { - dps: 35324.67529 - tps: 22724.02712 + dps: 35326.46525 + tps: 22726.83653 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-56393" value: { - dps: 35329.60366 - tps: 22661.16315 + dps: 35330.6974 + tps: 22661.70849 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-55845" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-56370" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-HeartoftheVile-66969" value: { - dps: 35636.72436 - tps: 22917.66863 + dps: 35637.69442 + tps: 22918.602 } } dps_results: { key: "TestEnhancement-AllItems-Heartpierce-50641" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 36225.23898 - tps: 23163.99519 + dps: 36226.63127 + tps: 23165.26921 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62464" value: { - dps: 35794.95067 - tps: 22920.89275 + dps: 35796.84536 + tps: 22921.19098 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62469" value: { - dps: 35794.95067 - tps: 22920.89275 + dps: 35796.84536 + tps: 22921.19098 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-55881" value: { - dps: 35033.63231 - tps: 22485.69097 + dps: 35035.52689 + tps: 22485.99814 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-56406" value: { - dps: 35095.92242 - tps: 22516.22157 + dps: 35097.81705 + tps: 22516.52446 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77211" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77983" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-78003" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 35227.2288 - tps: 22751.00058 + dps: 35228.12594 + tps: 22750.70052 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 35307.52335 - tps: 22666.9639 + dps: 35311.64036 + tps: 22664.93134 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 35366.6337 - tps: 22744.06745 + dps: 35370.48789 + tps: 22744.96755 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 34924.15273 - tps: 22432.03112 + dps: 34926.04722 + tps: 22432.34581 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-59354" value: { - dps: 34557.96241 - tps: 22256.86701 + dps: 34559.85659 + tps: 22257.20684 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-65029" value: { - dps: 34557.96241 - tps: 22256.93279 + dps: 34559.85659 + tps: 22257.27262 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-68926" value: { - dps: 34613.31241 - tps: 22265.53711 + dps: 34615.41278 + tps: 22266.09836 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-69111" value: { - dps: 34617.7476 - tps: 22265.60251 + dps: 34619.86669 + tps: 22266.16376 } } dps_results: { key: "TestEnhancement-AllItems-JujuofNimbleness-63840" value: { - dps: 35892.80731 - tps: 23025.79314 + dps: 35894.50008 + tps: 23026.81018 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 35838.81949 - tps: 23056.75966 + dps: 35839.04773 + tps: 23054.25097 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36200.19858 - tps: 23347.49643 + dps: 36203.73382 + tps: 23349.48294 } } dps_results: { key: "TestEnhancement-AllItems-KiroptyricSigil-77113" value: { - dps: 37008.41357 - tps: 23768.07866 + dps: 37010.09799 + tps: 23768.08951 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59685" value: { - dps: 35032.40813 - tps: 22458.88965 + dps: 35030.17641 + tps: 22455.48583 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59689" value: { - dps: 35032.40813 - tps: 22458.88965 + dps: 35030.17641 + tps: 22455.48583 } } dps_results: { key: "TestEnhancement-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 34667.07165 - tps: 22372.73672 + dps: 34671.48543 + tps: 22372.89945 } } dps_results: { key: "TestEnhancement-AllItems-LastWord-50708" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-55816" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-56347" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56102" value: { - dps: 35917.18619 - tps: 23157.25358 + dps: 35912.66375 + tps: 23152.01685 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56427" value: { - dps: 36138.16588 - tps: 23329.27079 + dps: 36133.36461 + tps: 23323.64793 } } dps_results: { key: "TestEnhancement-AllItems-LicensetoSlay-58180" value: { - dps: 35609.73327 - tps: 22948.50031 + dps: 35612.11328 + tps: 22950.69249 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-55814" value: { - dps: 35035.73485 - tps: 22574.37444 + dps: 35033.67149 + tps: 22571.31369 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-56345" value: { - dps: 35155.2369 - tps: 22645.84622 + dps: 35153.17354 + tps: 22642.78547 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 34557.96241 - tps: 22252.48268 + dps: 34559.85659 + tps: 22252.82251 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 34557.96241 - tps: 22252.48268 + dps: 34559.85659 + tps: 22252.82251 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56132" value: { - dps: 35472.84682 - tps: 22734.57044 + dps: 35474.4596 + tps: 22734.79102 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56458" value: { - dps: 35593.5946 - tps: 22798.10701 + dps: 35595.17054 + tps: 22798.31197 } } dps_results: { key: "TestEnhancement-AllItems-MatrixRestabilizer-68994" value: { - dps: 37280.73542 - tps: 23826.81689 + dps: 37285.08477 + tps: 23831.22174 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-55251" value: { - dps: 35119.44712 - tps: 22564.17366 + dps: 35114.15238 + tps: 22559.72861 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-56285" value: { - dps: 35355.51758 - tps: 22786.74888 + dps: 35353.37635 + tps: 22784.64222 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62466" value: { - dps: 35163.87526 - tps: 22549.52768 + dps: 35165.76995 + tps: 22549.82591 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62471" value: { - dps: 35163.87526 - tps: 22549.52768 + dps: 35165.76995 + tps: 22549.82591 } } dps_results: { key: "TestEnhancement-AllItems-MithrilStopwatch-232013" value: { - dps: 34952.18362 - tps: 22550.12248 + dps: 34959.8274 + tps: 22557.92067 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellChalice-70142" value: { - dps: 35325.69585 - tps: 22622.7482 + dps: 35327.14028 + tps: 22622.80012 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellPhial-70143" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-68982" value: { - dps: 35279.54412 - tps: 22595.41758 + dps: 35281.66959 + tps: 22595.95802 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-69139" value: { - dps: 35369.55713 - tps: 22637.6143 + dps: 35371.70529 + tps: 22638.15207 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Oremantle'sFavor-61448" value: { - dps: 35165.8407 - tps: 22654.23578 + dps: 35169.23283 + tps: 22656.30556 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 34596.82651 - tps: 22260.68823 + dps: 34598.72436 + tps: 22261.03846 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 34799.55685 - tps: 22389.42637 + dps: 34801.54222 + tps: 22391.76426 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-55237" value: { - dps: 34917.9641 - tps: 22431.50691 + dps: 34920.1202 + tps: 22432.0052 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-56280" value: { - dps: 35225.99031 - tps: 22580.12891 + dps: 35228.11336 + tps: 22580.57234 } } dps_results: { key: "TestEnhancement-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 36167.09527 - tps: 23143.7657 + dps: 36169.50927 + tps: 23144.7489 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 36251.08977 - tps: 23404.0949 + dps: 36247.15211 + tps: 23397.78824 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 36602.61907 - tps: 23575.50219 + dps: 36606.28211 + tps: 23576.05842 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-55854" value: { - dps: 34557.96241 - tps: 22252.50247 + dps: 34559.85659 + tps: 22252.8423 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-56377" value: { - dps: 34557.96241 - tps: 22252.4894 + dps: 34559.85659 + tps: 22252.82923 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 32346.56658 - tps: 21542.43107 + dps: 32336.52498 + tps: 21534.10441 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 32762.98789 - tps: 21987.89842 + dps: 32755.55915 + tps: 21983.03313 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 32125.32142 - tps: 21336.92802 + dps: 32119.30145 + tps: 21330.16367 } } dps_results: { key: "TestEnhancement-AllItems-ReflectionoftheLight-77115" value: { - dps: 34557.96241 - tps: 22252.4571 + dps: 34559.85659 + tps: 22252.79693 } } dps_results: { key: "TestEnhancement-AllItems-RegaliaoftheRagingElements" value: { - dps: 24117.4269 - tps: 15741.85694 + dps: 24123.6024 + tps: 15746.75878 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77201" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77978" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77998" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 36768.19789 - tps: 23547.76767 + dps: 36770.62629 + tps: 23548.76822 } } dps_results: { key: "TestEnhancement-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 36675.4385 - tps: 23492.44972 + dps: 36677.8669 + tps: 23493.45026 } } dps_results: { key: "TestEnhancement-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 36027.57319 - tps: 23323.70679 + dps: 36028.46037 + tps: 23323.78062 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56100" value: { - dps: 35284.14036 - tps: 22656.67674 + dps: 35280.33145 + tps: 22651.81825 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56431" value: { - dps: 35442.8485 - tps: 22847.73046 + dps: 35440.70727 + tps: 22845.6238 } } dps_results: { key: "TestEnhancement-AllItems-RosaryofLight-72901" value: { - dps: 35729.48132 - tps: 23066.69707 + dps: 35736.52028 + tps: 23068.21967 } } dps_results: { key: "TestEnhancement-AllItems-RottingSkull-77116" value: { - dps: 35953.13776 - tps: 23171.52109 + dps: 35959.04164 + tps: 23177.44555 } } dps_results: { key: "TestEnhancement-AllItems-RuneofZeth-68998" value: { - dps: 35078.93553 - tps: 22719.96883 + dps: 35085.43767 + tps: 22727.77921 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 36476.17553 - tps: 23463.86278 + dps: 36479.94006 + tps: 23466.01945 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 36578.33139 - tps: 23527.11492 + dps: 36582.14097 + tps: 23529.31664 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 35342.41291 - tps: 22715.74933 + dps: 35344.30709 + tps: 22716.08916 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 35386.87413 - tps: 22742.00272 + dps: 35388.76831 + tps: 22742.34255 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 36380.62312 - tps: 23427.58369 + dps: 36385.23698 + tps: 23429.9176 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 36496.5255 - tps: 23496.51412 + dps: 36498.98728 + tps: 23497.27608 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 35297.16719 - tps: 22694.75121 + dps: 35299.06137 + tps: 22695.09105 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 35356.55157 - tps: 22728.5837 + dps: 35358.44576 + tps: 22728.92354 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-68915" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 hps: 311.3142 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-69109" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 hps: 351.1595 } } dps_results: { key: "TestEnhancement-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 35902.2108 - tps: 23013.95283 + dps: 35904.5349 + tps: 23016.9206 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-55256" value: { - dps: 34557.96241 - tps: 22252.50527 + dps: 34559.85659 + tps: 22252.8451 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-56290" value: { - dps: 34557.96241 - tps: 22252.4894 + dps: 34559.85659 + tps: 22252.82923 } } dps_results: { key: "TestEnhancement-AllItems-Shadowmourne-49623" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-ShardofWoe-60233" value: { - dps: 34790.37788 - tps: 22354.08484 + dps: 34791.50854 + tps: 22354.12741 } } dps_results: { key: "TestEnhancement-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 35265.77723 - tps: 22609.75626 + dps: 35269.58996 + tps: 22610.98876 } } dps_results: { key: "TestEnhancement-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56115" value: { - dps: 36149.74626 - tps: 23155.45879 + dps: 36151.18726 + tps: 23157.57553 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56440" value: { - dps: 36355.7774 - tps: 23278.62052 + dps: 36357.24988 + tps: 23280.681 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-55879" value: { - dps: 35033.63231 - tps: 22485.69097 + dps: 35035.52689 + tps: 22485.99814 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-56400" value: { - dps: 35095.92242 - tps: 22516.22157 + dps: 35097.81705 + tps: 22516.52446 } } dps_results: { key: "TestEnhancement-AllItems-Soul'sAnguish-66994" value: { - dps: 35044.31286 - tps: 22511.94328 + dps: 35040.50396 + tps: 22507.08479 } } dps_results: { key: "TestEnhancement-AllItems-SoulCasket-58183" value: { - dps: 35163.87526 - tps: 22549.52768 + dps: 35165.76995 + tps: 22549.82591 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77206" value: { - dps: 35747.08387 - tps: 22832.50199 + dps: 35747.02571 + tps: 22831.7436 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77970" value: { - dps: 35611.04996 - tps: 22762.49277 + dps: 35612.70605 + tps: 22762.4188 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77990" value: { - dps: 35899.59523 - tps: 22912.59295 + dps: 35901.22003 + tps: 22912.54414 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-68981" value: { - dps: 35280.90516 - tps: 22606.8882 + dps: 35282.79995 + tps: 22607.1784 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-69138" value: { - dps: 35375.28411 - tps: 22653.14669 + dps: 35377.17898 + tps: 22653.4304 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sBattlegear" value: { - dps: 32285.19439 - tps: 20369.90532 + dps: 32278.87176 + tps: 20362.42845 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sRegalia" value: { - dps: 24379.50575 - tps: 15692.98575 - } -} -dps_results: { - key: "TestEnhancement-AllItems-Spiritwalker'sVestments" - value: { - dps: 23918.77193 - tps: 15430.60431 + dps: 24385.33417 + tps: 15694.93118 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77202" value: { - dps: 36982.18631 - tps: 23856.96913 + dps: 36978.7498 + tps: 23853.57761 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77973" value: { - dps: 36754.6482 - tps: 23675.29991 + dps: 36761.18563 + tps: 23678.20784 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77993" value: { - dps: 37386.51562 - tps: 24001.21906 + dps: 37390.70851 + tps: 24003.43535 } } dps_results: { key: "TestEnhancement-AllItems-StayofExecution-68996" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Stonemother'sKiss-61411" value: { - dps: 34809.32402 - tps: 22383.08302 + dps: 34813.37631 + tps: 22384.40839 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62465" value: { - dps: 34971.10678 - tps: 22565.09922 + dps: 34973.48679 + tps: 22567.2914 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62470" value: { - dps: 34971.10678 - tps: 22565.09922 + dps: 34973.48679 + tps: 22567.2914 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-59332" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-65048" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 34944.24127 - tps: 22434.10652 + dps: 34946.67251 + tps: 22434.72314 } } dps_results: { key: "TestEnhancement-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 35402.45705 - tps: 22774.70247 + dps: 35399.86419 + tps: 22769.52766 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-55819" value: { - dps: 34589.39606 - tps: 22259.08276 + dps: 34591.2939 + tps: 22259.43299 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-56351" value: { - dps: 34595.17953 - tps: 22260.42722 + dps: 34597.07737 + tps: 22260.77745 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 34963.79189 - tps: 22451.45969 + dps: 34965.68641 + tps: 22451.77166 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 35095.92242 - tps: 22516.22157 + dps: 35097.81705 + tps: 22516.52446 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-68927" value: { - dps: 36460.87375 - tps: 23428.09942 + dps: 36463.06245 + tps: 23427.535 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-69112" value: { - dps: 36682.02766 - tps: 23671.63187 + dps: 36678.91317 + tps: 23666.70336 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-59519" value: { - dps: 35281.6228 - tps: 22599.27044 + dps: 35284.95132 + tps: 22600.28251 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-65105" value: { - dps: 35386.22797 - tps: 22654.86886 + dps: 35388.15544 + tps: 22655.17887 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56121" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56449" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-55874" value: { - dps: 36275.25473 - tps: 23249.04301 + dps: 36277.67918 + tps: 23251.67173 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-56394" value: { - dps: 36500.45515 - tps: 23396.10721 + dps: 36505.43219 + tps: 23400.80728 } } dps_results: { key: "TestEnhancement-AllItems-TidefuryRaiment" value: { - dps: 21926.5921 - tps: 14549.20369 + dps: 21929.18114 + tps: 14548.42696 } } dps_results: { key: "TestEnhancement-AllItems-TinyAbominationinaJar-50706" value: { - dps: 35580.76309 - tps: 23074.25192 + dps: 35577.86853 + tps: 23069.97197 } } dps_results: { key: "TestEnhancement-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 34695.09802 - tps: 22398.44093 + dps: 34695.45083 + tps: 22396.57463 } } dps_results: { key: "TestEnhancement-AllItems-UnheededWarning-59520" value: { - dps: 36481.9504 - tps: 23443.1286 + dps: 36486.82222 + tps: 23447.75726 } } dps_results: { key: "TestEnhancement-AllItems-UnquenchableFlame-67101" value: { - dps: 34557.96241 - tps: 22252.51114 + dps: 34559.85659 + tps: 22252.85097 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62463" value: { - dps: 36715.8455 - tps: 23523.9564 + dps: 36719.57019 + tps: 23525.96228 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62468" value: { - dps: 36715.8455 - tps: 23523.9564 + dps: 36719.57019 + tps: 23525.96228 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-68709" value: { - dps: 36715.8455 - tps: 23523.9564 + dps: 36719.57019 + tps: 23525.96228 } } dps_results: { key: "TestEnhancement-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 31407.64207 - tps: 19982.2922 + dps: 31400.98234 + tps: 19975.40659 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 35616.86665 - tps: 23253.78685 + dps: 35620.24066 + tps: 23254.9562 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 35631.09172 - tps: 23346.5258 + dps: 35633.79831 + tps: 23349.04366 } } dps_results: { key: "TestEnhancement-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36074.90167 - tps: 23064.96265 + dps: 36077.45368 + tps: 23065.5774 } } dps_results: { key: "TestEnhancement-AllItems-VeilofLies-72900" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-68995" value: { - dps: 35736.57622 - tps: 23023.96207 + dps: 35744.64794 + tps: 23030.70742 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-69167" value: { - dps: 35920.68057 - tps: 23148.64686 + dps: 35927.54762 + tps: 23154.33675 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77207" value: { - dps: 36891.58788 - tps: 23918.85876 + dps: 36896.66183 + tps: 23921.10692 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77979" value: { - dps: 36646.37216 - tps: 23752.0879 + dps: 36652.72853 + tps: 23756.30562 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77999" value: { - dps: 37158.81012 - tps: 24143.90535 + dps: 37161.32228 + tps: 24143.69726 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-59515" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-65109" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36085.59523 - tps: 23215.48432 + dps: 36089.2942 + tps: 23217.52287 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 36260.85601 - tps: 23328.04217 + dps: 36264.59952 + tps: 23330.17782 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 35178.48634 - tps: 22618.95422 + dps: 35180.38052 + tps: 22619.29405 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 35251.55738 - tps: 22662.10109 + dps: 35253.45157 + tps: 22662.44093 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 34915.53219 - tps: 22542.79081 + dps: 34917.25306 + tps: 22544.7171 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 34848.10187 - tps: 22339.33939 + dps: 34837.70808 + tps: 22328.79041 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 34991.7923 - tps: 22575.13766 + dps: 34998.75176 + tps: 22582.96755 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 34668.69284 - tps: 22354.85398 + dps: 34666.62948 + tps: 22351.79322 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 35199.73926 - tps: 22567.10591 + dps: 35201.63398 + tps: 22567.40167 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 36055.84651 - tps: 23235.64533 + dps: 36059.03343 + tps: 23237.36265 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 36219.41376 - tps: 23331.79831 + dps: 36222.55877 + tps: 23332.33195 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 34557.96241 - tps: 22252.54819 + dps: 34559.85659 + tps: 22252.88803 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 35146.68068 - tps: 22605.79907 + dps: 35148.57487 + tps: 22606.13891 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 35224.46281 - tps: 22652.59058 + dps: 35226.357 + tps: 22652.93042 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicBattlegear" value: { - dps: 33284.69291 - tps: 21453.62927 + dps: 33277.31988 + tps: 21447.66372 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicRegalia" value: { - dps: 24319.00582 - tps: 15917.3764 + dps: 24327.0748 + tps: 15919.05755 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77198" value: { - dps: 34656.85951 - tps: 22302.96396 + dps: 34660.31541 + tps: 22305.03478 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77975" value: { - dps: 34651.43507 - tps: 22291.40068 + dps: 34653.54274 + tps: 22291.90714 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77995" value: { - dps: 34666.52173 - tps: 22308.3818 + dps: 34669.93873 + tps: 22310.43243 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-55787" value: { - dps: 34704.5536 - tps: 22328.14589 + dps: 34708.76897 + tps: 22329.30666 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-56320" value: { - dps: 34773.73817 - tps: 22366.81217 + dps: 34770.71403 + tps: 22362.51996 } } dps_results: { key: "TestEnhancement-AllItems-World-QuellerFocus-63842" value: { - dps: 34971.3422 - tps: 22455.16037 + dps: 34973.23673 + tps: 22455.47182 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77197" value: { - dps: 38150.67858 - tps: 24602.28754 + dps: 38154.90465 + tps: 24605.95284 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77974" value: { - dps: 37748.96148 - tps: 24348.01985 + dps: 37753.45819 + tps: 24352.12614 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77994" value: { - dps: 38597.63036 - tps: 24880.83369 + dps: 38602.29286 + tps: 24884.84699 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 34980.52527 - tps: 22449.75459 + dps: 34982.17491 + tps: 22449.99079 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 34980.52527 - tps: 22449.75459 + dps: 34982.17491 + tps: 22449.99079 } } dps_results: { key: "TestEnhancement-Average-Default" value: { - dps: 36889.22139 - tps: 23584.65269 + dps: 36888.48895 + tps: 23584.22475 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37285.53225 - tps: 28127.49254 + dps: 37286.80309 + tps: 28128.77981 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 36737.5751 - tps: 23514.54766 + dps: 36738.94792 + tps: 23515.83567 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42185.48693 - tps: 25990.35721 + dps: 42178.60004 + tps: 25983.63688 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28654.08963 - tps: 22835.10795 + dps: 28661.01684 + tps: 22838.39568 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28199.18877 - tps: 18186.82259 + dps: 28205.4675 + tps: 18189.6526 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31285.99691 - tps: 19438.29033 + dps: 31273.57885 + tps: 19426.36519 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37717.08364 - tps: 28445.59652 + dps: 37712.29041 + tps: 28440.55697 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37163.61024 - tps: 23745.56833 + dps: 37158.00711 + tps: 23739.98698 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42900.6381 - tps: 26370.81037 + dps: 42895.52197 + tps: 26366.27166 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 29121.36704 - tps: 23204.6786 + dps: 29122.36094 + tps: 23207.41998 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28653.06966 - tps: 18488.90669 + dps: 28653.91075 + tps: 18491.63361 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32200.79264 - tps: 19949.92009 + dps: 32186.91994 + tps: 19941.58278 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37493.97995 - tps: 28276.87014 + dps: 37490.06152 + tps: 28272.61074 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37008.19915 - tps: 23604.07612 + dps: 37003.62855 + tps: 23600.1847 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43100.60544 - tps: 26513.6274 + dps: 43090.61759 + tps: 26505.93202 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28947.10962 - tps: 23038.95748 + dps: 28945.85005 + tps: 23037.96319 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28483.12507 - tps: 18409.45984 + dps: 28481.90641 + tps: 18408.46587 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32141.48105 - tps: 20184.82185 + dps: 32121.93096 + tps: 20168.60132 } } dps_results: { key: "TestEnhancement-SwitchInFrontOfTarget-Default" value: { - dps: 34176.657 - tps: 21212.70866 + dps: 34172.71371 + tps: 21209.52654 } } diff --git a/sim/shaman/enhancement/lavalash.go b/sim/shaman/enhancement/lavalash.go index 8212fc665f..3fe1fdac20 100644 --- a/sim/shaman/enhancement/lavalash.go +++ b/sim/shaman/enhancement/lavalash.go @@ -9,7 +9,7 @@ import ( ) func (enh *EnhancementShaman) getSearingFlamesMultiplier() float64 { - return enh.SearingFlamesMultiplier + core.TernaryFloat64(enh.HasActiveSetBonus(shaman.ItemSetVolcanicBattlegear.Name, 2), 0.05, 0) + return enh.SearingFlamesMultiplier + core.TernaryFloat64(enh.HasT12Enh2pc, 0.05, 0) } func (enh *EnhancementShaman) registerLavaLashSpell() { diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 0563aabfa9..e482060586 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -23,14 +23,12 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { setBonusAura.AttachStatBuff(stats.MP5, 3) } + + setBonusAura.AttachBooleanToggle(shaman.HasDungeonSet3) }, }, }) -func (shaman *Shaman) hasDungeonSet3() bool { - return shaman.HasActiveSetBonus(ItemSetTidefury.Name, 2) -} - // var ItemSetSkyshatterRegalia = core.NewItemSet(core.ItemSet{ // Name: "Skyshatter Regalia", // Bonuses: map[int32]core.ApplySetBonus{ @@ -157,15 +155,12 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ instantLavaSurgeMod.Deactivate() }, }) - //in talents.go under lava surge proc + + setBonusAura.AttachBooleanToggle(shaman.HasT12Ele4pc) }, }, }) -func (shaman *Shaman) hasT12Ele4pc() bool { - return shaman.HasActiveSetBonus(ItemSetVolcanicRegalia.Name, 4) -} - // T13 elem // (2) Set: Elemental Mastery also grants you 2000 mastery rating 15 sec. // (4) Set: Each time Elemental Overload triggers, you gain 250 haste rating for 4 sec, stacking up to 3 times. @@ -267,12 +262,21 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + onEquip := func() { shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second + } + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + onEquip() }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() }) + + if setBonusAura.IsActive() { + onEquip() + } }) }, @@ -315,8 +319,10 @@ func tier12StormstrikeBonus(_ *core.Simulation, spell *core.Spell, _ *core.Attac var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ Name: "Volcanic Battlegear", Bonuses: map[int32]core.ApplySetBonus{ - 2: func(_ core.Agent, _ *core.Aura) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in lavalash.go + shaman := agent.(ShamanAgent).GetShaman() + setBonusAura.AttachBooleanToggle(shaman.HasT12Enh2pc) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() @@ -434,11 +440,13 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { for index, wolf := range spiritWolves { aura := procTriggerAuras[index] - wolf.Pet.OnPetEnable = func(sim *core.Simulation) { - aura.Activate(sim) - } - wolf.Pet.OnPetDisable = func(sim *core.Simulation) { - aura.Deactivate(sim) + if aura != nil { + wolf.Pet.OnPetEnable = func(sim *core.Simulation) { + aura.Activate(sim) + } + wolf.Pet.OnPetDisable = func(sim *core.Simulation) { + aura.Deactivate(sim) + } } } }) @@ -446,7 +454,9 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { for index, wolf := range spiritWolves { aura := procTriggerAuras[index] - aura.Deactivate(sim) + if aura != nil { + aura.Deactivate(sim) + } wolf.Pet.OnPetEnable = nil wolf.Pet.OnPetDisable = nil } diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index 013ecd469b..95ff96eb37 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -165,17 +165,23 @@ type Shaman struct { ancestralHealingAmount float64 AncestralAwakening *core.Spell HealingSurge *core.Spell - GreaterHealingWave *core.Spell - HealingWave *core.Spell - ChainHeal *core.Spell - Riptide *core.Spell - EarthShield *core.Spell + + GreaterHealingWave *core.Spell + HealingWave *core.Spell + ChainHeal *core.Spell + Riptide *core.Spell + EarthShield *core.Spell waterShieldManaMetrics *core.ResourceMetrics VolcanicRegalia4PT12Aura *core.Aura useDragonSoul_2PT12 bool + + // Item sets + HasDungeonSet3 bool + HasT12Enh2pc bool + HasT12Ele4pc bool } // Implemented by each Shaman spec. diff --git a/sim/shaman/talents.go b/sim/shaman/talents.go index cdd6a238e5..a26acb1f36 100644 --- a/sim/shaman/talents.go +++ b/sim/shaman/talents.go @@ -274,7 +274,7 @@ func (shaman *Shaman) applyLavaSurge() { OnAction: func(sim *core.Simulation) { shaman.LavaBurst.CD.Reset() - if shaman.hasT12Ele4pc() { + if shaman.HasT12Ele4pc { shaman.VolcanicRegalia4PT12Aura.Activate(sim) } }, @@ -291,7 +291,7 @@ func (shaman *Shaman) applyLavaSurge() { } }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask != SpellMaskLavaBurst || !shaman.hasT12Ele4pc() { + if spell.ClassSpellMask != SpellMaskLavaBurst || !shaman.HasT12Ele4pc { return } //If volcano procs during LvB cast time, it is not consumed diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index 1d57c5ae9a..0efd2a028d 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestAffliction-AllItems-AgileShadowspiritDiamond" value: { - dps: 38084.95153 - tps: 26570.52772 + dps: 38105.89158 + tps: 26577.87521 } } dps_results: { key: "TestAffliction-AllItems-Althor'sAbacus-50366" value: { - dps: 36363.45836 - tps: 25431.90863 + dps: 36343.18508 + tps: 25421.48031 } } dps_results: { key: "TestAffliction-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 36380.89251 - tps: 25460.16279 + dps: 36347.20694 + tps: 25450.85934 } } dps_results: { key: "TestAffliction-AllItems-Anhuur'sHymnal-55889" value: { - dps: 36677.15454 - tps: 25631.54406 + dps: 36665.30699 + tps: 25617.2396 } } dps_results: { key: "TestAffliction-AllItems-Anhuur'sHymnal-56407" value: { - dps: 36689.1798 - tps: 25639.6595 + dps: 36673.64585 + tps: 25622.98774 } } dps_results: { key: "TestAffliction-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ArrowofTime-72897" value: { - dps: 36291.31517 - tps: 25468.76725 + dps: 36268.54856 + tps: 25457.27986 } } dps_results: { key: "TestAffliction-AllItems-AustereShadowspiritDiamond" value: { - dps: 37552.29955 - tps: 26146.03344 + dps: 37591.95604 + tps: 26172.52544 } } dps_results: { key: "TestAffliction-AllItems-Balespider'sBurningVestments" value: { - dps: 35084.10229 - tps: 24558.07422 + dps: 35045.61167 + tps: 24523.60366 } } dps_results: { key: "TestAffliction-AllItems-BaubleofTrueBlood-50726" value: { - dps: 35749.34307 - tps: 24989.25932 + dps: 35750.25722 + tps: 25001.40082 hps: 102.469 } } dps_results: { key: "TestAffliction-AllItems-BedrockTalisman-58182" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-BellofEnragingResonance-59326" value: { - dps: 37664.14804 - tps: 26199.25099 + dps: 37649.76039 + tps: 26201.41743 } } dps_results: { key: "TestAffliction-AllItems-BellofEnragingResonance-65053" value: { - dps: 37856.53086 - tps: 26352.83264 + dps: 37836.9973 + tps: 26350.64971 } } dps_results: { key: "TestAffliction-AllItems-BindingPromise-67037" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 36073.7266 - tps: 25341.89273 + dps: 36022.65636 + tps: 25309.09756 } } dps_results: { key: "TestAffliction-AllItems-BloodofIsiset-55995" value: { - dps: 36108.16723 - tps: 25277.92138 + dps: 36105.99594 + tps: 25294.15294 } } dps_results: { key: "TestAffliction-AllItems-BloodofIsiset-56414" value: { - dps: 36148.60464 - tps: 25314.66401 + dps: 36146.48929 + tps: 25330.96627 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 35799.88207 - tps: 25021.1133 + dps: 35794.20931 + tps: 25023.33505 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 36807.03901 - tps: 25690.70799 + dps: 36779.86436 + tps: 25668.65707 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 36262.7632 - tps: 25395.82399 + dps: 36223.34317 + tps: 25374.68764 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 35745.44442 - tps: 25026.02567 + dps: 35729.69024 + tps: 25027.23598 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 35716.12547 - tps: 24993.96091 + dps: 35664.50279 + tps: 24963.1581 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 36674.58903 - tps: 25596.63359 + dps: 36669.78952 + tps: 25610.58513 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-77210" value: { - dps: 35928.48079 - tps: 25129.36802 + dps: 35925.80957 + tps: 25145.01055 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-77982" value: { - dps: 35910.96381 - tps: 25107.51319 + dps: 35908.39363 + tps: 25123.23464 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-78002" value: { - dps: 35953.79075 - tps: 25151.53749 + dps: 35951.18705 + tps: 25167.25306 } } dps_results: { key: "TestAffliction-AllItems-BottledLightning-66879" value: { - dps: 36535.5101 - tps: 25503.4425 + dps: 36499.28613 + tps: 25482.95118 } } dps_results: { key: "TestAffliction-AllItems-BottledWishes-77114" value: { - dps: 37770.36306 - tps: 26355.90319 + dps: 37807.14717 + tps: 26391.93983 } } dps_results: { key: "TestAffliction-AllItems-BracingShadowspiritDiamond" value: { - dps: 37806.26761 - tps: 25671.19102 + dps: 37834.32834 + tps: 25702.95886 } } dps_results: { key: "TestAffliction-AllItems-Brawler'sTrophy-232015" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-BurningShadowspiritDiamond" value: { - dps: 38237.66409 - tps: 26567.92871 + dps: 38265.71112 + tps: 26600.37151 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 37400.31407 - tps: 26090.58083 + dps: 37372.71297 + tps: 26068.49593 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 37143.05363 - tps: 25897.66774 + dps: 37140.47113 + tps: 25914.29028 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 38141.7576 - tps: 26598.1559 + dps: 38163.32339 + tps: 26606.52071 } } dps_results: { key: "TestAffliction-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 36385.74091 - tps: 25373.64998 + dps: 36365.36769 + tps: 25369.57537 } } dps_results: { key: "TestAffliction-AllItems-CoreofRipeness-58184" value: { - dps: 36711.17875 - tps: 25660.71256 + dps: 36728.07453 + tps: 25684.39237 } } dps_results: { key: "TestAffliction-AllItems-CorpseTongueCoin-50349" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 36364.40218 - tps: 25432.24051 + dps: 36362.19046 + tps: 25449.38299 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 36454.09154 - tps: 25440.76587 + dps: 36436.76726 + tps: 25433.56715 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 36373.22695 - tps: 25371.93782 + dps: 36376.3501 + tps: 25393.55057 } } dps_results: { key: "TestAffliction-AllItems-CrushingWeight-59506" value: { - dps: 36095.74091 - tps: 25166.30662 + dps: 36098.61748 + tps: 25188.14461 } } dps_results: { key: "TestAffliction-AllItems-CrushingWeight-65118" value: { - dps: 36181.04035 - tps: 25254.5719 + dps: 36229.51736 + tps: 25303.46429 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-77208" value: { - dps: 38688.1291 - tps: 27545.091 + dps: 38722.82658 + tps: 27588.86394 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-77980" value: { - dps: 38275.5836 - tps: 27242.41163 + dps: 38284.56006 + tps: 27253.74933 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-78000" value: { - dps: 39034.1512 - tps: 27849.72143 + dps: 39105.72741 + tps: 27930.83777 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 35716.73582 - tps: 24995.23556 + dps: 35664.41111 + tps: 24963.63367 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 36808.27213 - tps: 25820.82635 + dps: 36756.21916 + tps: 25778.75129 } } dps_results: { key: "TestAffliction-AllItems-Deathbringer'sWill-50363" value: { - dps: 36063.49759 - tps: 25172.76447 + dps: 36064.24982 + tps: 25186.78053 } } dps_results: { key: "TestAffliction-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 37700.67298 - tps: 26210.48746 + dps: 37722.41969 + tps: 26219.2649 } } dps_results: { key: "TestAffliction-AllItems-DislodgedForeignObject-50348" value: { - dps: 36781.12357 - tps: 25670.08434 + dps: 36766.00846 + tps: 25666.95494 } } dps_results: { key: "TestAffliction-AllItems-Dwyer'sCaber-70141" value: { - dps: 36323.07622 - tps: 25312.90053 + dps: 36323.11153 + tps: 25328.66412 } } dps_results: { key: "TestAffliction-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 37552.29955 - tps: 26146.03344 + dps: 37591.95604 + tps: 26172.52544 } } dps_results: { key: "TestAffliction-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 36338.60223 - tps: 25406.62619 + dps: 36273.54577 + tps: 25352.09677 } } dps_results: { key: "TestAffliction-AllItems-EmberShadowspiritDiamond" value: { - dps: 37748.02681 - tps: 26279.33383 + dps: 37794.25497 + tps: 26314.62871 } } dps_results: { key: "TestAffliction-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 37700.67298 - tps: 26210.48746 + dps: 37722.41969 + tps: 26219.2649 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheCyclone-59473" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheCyclone-65140" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 36380.89251 - tps: 25460.16279 + dps: 36347.20694 + tps: 25450.85934 } } dps_results: { key: "TestAffliction-AllItems-EternalShadowspiritDiamond" value: { - dps: 37552.29955 - tps: 26146.03344 + dps: 37591.95604 + tps: 26172.52544 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77200" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77977" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77997" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-FallofMortality-59500" value: { - dps: 36808.27213 - tps: 25820.82635 + dps: 36756.21916 + tps: 25778.75129 } } dps_results: { key: "TestAffliction-AllItems-FallofMortality-65124" value: { - dps: 37034.2298 - tps: 25993.89905 + dps: 37012.37198 + tps: 25986.73904 } } dps_results: { key: "TestAffliction-AllItems-FieryQuintessence-69000" value: { - dps: 37145.58702 - tps: 25899.29611 + dps: 37160.61401 + tps: 25926.03506 } } dps_results: { key: "TestAffliction-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36177.56075 - tps: 25159.67353 + dps: 36186.23465 + tps: 25183.91938 } } dps_results: { key: "TestAffliction-AllItems-Figurine-DreamOwl-52354" value: { - dps: 36713.94269 - tps: 25688.97261 + dps: 36712.83232 + tps: 25694.4748 } } dps_results: { key: "TestAffliction-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 35832.32269 - tps: 25059.2279 + dps: 35810.3143 + tps: 25051.50674 } } dps_results: { key: "TestAffliction-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 37646.22336 - tps: 26317.97889 + dps: 37643.07427 + tps: 26322.32019 } } dps_results: { key: "TestAffliction-AllItems-Figurine-KingofBoars-52351" value: { - dps: 36153.88555 - tps: 25332.70882 + dps: 36127.27402 + tps: 25310.53005 } } dps_results: { key: "TestAffliction-AllItems-FireoftheDeep-77117" value: { - dps: 36401.00218 - tps: 25534.96252 + dps: 36398.90981 + tps: 25551.36507 } } dps_results: { key: "TestAffliction-AllItems-FleetShadowspiritDiamond" value: { - dps: 37714.58303 - tps: 26246.87906 + dps: 37735.87093 + tps: 26254.78372 } } dps_results: { key: "TestAffliction-AllItems-FluidDeath-58181" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-ForlornShadowspiritDiamond" value: { - dps: 37806.26761 - tps: 26188.29155 + dps: 37834.32834 + tps: 26220.70772 } } dps_results: { key: "TestAffliction-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 37701.0791 - tps: 26583.53364 + dps: 37667.94907 + tps: 26564.76612 } } dps_results: { key: "TestAffliction-AllItems-FuryofAngerforge-59461" value: { - dps: 36411.87723 - tps: 25393.54029 + dps: 36390.65626 + tps: 25388.61794 } } dps_results: { key: "TestAffliction-AllItems-GaleofShadows-56138" value: { - dps: 36939.45195 - tps: 25903.69225 + dps: 36848.47325 + tps: 25839.19745 } } dps_results: { key: "TestAffliction-AllItems-GaleofShadows-56462" value: { - dps: 37349.89102 - tps: 26040.53158 + dps: 37343.95572 + tps: 26049.3539 } } dps_results: { key: "TestAffliction-AllItems-GearDetector-61462" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { @@ -669,1479 +669,1479 @@ dps_results: { dps_results: { key: "TestAffliction-AllItems-GlowingTwilightScale-54589" value: { - dps: 36389.74624 - tps: 25454.71516 + dps: 36361.05463 + tps: 25437.49956 } } dps_results: { key: "TestAffliction-AllItems-GraceoftheHerald-55266" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-GraceoftheHerald-56295" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-HarmlightToken-63839" value: { - dps: 37144.51304 - tps: 25794.2502 + dps: 37108.79841 + tps: 25770.52419 } } dps_results: { key: "TestAffliction-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-HeartofIgnacious-59514" value: { - dps: 37250.24309 - tps: 26002.70848 + dps: 37201.53538 + tps: 25971.31177 } } dps_results: { key: "TestAffliction-AllItems-HeartofIgnacious-65110" value: { - dps: 37398.46574 - tps: 26178.11541 + dps: 37399.26551 + tps: 26179.20327 } } dps_results: { key: "TestAffliction-AllItems-HeartofRage-59224" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-HeartofRage-65072" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-HeartofSolace-55868" value: { - dps: 36172.05068 - tps: 25359.4687 + dps: 36083.17129 + tps: 25296.45445 } } dps_results: { key: "TestAffliction-AllItems-HeartofSolace-56393" value: { - dps: 36470.12987 - tps: 25421.06942 + dps: 36464.4141 + tps: 25429.70741 } } dps_results: { key: "TestAffliction-AllItems-HeartofThunder-55845" value: { - dps: 35809.75671 - tps: 25015.20199 + dps: 35792.86524 + tps: 25015.71314 } } dps_results: { key: "TestAffliction-AllItems-HeartofThunder-56370" value: { - dps: 35809.75362 - tps: 25015.55079 + dps: 35792.86153 + tps: 25016.05005 } } dps_results: { key: "TestAffliction-AllItems-HeartoftheVile-66969" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 37700.67298 - tps: 26210.48746 + dps: 37722.41969 + tps: 26219.2649 } } dps_results: { key: "TestAffliction-AllItems-ImpatienceofYouth-62464" value: { - dps: 36198.08808 - tps: 25372.88896 + dps: 36171.45661 + tps: 25350.6868 } } dps_results: { key: "TestAffliction-AllItems-ImpatienceofYouth-62469" value: { - dps: 36198.08808 - tps: 25372.88896 + dps: 36171.45661 + tps: 25350.6868 } } dps_results: { key: "TestAffliction-AllItems-ImpetuousQuery-55881" value: { - dps: 36115.41032 - tps: 25278.49216 + dps: 36108.57744 + tps: 25290.12805 } } dps_results: { key: "TestAffliction-AllItems-ImpetuousQuery-56406" value: { - dps: 36155.86375 - tps: 25315.2518 + dps: 36149.07651 + tps: 25326.94829 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-77211" value: { - dps: 35775.64041 - tps: 25034.13826 + dps: 35704.89865 + tps: 24977.14758 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-77983" value: { - dps: 35823.92124 - tps: 25036.63143 + dps: 35757.6954 + tps: 24980.75707 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-78003" value: { - dps: 35780.92363 - tps: 25077.82788 + dps: 35720.09479 + tps: 25031.10186 } } dps_results: { key: "TestAffliction-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 35809.75671 - tps: 25015.07968 + dps: 35792.86524 + tps: 25015.59083 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 38720.25263 - tps: 27105.00723 + dps: 38682.50869 + tps: 27062.12085 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 38072.62789 - tps: 26678.40473 + dps: 38076.3965 + tps: 26686.76049 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 39287.48593 - tps: 27474.9662 + dps: 39243.86576 + tps: 27446.58632 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 36639.19807 - tps: 25711.27624 + dps: 36586.23083 + tps: 25676.89633 } } dps_results: { key: "TestAffliction-AllItems-JarofAncientRemedies-59354" value: { - dps: 35589.49225 - tps: 24831.81693 + dps: 35597.98643 + tps: 24848.29087 } } dps_results: { key: "TestAffliction-AllItems-JarofAncientRemedies-65029" value: { - dps: 35828.11393 - tps: 25009.93984 + dps: 35862.00067 + tps: 25049.69243 } } dps_results: { key: "TestAffliction-AllItems-JawsofDefeat-68926" value: { - dps: 37079.43329 - tps: 25825.83224 + dps: 37062.08222 + tps: 25815.5347 } } dps_results: { key: "TestAffliction-AllItems-JawsofDefeat-69111" value: { - dps: 37338.17961 - tps: 26030.51814 + dps: 37305.58851 + tps: 26004.27809 } } dps_results: { key: "TestAffliction-AllItems-JujuofNimbleness-63840" value: { - dps: 36073.7266 - tps: 25341.89273 + dps: 36022.65636 + tps: 25309.09756 } } dps_results: { key: "TestAffliction-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-KiroptyricSigil-77113" value: { - dps: 36381.34181 - tps: 25434.52497 + dps: 36422.05681 + tps: 25475.06205 } } dps_results: { key: "TestAffliction-AllItems-KvaldirBattleStandard-59685" value: { - dps: 36120.70156 - tps: 25212.9177 + dps: 36150.59243 + tps: 25242.37077 } } dps_results: { key: "TestAffliction-AllItems-KvaldirBattleStandard-59689" value: { - dps: 36120.70156 - tps: 25212.9177 + dps: 36150.59243 + tps: 25242.37077 } } dps_results: { key: "TestAffliction-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 36356.50832 - tps: 25267.59725 + dps: 36366.39129 + tps: 25282.05866 } } dps_results: { key: "TestAffliction-AllItems-LeadenDespair-55816" value: { - dps: 35790.95036 - tps: 25036.67108 + dps: 35714.1423 + tps: 24980.53782 } } dps_results: { key: "TestAffliction-AllItems-LeadenDespair-56347" value: { - dps: 35832.32269 - tps: 25059.2279 + dps: 35810.3143 + tps: 25051.50674 } } dps_results: { key: "TestAffliction-AllItems-LeftEyeofRajh-56102" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-LeftEyeofRajh-56427" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-LicensetoSlay-58180" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-MagnetiteMirror-55814" value: { - dps: 35804.62424 - tps: 25096.95409 + dps: 35753.736 + tps: 25064.22462 } } dps_results: { key: "TestAffliction-AllItems-MagnetiteMirror-56345" value: { - dps: 35804.62424 - tps: 25096.95409 + dps: 35753.736 + tps: 25064.22462 } } dps_results: { key: "TestAffliction-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 35803.97662 - tps: 24994.9571 + dps: 35792.13859 + tps: 25006.85097 } } dps_results: { key: "TestAffliction-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 35803.97662 - tps: 24994.9571 + dps: 35792.13859 + tps: 25006.85097 } } dps_results: { key: "TestAffliction-AllItems-MarkofKhardros-56132" value: { - dps: 36137.63492 - tps: 25400.68145 + dps: 36085.46155 + tps: 25367.24441 } } dps_results: { key: "TestAffliction-AllItems-MarkofKhardros-56458" value: { - dps: 36181.24346 - tps: 25440.45528 + dps: 36128.9018 + tps: 25406.92558 } } dps_results: { key: "TestAffliction-AllItems-MatrixRestabilizer-68994" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-MatrixRestabilizer-69150" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-MightoftheOcean-55251" value: { - dps: 36305.55603 - tps: 25173.70925 + dps: 36302.18762 + tps: 25177.84318 } } dps_results: { key: "TestAffliction-AllItems-MightoftheOcean-56285" value: { - dps: 36305.55603 - tps: 25173.70925 + dps: 36302.18762 + tps: 25177.84318 } } dps_results: { key: "TestAffliction-AllItems-MirrorofBrokenImages-62466" value: { - dps: 36199.99477 - tps: 25355.35323 + dps: 36193.25731 + tps: 25367.11582 } } dps_results: { key: "TestAffliction-AllItems-MirrorofBrokenImages-62471" value: { - dps: 36199.99477 - tps: 25355.35323 + dps: 36193.25731 + tps: 25367.11582 } } dps_results: { key: "TestAffliction-AllItems-MithrilStopwatch-232013" value: { - dps: 37483.46626 - tps: 26114.91993 + dps: 37464.13697 + tps: 26112.57406 } } dps_results: { key: "TestAffliction-AllItems-MoonwellChalice-70142" value: { - dps: 37312.88919 - tps: 26188.68126 + dps: 37331.89576 + tps: 26214.06776 } } dps_results: { key: "TestAffliction-AllItems-MoonwellPhial-70143" value: { - dps: 35745.98748 - tps: 25025.52862 + dps: 35729.30316 + tps: 25016.10173 } } dps_results: { key: "TestAffliction-AllItems-NecromanticFocus-68982" value: { - dps: 37521.99904 - tps: 26417.44095 + dps: 37489.9059 + tps: 26399.31268 } } dps_results: { key: "TestAffliction-AllItems-NecromanticFocus-69139" value: { - dps: 37950.31476 - tps: 26685.41254 + dps: 37917.24866 + tps: 26668.04266 } } dps_results: { key: "TestAffliction-AllItems-Oremantle'sFavor-61448" value: { - dps: 36114.8089 - tps: 25253.05614 + dps: 36083.82647 + tps: 25232.57424 } } dps_results: { key: "TestAffliction-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 36793.24637 - tps: 25743.55982 + dps: 36739.78495 + tps: 25697.86547 } } dps_results: { key: "TestAffliction-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 36774.92983 - tps: 25639.34679 + dps: 36778.1648 + tps: 25656.02655 } } dps_results: { key: "TestAffliction-AllItems-PorcelainCrab-55237" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-PorcelainCrab-56280" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 37552.29955 - tps: 26146.03344 + dps: 37591.95604 + tps: 26172.52544 } } dps_results: { key: "TestAffliction-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Rainsong-55854" value: { - dps: 35792.90336 - tps: 24973.11091 + dps: 35761.73309 + tps: 24968.38482 } } dps_results: { key: "TestAffliction-AllItems-Rainsong-56377" value: { - dps: 35803.97662 - tps: 24994.9571 + dps: 35792.13859 + tps: 25006.85097 } } dps_results: { key: "TestAffliction-AllItems-ReflectionoftheLight-77115" value: { - dps: 37164.47743 - tps: 25973.36627 + dps: 37096.57185 + tps: 25930.63964 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77201" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77978" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77998" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 38084.95153 - tps: 26570.52772 + dps: 38105.89158 + tps: 26577.87521 } } dps_results: { key: "TestAffliction-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 38078.54242 - tps: 26561.5635 + dps: 38101.00176 + tps: 26569.83911 } } dps_results: { key: "TestAffliction-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 36504.69354 - tps: 25550.53143 + dps: 36460.57142 + tps: 25519.97125 } } dps_results: { key: "TestAffliction-AllItems-RightEyeofRajh-56100" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-RightEyeofRajh-56431" value: { - dps: 36065.43271 - tps: 25231.11621 + dps: 36052.22514 + tps: 25216.04098 } } dps_results: { key: "TestAffliction-AllItems-RosaryofLight-72901" value: { - dps: 36211.35376 - tps: 25271.00745 + dps: 36221.77397 + tps: 25291.79243 } } dps_results: { key: "TestAffliction-AllItems-RottingSkull-77116" value: { - dps: 36571.73034 - tps: 25560.6237 + dps: 36531.9042 + tps: 25531.52287 } } dps_results: { key: "TestAffliction-AllItems-RuneofZeth-68998" value: { - dps: 37585.09576 - tps: 26189.17129 + dps: 37510.13274 + tps: 26139.87232 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 37142.94224 - tps: 25917.10986 + dps: 37115.52614 + tps: 25895.03969 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 37218.83394 - tps: 25968.26156 + dps: 37191.36328 + tps: 25946.18704 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 36905.86236 - tps: 25735.83731 + dps: 36901.47134 + tps: 25750.50412 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 36981.68527 - tps: 25792.86946 + dps: 36973.63651 + tps: 25804.48624 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ScalesofLife-68915" value: { - dps: 35805.84967 - tps: 25048.60183 + dps: 35737.88452 + tps: 24990.31492 hps: 357.04731 } } dps_results: { key: "TestAffliction-AllItems-ScalesofLife-69109" value: { - dps: 35783.81374 - tps: 25040.30268 + dps: 35746.56416 + tps: 25014.45651 hps: 402.74602 } } dps_results: { key: "TestAffliction-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-SeaStar-55256" value: { - dps: 36300.94625 - tps: 25356.10343 + dps: 36270.64082 + tps: 25329.77536 } } dps_results: { key: "TestAffliction-AllItems-SeaStar-56290" value: { - dps: 36737.23374 - tps: 25650.40492 + dps: 36707.20874 + tps: 25624.60245 } } dps_results: { key: "TestAffliction-AllItems-ShadowflameRegalia" value: { - dps: 32128.93916 - tps: 22802.35482 + dps: 32340.39214 + tps: 22869.50713 } } dps_results: { key: "TestAffliction-AllItems-ShardofWoe-60233" value: { - dps: 36573.19849 - tps: 25534.68961 + dps: 36599.83928 + tps: 25556.62863 } } dps_results: { key: "TestAffliction-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 35880.39903 - tps: 25002.89743 + dps: 35809.66479 + tps: 24952.9698 } } dps_results: { key: "TestAffliction-AllItems-Skardyn'sGrace-56115" value: { - dps: 36170.32456 - tps: 25349.87884 + dps: 36143.90281 + tps: 25328.28432 } } dps_results: { key: "TestAffliction-AllItems-Skardyn'sGrace-56440" value: { - dps: 36218.30234 - tps: 25393.78231 + dps: 36191.88476 + tps: 25372.24003 } } dps_results: { key: "TestAffliction-AllItems-Sorrowsong-55879" value: { - dps: 36818.40117 - tps: 25781.22733 + dps: 36816.16393 + tps: 25797.36316 } } dps_results: { key: "TestAffliction-AllItems-Sorrowsong-56400" value: { - dps: 36952.99218 - tps: 25884.91758 + dps: 36950.80089 + tps: 25901.11053 } } dps_results: { key: "TestAffliction-AllItems-Soul'sAnguish-66994" value: { - dps: 36305.55603 - tps: 25173.70925 + dps: 36302.18762 + tps: 25177.84318 } } dps_results: { key: "TestAffliction-AllItems-SoulCasket-58183" value: { - dps: 37483.42517 - tps: 26242.67083 + dps: 37455.88127 + tps: 26220.40978 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77206" value: { - dps: 36435.70289 - tps: 25639.39415 + dps: 36360.29385 + tps: 25578.5826 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77970" value: { - dps: 36406.40702 - tps: 25567.60195 + dps: 36336.59334 + tps: 25508.87927 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77990" value: { - dps: 36569.23617 - tps: 25803.78638 + dps: 36504.85595 + tps: 25754.63674 } } dps_results: { key: "TestAffliction-AllItems-SpidersilkSpindle-68981" value: { - dps: 36268.69149 - tps: 25423.77851 + dps: 36266.74228 + tps: 25440.2907 } } dps_results: { key: "TestAffliction-AllItems-SpidersilkSpindle-69138" value: { - dps: 36329.96029 - tps: 25479.44918 + dps: 36328.09584 + tps: 25496.06847 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77202" value: { - dps: 36938.10339 - tps: 25775.24853 + dps: 36966.16539 + tps: 25815.50644 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77973" value: { - dps: 36644.35449 - tps: 25700.10177 + dps: 36685.89118 + tps: 25750.0528 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77993" value: { - dps: 37223.31282 - tps: 26151.66218 + dps: 37182.88898 + tps: 26127.83803 } } dps_results: { key: "TestAffliction-AllItems-StayofExecution-68996" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-Stonemother'sKiss-61411" value: { - dps: 36844.55071 - tps: 25785.23283 + dps: 36767.87127 + tps: 25725.89298 } } dps_results: { key: "TestAffliction-AllItems-StumpofTime-62465" value: { - dps: 37207.82804 - tps: 26035.90572 + dps: 37193.16096 + tps: 26019.76036 } } dps_results: { key: "TestAffliction-AllItems-StumpofTime-62470" value: { - dps: 37260.21125 - tps: 26041.40435 + dps: 37237.94368 + tps: 26018.85926 } } dps_results: { key: "TestAffliction-AllItems-SymbioticWorm-59332" value: { - dps: 35796.81046 - tps: 25059.36075 + dps: 35787.47569 + tps: 25056.93023 } } dps_results: { key: "TestAffliction-AllItems-SymbioticWorm-65048" value: { - dps: 35819.74261 - tps: 25058.15627 + dps: 35806.72468 + tps: 25046.01073 } } dps_results: { key: "TestAffliction-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 36877.21313 - tps: 25788.18587 + dps: 36824.97482 + tps: 25744.88118 } } dps_results: { key: "TestAffliction-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-TearofBlood-55819" value: { - dps: 36504.31981 - tps: 25518.62314 + dps: 36452.36037 + tps: 25473.84808 } } dps_results: { key: "TestAffliction-AllItems-TearofBlood-56351" value: { - dps: 36731.25813 - tps: 25656.18683 + dps: 36725.85564 + tps: 25664.09499 } } dps_results: { key: "TestAffliction-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 36632.51909 - tps: 25613.65616 + dps: 36631.3776 + tps: 25631.54115 } } dps_results: { key: "TestAffliction-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 36862.81422 - tps: 25778.9371 + dps: 36859.23817 + tps: 25794.67994 } } dps_results: { key: "TestAffliction-AllItems-TheHungerer-68927" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-TheHungerer-69112" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Theralion'sMirror-59519" value: { - dps: 37236.47093 - tps: 26209.76507 + dps: 37187.22403 + tps: 26170.60698 } } dps_results: { key: "TestAffliction-AllItems-Theralion'sMirror-65105" value: { - dps: 37525.49825 - tps: 26440.77542 + dps: 37507.30918 + tps: 26437.19761 } } dps_results: { key: "TestAffliction-AllItems-Throngus'sFinger-56121" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Throngus'sFinger-56449" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Tia'sGrace-55874" value: { - dps: 36108.16723 - tps: 25277.92138 + dps: 36105.99594 + tps: 25294.15294 } } dps_results: { key: "TestAffliction-AllItems-Tia'sGrace-56394" value: { - dps: 36148.60464 - tps: 25314.66401 + dps: 36146.48929 + tps: 25330.96627 } } dps_results: { key: "TestAffliction-AllItems-TinyAbominationinaJar-50706" value: { - dps: 36076.90653 - tps: 25244.82444 + dps: 36070.19035 + tps: 25240.2959 } } dps_results: { key: "TestAffliction-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 36964.87239 - tps: 25904.13291 + dps: 36990.34676 + tps: 25930.33921 } } dps_results: { key: "TestAffliction-AllItems-UnheededWarning-59520" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-UnquenchableFlame-67101" value: { - dps: 35795.24938 - tps: 25014.98126 + dps: 35764.61891 + tps: 24988.04395 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-62463" value: { - dps: 36198.08808 - tps: 25372.88896 + dps: 36171.45661 + tps: 25350.6868 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-62468" value: { - dps: 36198.08808 - tps: 25372.88896 + dps: 36171.45661 + tps: 25350.6868 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-68709" value: { - dps: 36198.08808 - tps: 25372.88896 + dps: 36171.45661 + tps: 25350.6868 } } dps_results: { key: "TestAffliction-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 36865.60804 - tps: 25738.38333 + dps: 36882.95701 + tps: 25758.95356 } } dps_results: { key: "TestAffliction-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36132.72468 - tps: 25294.94721 + dps: 36127.98105 + tps: 25308.85081 } } dps_results: { key: "TestAffliction-AllItems-VeilofLies-72900" value: { - dps: 35811.93002 - tps: 25050.72892 + dps: 35780.66772 + tps: 25023.45933 } } dps_results: { key: "TestAffliction-AllItems-VesselofAcceleration-68995" value: { - dps: 35958.37418 - tps: 25118.60272 + dps: 35951.41697 + tps: 25129.26793 } } dps_results: { key: "TestAffliction-AllItems-VesselofAcceleration-69167" value: { - dps: 35956.8828 - tps: 25112.12253 + dps: 35949.92603 + tps: 25122.78819 } } dps_results: { key: "TestAffliction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 33731.50632 - tps: 23572.2115 + dps: 32779.50043 + tps: 23216.87292 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77207" value: { - dps: 35979.98765 - tps: 25180.88848 + dps: 35977.38845 + tps: 25196.57585 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77979" value: { - dps: 35952.66181 - tps: 25155.40845 + dps: 35950.07685 + tps: 25171.13005 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77999" value: { - dps: 35983.14688 - tps: 25184.33555 + dps: 35980.55507 + tps: 25200.03887 } } dps_results: { key: "TestAffliction-AllItems-VialofStolenMemories-59515" value: { - dps: 35796.81046 - tps: 25059.36075 + dps: 35787.47569 + tps: 25056.93023 } } dps_results: { key: "TestAffliction-AllItems-VialofStolenMemories-65109" value: { - dps: 35819.74261 - tps: 25058.15627 + dps: 35806.72468 + tps: 25046.01073 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 36863.13287 - tps: 25728.51577 + dps: 36835.9179 + tps: 25706.46163 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 36987.85922 - tps: 25812.58247 + dps: 36960.55459 + tps: 25790.52119 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 35803.94881 - tps: 25014.61598 + dps: 35777.49519 + tps: 24992.62251 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 36094.79607 - tps: 25245.36921 + dps: 36120.71662 + tps: 25275.02133 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 36281.92905 - tps: 25411.59492 + dps: 36276.59971 + tps: 25401.54524 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 36307.48231 - tps: 25431.46571 + dps: 36259.77596 + tps: 25402.61321 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 35739.12169 - tps: 25005.7394 + dps: 35691.57519 + tps: 24979.47976 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 36154.51842 - tps: 25384.36629 + dps: 36106.72381 + tps: 25358.08089 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 35739.12169 - tps: 25005.7394 + dps: 35691.57519 + tps: 24979.47976 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 36673.86069 - tps: 25585.04025 + dps: 36668.77788 + tps: 25598.86161 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 36756.92018 - tps: 25643.95262 + dps: 36752.30759 + tps: 25658.78962 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77198" value: { - dps: 38521.14598 - tps: 26822.06182 + dps: 38515.21367 + tps: 26830.0362 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77975" value: { - dps: 38197.0471 - tps: 26613.37999 + dps: 38189.71426 + tps: 26619.83836 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77995" value: { - dps: 38809.73221 - tps: 27003.01427 + dps: 38796.84666 + tps: 27003.10399 } } dps_results: { key: "TestAffliction-AllItems-WitchingHourglass-55787" value: { - dps: 36822.21049 - tps: 25724.9896 + dps: 36897.76623 + tps: 25805.6483 } } dps_results: { key: "TestAffliction-AllItems-WitchingHourglass-56320" value: { - dps: 37187.41752 - tps: 25964.52405 + dps: 37266.7088 + tps: 26037.76664 } } dps_results: { key: "TestAffliction-AllItems-World-QuellerFocus-63842" value: { - dps: 36072.84756 - tps: 25259.04521 + dps: 36046.27261 + tps: 25236.90936 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77197" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77974" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77994" value: { - dps: 35799.37247 - tps: 24997.34123 + dps: 35796.77398 + tps: 25013.03299 } } dps_results: { key: "TestAffliction-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 35898.49836 - tps: 25142.28682 + dps: 35881.97153 + tps: 25148.13435 } } dps_results: { key: "TestAffliction-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 35898.49836 - tps: 25142.28682 + dps: 35881.97153 + tps: 25148.13435 } } dps_results: { key: "TestAffliction-Average-Default" value: { - dps: 38585.68763 - tps: 26986.40457 + dps: 38595.74637 + tps: 26995.90329 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 39007.36069 - tps: 34138.45669 + dps: 38999.33512 + tps: 34139.97156 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37844.84438 - tps: 26679.42675 + dps: 37847.57921 + tps: 26690.01079 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 46297.09379 - tps: 29827.53787 + dps: 46174.06951 + tps: 29745.41211 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25383.92023 - tps: 25277.29592 + dps: 25348.12714 + tps: 25252.73541 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25383.92023 - tps: 17655.67544 + dps: 25348.12714 + tps: 17631.11493 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28128.93913 - tps: 17436.90164 + dps: 28046.66532 + tps: 17364.77058 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 38554.58894 - tps: 33789.0105 + dps: 38580.61828 + tps: 33819.68645 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37547.48034 - tps: 26375.47272 + dps: 37570.5694 + tps: 26402.61478 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 45925.32118 - tps: 29596.36276 + dps: 45848.55087 + tps: 29533.11244 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25248.83476 - tps: 25039.30692 + dps: 25227.79766 + tps: 25031.18831 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25248.83476 - tps: 17560.59183 + dps: 25227.79766 + tps: 17552.47322 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 27425.59262 - tps: 16803.38146 + dps: 27325.93067 + tps: 16726.30019 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 39239.49319 - tps: 33989.57338 + dps: 39271.809 + tps: 34027.47489 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38237.66409 - tps: 26567.92871 + dps: 38265.71112 + tps: 26600.37151 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 45698.7195 - tps: 30007.62743 + dps: 45672.51901 + tps: 29994.82195 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25724.00024 - tps: 25154.72762 + dps: 25703.8171 + tps: 25147.46771 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25724.00024 - tps: 17675.2608 + dps: 25703.8171 + tps: 17668.00089 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 27792.34666 - tps: 17098.99538 + dps: 27718.19144 + tps: 17019.39507 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 38912.66742 - tps: 34047.30369 + dps: 38913.13349 + tps: 34059.99992 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37891.74459 - tps: 26736.13884 + dps: 37901.01856 + tps: 26754.92615 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 47214.37437 - tps: 30775.93289 + dps: 47308.96059 + tps: 30826.4667 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25412.54903 - tps: 25387.37212 + dps: 25363.00743 + tps: 25339.89094 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25412.54903 - tps: 17765.75164 + dps: 25363.00743 + tps: 17718.27046 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28800.27225 - tps: 17813.07169 + dps: 28705.86272 + tps: 17735.17056 } } dps_results: { key: "TestAffliction-SwitchInFrontOfTarget-Default" value: { - dps: 38105.61707 - tps: 26567.92871 + dps: 38133.66411 + tps: 26600.37151 } } diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 681d9c6022..c84922b0d2 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestDemonology-AllItems-AgileShadowspiritDiamond" value: { - dps: 39979.81669 - tps: 20001.84644 + dps: 39997.25654 + tps: 20026.83212 } } dps_results: { key: "TestDemonology-AllItems-Althor'sAbacus-50366" value: { - dps: 37708.04354 - tps: 18974.17131 + dps: 37728.32564 + tps: 19009.94515 } } dps_results: { key: "TestDemonology-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37914.33482 - tps: 19010.7713 + dps: 37933.08287 + tps: 19040.8181 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-55889" value: { - dps: 38363.80009 - tps: 19328.72691 + dps: 38384.05212 + tps: 19354.48641 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-56407" value: { - dps: 38450.88028 - tps: 19365.27037 + dps: 38463.05343 + tps: 19386.7767 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ArrowofTime-72897" value: { - dps: 37585.0269 - tps: 18943.90988 + dps: 37592.58017 + tps: 18954.93238 } } dps_results: { key: "TestDemonology-AllItems-AustereShadowspiritDiamond" value: { - dps: 39657.99745 - tps: 19778.68499 + dps: 39675.08021 + tps: 19803.18104 } } dps_results: { key: "TestDemonology-AllItems-Balespider'sBurningVestments" value: { - dps: 36640.4959 - tps: 18503.31071 + dps: 36635.41045 + tps: 18503.02392 } } dps_results: { key: "TestDemonology-AllItems-BaubleofTrueBlood-50726" value: { - dps: 37041.66168 - tps: 18660.17717 + dps: 37060.73911 + tps: 18690.22714 hps: 102.07136 } } dps_results: { key: "TestDemonology-AllItems-BedrockTalisman-58182" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-59326" value: { - dps: 39247.45798 - tps: 19752.78528 + dps: 39288.03096 + tps: 19785.77361 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-65053" value: { - dps: 39488.79446 - tps: 19740.70606 + dps: 39483.7112 + tps: 19748.76469 } } dps_results: { key: "TestDemonology-AllItems-BindingPromise-67037" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 37556.38029 - tps: 18865.50709 + dps: 37575.61609 + tps: 18895.6304 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-55995" value: { - dps: 37598.30936 - tps: 18894.73708 + dps: 37617.43842 + tps: 18924.85372 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-56414" value: { - dps: 37715.31197 - tps: 18923.96708 + dps: 37734.37766 + tps: 18954.09873 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 37056.91275 - tps: 18661.96962 + dps: 37089.14764 + tps: 18695.20079 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 37924.85194 - tps: 19116.93303 + dps: 37941.96294 + tps: 19145.52611 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 37743.23736 - tps: 19075.73853 + dps: 37780.62798 + tps: 19104.75424 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 37054.2385 - tps: 18671.17383 + dps: 37073.85152 + tps: 18701.17584 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 38071.63776 - tps: 19156.53615 + dps: 38092.12253 + tps: 19187.70125 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77210" value: { - dps: 37206.89977 - tps: 18818.00092 + dps: 37226.80749 + tps: 18848.26773 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77982" value: { - dps: 37191.92662 - tps: 18805.09527 + dps: 37211.85577 + tps: 18835.32466 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-78002" value: { - dps: 37238.31528 - tps: 18850.71803 + dps: 37258.16476 + tps: 18880.92033 } } dps_results: { key: "TestDemonology-AllItems-BottledLightning-66879" value: { - dps: 38018.5587 - tps: 19172.19101 + dps: 38035.31234 + tps: 19195.19914 } } dps_results: { key: "TestDemonology-AllItems-BottledWishes-77114" value: { - dps: 39312.95261 - tps: 19842.8627 + dps: 39288.00632 + tps: 19836.57724 } } dps_results: { key: "TestDemonology-AllItems-BracingShadowspiritDiamond" value: { - dps: 39870.19597 - tps: 19499.76341 + dps: 39888.11207 + tps: 19523.93005 } } dps_results: { key: "TestDemonology-AllItems-Brawler'sTrophy-232015" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-BurningShadowspiritDiamond" value: { - dps: 40195.36358 - tps: 20110.3434 + dps: 40213.68745 + tps: 20135.50013 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 38439.77397 - tps: 19380.36772 + dps: 38455.40515 + tps: 19408.1275 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 38694.93072 - tps: 19431.21444 + dps: 38720.55 + tps: 19466.5545 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.89415 + tps: 18701.54954 } } dps_results: { key: "TestDemonology-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 40096.81344 - tps: 20083.62437 + dps: 40114.44709 + tps: 20108.0143 } } dps_results: { key: "TestDemonology-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 37754.90719 - tps: 19085.84718 + dps: 37792.29781 + tps: 19114.86289 } } dps_results: { key: "TestDemonology-AllItems-CoreofRipeness-58184" value: { - dps: 38225.79428 - tps: 19214.93445 + dps: 38248.7195 + tps: 19252.59371 } } dps_results: { key: "TestDemonology-AllItems-CorpseTongueCoin-50349" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 37742.6367 - tps: 18973.70648 + dps: 37761.50449 + tps: 19004.33207 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 37858.5531 - tps: 19041.91681 + dps: 37859.18862 + tps: 19058.41118 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 37851.49297 - tps: 19097.86717 + dps: 37880.32933 + tps: 19132.54967 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-59506" value: { - dps: 37535.83695 - tps: 18885.58288 + dps: 37541.6211 + tps: 18898.11657 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-65118" value: { - dps: 37707.92 - tps: 18984.15923 + dps: 37715.53274 + tps: 18991.43055 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77208" value: { - dps: 40410.77964 - tps: 21105.59487 + dps: 40394.75703 + tps: 21095.77488 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77980" value: { - dps: 40063.9946 - tps: 20738.45899 + dps: 40084.68478 + tps: 20753.79806 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-78000" value: { - dps: 40928.50023 - tps: 21366.64964 + dps: 40931.44961 + tps: 21376.02826 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 38225.79428 - tps: 19214.93445 + dps: 38248.7195 + tps: 19252.59371 } } dps_results: { key: "TestDemonology-AllItems-Deathbringer'sWill-50363" value: { - dps: 37464.73738 - tps: 18873.09985 + dps: 37497.44644 + tps: 18909.07588 } } dps_results: { key: "TestDemonology-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 39768.14343 - tps: 19855.98267 + dps: 39785.41531 + tps: 19879.92527 } } dps_results: { key: "TestDemonology-AllItems-DislodgedForeignObject-50348" value: { - dps: 37925.50244 - tps: 19121.52072 + dps: 37906.70764 + tps: 19115.80371 } } dps_results: { key: "TestDemonology-AllItems-Dwyer'sCaber-70141" value: { - dps: 37894.12082 - tps: 19063.39608 + dps: 37907.73203 + tps: 19084.78656 } } dps_results: { key: "TestDemonology-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 39657.99745 - tps: 19778.68499 + dps: 39675.08021 + tps: 19803.18104 } } dps_results: { key: "TestDemonology-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 37509.55043 - tps: 18951.4405 + dps: 37527.62397 + tps: 18978.69615 } } dps_results: { key: "TestDemonology-AllItems-EmberShadowspiritDiamond" value: { - dps: 39870.19597 - tps: 19891.08001 + dps: 39888.11207 + tps: 19915.73985 } } dps_results: { key: "TestDemonology-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 39768.14343 - tps: 19855.98267 + dps: 39785.41531 + tps: 19879.92527 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-59473" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-65140" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 37914.33482 - tps: 19010.7713 + dps: 37933.08287 + tps: 19040.8181 } } dps_results: { key: "TestDemonology-AllItems-EternalShadowspiritDiamond" value: { - dps: 39657.99745 - tps: 19778.68499 + dps: 39675.08021 + tps: 19803.18104 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77200" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77977" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77997" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-59500" value: { - dps: 38225.79428 - tps: 19214.93445 + dps: 38248.7195 + tps: 19252.59371 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-65124" value: { - dps: 38377.28132 - tps: 19289.03372 + dps: 38399.10846 + tps: 19325.29683 } } dps_results: { key: "TestDemonology-AllItems-FieryQuintessence-69000" value: { - dps: 38238.46067 - tps: 19358.76934 + dps: 38273.36984 + tps: 19384.39429 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DemonPanther-52199" value: { - dps: 37607.36995 - tps: 18994.70088 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DreamOwl-52354" value: { - dps: 38102.81099 - tps: 19155.55353 + dps: 38125.72008 + tps: 19193.13359 } } dps_results: { key: "TestDemonology-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 38924.75281 - tps: 19574.17891 + dps: 38946.16192 + tps: 19611.38974 } } dps_results: { key: "TestDemonology-AllItems-Figurine-KingofBoars-52351" value: { - dps: 37715.31197 - tps: 18923.96708 + dps: 37734.37766 + tps: 18954.09873 } } dps_results: { key: "TestDemonology-AllItems-FireoftheDeep-77117" value: { - dps: 38084.33513 - tps: 19077.20311 + dps: 38103.06857 + tps: 19107.41345 } } dps_results: { key: "TestDemonology-AllItems-FleetShadowspiritDiamond" value: { - dps: 39729.50666 - tps: 19828.62911 + dps: 39746.53241 + tps: 19853.11865 } } dps_results: { key: "TestDemonology-AllItems-FluidDeath-58181" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-ForlornShadowspiritDiamond" value: { - dps: 39870.19597 - tps: 19884.85548 + dps: 39888.11207 + tps: 19909.51532 } } dps_results: { key: "TestDemonology-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 39441.14446 - tps: 19650.73505 + dps: 39456.2913 + tps: 19683.08061 } } dps_results: { key: "TestDemonology-AllItems-FuryofAngerforge-59461" value: { - dps: 37773.3183 - tps: 19094.48496 + dps: 37809.93403 + tps: 19122.72579 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56138" value: { - dps: 38218.96807 - tps: 19213.62058 + dps: 38225.71217 + tps: 19227.90691 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56462" value: { - dps: 38403.10148 - tps: 19325.88702 + dps: 38405.21252 + tps: 19342.80018 } } dps_results: { key: "TestDemonology-AllItems-GearDetector-61462" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { @@ -669,1983 +669,1983 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-GlowingTwilightScale-54589" value: { - dps: 37747.26127 - tps: 18992.06826 + dps: 37767.54645 + tps: 19027.86698 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-55266" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-56295" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HarmlightToken-63839" value: { - dps: 38353.75209 - tps: 19254.76734 + dps: 38289.9922 + tps: 19238.72562 } } dps_results: { key: "TestDemonology-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-59514" value: { - dps: 38664.39189 - tps: 19505.60519 + dps: 38586.26619 + tps: 19463.72523 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-65110" value: { - dps: 38972.65609 - tps: 19647.33323 + dps: 38980.83841 + tps: 19663.45333 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-59224" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-65072" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-55868" value: { - dps: 37477.15906 - tps: 18850.56489 + dps: 37484.05336 + tps: 18864.65374 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-56393" value: { - dps: 37559.18588 - tps: 18913.36323 + dps: 37561.77532 + tps: 18930.17529 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-55845" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-56370" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-HeartoftheVile-66969" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 39768.14343 - tps: 19855.98267 + dps: 39785.41531 + tps: 19879.92527 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62464" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62469" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-55881" value: { - dps: 37598.30936 - tps: 18894.73708 + dps: 37617.43842 + tps: 18924.85372 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-56406" value: { - dps: 37715.31197 - tps: 18923.96708 + dps: 37734.37766 + tps: 18954.09873 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77211" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77983" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-78003" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 40326.03439 - tps: 20336.77802 + dps: 40288.43062 + tps: 20336.14044 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 39938.40418 - tps: 20179.95015 + dps: 39882.2154 + tps: 20171.17077 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 40732.61423 - tps: 20543.10865 + dps: 40710.79848 + tps: 20528.1422 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 38094.07116 - tps: 19132.81099 + dps: 38113.00785 + tps: 19163.13013 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-59354" value: { - dps: 37054.2385 - tps: 18683.33358 + dps: 37073.85152 + tps: 18713.33559 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-65029" value: { - dps: 37054.2385 - tps: 18684.50366 + dps: 37073.85152 + tps: 18714.50568 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-68926" value: { - dps: 38412.78059 - tps: 19328.48298 + dps: 38434.51884 + tps: 19364.80959 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-69111" value: { - dps: 38624.17223 - tps: 19450.05535 + dps: 38647.20382 + tps: 19486.79106 } } dps_results: { key: "TestDemonology-AllItems-JujuofNimbleness-63840" value: { - dps: 37556.38029 - tps: 18865.50709 + dps: 37575.61609 + tps: 18895.6304 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-KiroptyricSigil-77113" value: { - dps: 38015.45321 - tps: 19181.2574 + dps: 37988.94139 + tps: 19173.70015 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59685" value: { - dps: 37300.85246 - tps: 18723.05201 + dps: 37264.4656 + tps: 18701.6599 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59689" value: { - dps: 37300.85246 - tps: 18723.05201 + dps: 37264.4656 + tps: 18701.6599 } } dps_results: { key: "TestDemonology-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 37458.88903 - tps: 18749.48814 + dps: 37390.11298 + tps: 18734.92536 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-55816" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-56347" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56102" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56427" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-LicensetoSlay-58180" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-55814" value: { - dps: 37053.95647 - tps: 18671.52621 + dps: 37073.61212 + tps: 18701.54954 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-56345" value: { - dps: 37053.95647 - tps: 18671.52621 + dps: 37073.61212 + tps: 18701.54954 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 37054.2385 - tps: 18671.15041 + dps: 37073.85152 + tps: 18701.15242 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 37054.2385 - tps: 18671.15041 + dps: 37073.85152 + tps: 18701.15242 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56132" value: { - dps: 37393.46114 - tps: 18767.76249 + dps: 37412.76339 + tps: 18797.86084 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56458" value: { - dps: 37436.67717 - tps: 18780.36486 + dps: 37455.93315 + tps: 18810.47304 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-68994" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-69150" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-55251" value: { - dps: 37607.38175 - tps: 18994.7256 + dps: 37623.5856 + tps: 19018.54083 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-56285" value: { - dps: 37607.38175 - tps: 18994.7256 + dps: 37623.5856 + tps: 19018.54083 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62466" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62471" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-MithrilStopwatch-232013" value: { - dps: 39000.30019 - tps: 19632.83707 + dps: 39034.79294 + tps: 19658.99846 } } dps_results: { key: "TestDemonology-AllItems-MoonwellChalice-70142" value: { - dps: 39220.46949 - tps: 19754.97899 + dps: 39222.70182 + tps: 19780.45731 } } dps_results: { key: "TestDemonology-AllItems-MoonwellPhial-70143" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-68982" value: { - dps: 39122.8227 - tps: 19572.70522 + dps: 39144.57389 + tps: 19609.51886 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-69139" value: { - dps: 39445.48215 - tps: 19726.65496 + dps: 39468.61381 + tps: 19763.99428 } } dps_results: { key: "TestDemonology-AllItems-Oremantle'sFavor-61448" value: { - dps: 37640.93484 - tps: 18966.15569 + dps: 37668.90031 + tps: 18993.89707 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 38165.35173 - tps: 19187.35606 + dps: 38188.26934 + tps: 19224.97792 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 38366.4379 - tps: 19287.7276 + dps: 38400.83743 + tps: 19325.97137 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-55237" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-56280" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 39657.99745 - tps: 19778.68499 + dps: 39675.08021 + tps: 19803.18104 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-55854" value: { - dps: 37054.2385 - tps: 18671.27451 + dps: 37073.85152 + tps: 18701.27652 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-56377" value: { - dps: 37054.2385 - tps: 18671.19256 + dps: 37073.85152 + tps: 18701.19457 } } dps_results: { key: "TestDemonology-AllItems-ReflectionoftheLight-77115" value: { - dps: 38378.29736 - tps: 19345.86448 + dps: 38397.18613 + tps: 19376.39994 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77201" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77978" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77998" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 39979.81669 - tps: 20001.84644 + dps: 39997.25654 + tps: 20026.83212 } } dps_results: { key: "TestDemonology-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 39979.81669 - tps: 20001.77993 + dps: 39997.25654 + tps: 20026.76562 } } dps_results: { key: "TestDemonology-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37843.22553 - tps: 19103.42376 + dps: 37859.81559 + tps: 19123.33854 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56100" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56431" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-RosaryofLight-72901" value: { - dps: 37455.42438 - tps: 18813.17497 + dps: 37481.62312 + tps: 18846.48425 } } dps_results: { key: "TestDemonology-AllItems-RottingSkull-77116" value: { - dps: 37974.38493 - tps: 19250.28638 + dps: 37972.66873 + tps: 19254.4983 } } dps_results: { key: "TestDemonology-AllItems-RuneofZeth-68998" value: { - dps: 39057.10554 - tps: 19811.91999 + dps: 39069.97381 + tps: 19830.35542 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 38216.39289 - tps: 19266.08571 + dps: 38232.66604 + tps: 19294.20699 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 38282.26167 - tps: 19299.78425 + dps: 38298.34552 + tps: 19327.79893 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 38379.09443 - tps: 19287.25646 + dps: 38397.97044 + tps: 19317.21697 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 38449.50482 - tps: 19320.34896 + dps: 38472.52743 + tps: 19352.24677 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 37054.28112 - tps: 18671.54752 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-68915" value: { - dps: 37056.82103 - tps: 18674.86948 + dps: 37075.75998 + tps: 18704.81865 hps: 357.04731 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-69109" value: { - dps: 37056.82103 - tps: 18674.86948 + dps: 37075.75998 + tps: 18704.81865 hps: 402.74602 } } dps_results: { key: "TestDemonology-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-55256" value: { - dps: 37492.40908 - tps: 18895.46063 + dps: 37510.76286 + tps: 18924.75354 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-56290" value: { - dps: 37870.4386 - tps: 19088.76145 + dps: 37887.70597 + tps: 19117.44259 } } dps_results: { key: "TestDemonology-AllItems-ShadowflameRegalia" value: { - dps: 33605.96489 - tps: 17290.9061 + dps: 33746.82215 + tps: 17369.77478 } } dps_results: { key: "TestDemonology-AllItems-ShardofWoe-60233" value: { - dps: 37636.35589 - tps: 18946.40569 + dps: 37616.26821 + tps: 18924.03757 } } dps_results: { key: "TestDemonology-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56115" value: { - dps: 37439.79562 - tps: 18796.71103 + dps: 37458.87439 + tps: 18826.53585 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56440" value: { - dps: 37489.02036 - tps: 18813.10428 + dps: 37508.02917 + tps: 18842.9059 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-55879" value: { - dps: 38275.63886 - tps: 19230.355 + dps: 38297.751 + tps: 19263.14876 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-56400" value: { - dps: 38483.69455 - tps: 19304.11119 + dps: 38506.13767 + tps: 19337.27588 } } dps_results: { key: "TestDemonology-AllItems-Soul'sAnguish-66994" value: { - dps: 37607.38175 - tps: 18994.7256 + dps: 37623.5856 + tps: 19018.54083 } } dps_results: { key: "TestDemonology-AllItems-SoulCasket-58183" value: { - dps: 38886.45079 - tps: 19530.2093 + dps: 38902.19023 + tps: 19558.53721 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77206" value: { - dps: 38242.35538 - tps: 18955.10039 + dps: 38261.70445 + tps: 18985.60123 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77970" value: { - dps: 38094.82331 - tps: 18918.80099 + dps: 38116.62979 + tps: 18950.86329 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77990" value: { - dps: 38030.91524 - tps: 18810.96128 + dps: 38046.34717 + tps: 18838.19676 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-68981" value: { - dps: 37914.33482 - tps: 19010.7713 + dps: 37933.2123 + tps: 19040.94753 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-69138" value: { - dps: 38052.78888 - tps: 19055.05918 + dps: 38071.57034 + tps: 19085.25814 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77202" value: { - dps: 38588.45321 - tps: 19580.09578 + dps: 38541.61293 + tps: 19587.09035 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77973" value: { - dps: 38360.37996 - tps: 19357.86093 + dps: 38305.4123 + tps: 19331.13736 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77993" value: { - dps: 39061.37639 - tps: 19664.79367 + dps: 38995.4432 + tps: 19628.86587 } } dps_results: { key: "TestDemonology-AllItems-StayofExecution-68996" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Stonemother'sKiss-61411" value: { - dps: 38381.31072 - tps: 19252.29213 + dps: 38414.00408 + tps: 19286.73468 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62465" value: { - dps: 38835.91081 - tps: 19583.64551 + dps: 38853.01366 + tps: 19609.57899 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62470" value: { - dps: 38970.53183 - tps: 19600.35423 + dps: 38986.59075 + tps: 19623.85869 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-59332" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-65048" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 38283.5543 - tps: 19122.82416 + dps: 38306.17356 + tps: 19160.81848 } } dps_results: { key: "TestDemonology-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-55819" value: { - dps: 37871.17107 - tps: 19041.13343 + dps: 37893.7982 + tps: 19078.82699 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-56351" value: { - dps: 38102.81099 - tps: 19155.55353 + dps: 38125.72008 + tps: 19193.13359 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 38303.41775 - tps: 19211.19522 + dps: 38331.30173 + tps: 19247.41078 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 38788.05702 - tps: 19408.81911 + dps: 38804.3288 + tps: 19437.01024 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-68927" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-69112" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-59519" value: { - dps: 38899.32167 - tps: 19395.94253 + dps: 38920.9352 + tps: 19433.75413 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-65105" value: { - dps: 39159.77679 - tps: 19511.37556 + dps: 39179.75201 + tps: 19546.74953 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56121" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56449" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-55874" value: { - dps: 37598.30936 - tps: 18894.73708 + dps: 37617.43842 + tps: 18924.85372 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-56394" value: { - dps: 37715.31197 - tps: 18923.96708 + dps: 37734.37766 + tps: 18954.09873 } } dps_results: { key: "TestDemonology-AllItems-TinyAbominationinaJar-50706" value: { - dps: 37497.36424 - tps: 18901.81158 + dps: 37490.73083 + tps: 18909.67092 } } dps_results: { key: "TestDemonology-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 38398.76205 - tps: 19335.75044 + dps: 38360.65435 + tps: 19318.90211 } } dps_results: { key: "TestDemonology-AllItems-UnheededWarning-59520" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-UnquenchableFlame-67101" value: { - dps: 37054.2385 - tps: 18671.32485 + dps: 37073.85152 + tps: 18701.32686 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62463" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62468" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-68709" value: { - dps: 37760.73856 - tps: 18955.85434 + dps: 37779.73511 + tps: 18986.00237 } } dps_results: { key: "TestDemonology-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 38602.72776 - tps: 19239.82683 + dps: 38618.69523 + tps: 19254.27416 } } dps_results: { key: "TestDemonology-AllItems-Varo'then'sBrooch-72899" value: { - dps: 37455.95682 - tps: 18800.55563 + dps: 37475.56359 + tps: 18830.71727 } } dps_results: { key: "TestDemonology-AllItems-VeilofLies-72900" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-68995" value: { - dps: 37150.63023 - tps: 18724.6455 + dps: 37171.61914 + tps: 18753.57487 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-69167" value: { - dps: 37160.40832 - tps: 18733.53213 + dps: 37181.21878 + tps: 18762.28304 } } dps_results: { key: "TestDemonology-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 35315.91618 - tps: 17473.94551 + dps: 34590.90742 + tps: 17499.51725 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77207" value: { - dps: 37250.76825 - tps: 18864.02916 + dps: 37270.71135 + tps: 18894.22662 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77979" value: { - dps: 37226.98879 - tps: 18844.03617 + dps: 37246.95529 + tps: 18874.38946 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77999" value: { - dps: 37266.12564 - tps: 18879.20394 + dps: 37285.83359 + tps: 18909.28484 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-59515" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-65109" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 37973.53756 - tps: 19141.84065 + dps: 37990.50864 + tps: 19170.35494 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 38081.79147 - tps: 19197.22347 + dps: 38098.45144 + tps: 19225.56257 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 37607.39468 - tps: 18994.7256 + dps: 37623.6241 + tps: 19018.56641 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37320.30191 - tps: 18911.69559 + dps: 37350.56179 + tps: 18946.27549 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 37835.29521 - tps: 19134.3884 + dps: 37871.03566 + tps: 19163.81368 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 37784.71371 - tps: 18972.68374 + dps: 37803.67377 + tps: 19002.8404 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 38095.48317 - tps: 19159.66577 + dps: 38111.80637 + tps: 19187.63613 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 38246.95346 - tps: 19235.77595 + dps: 38268.17842 + tps: 19268.16625 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.89415 + tps: 18701.54954 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77198" value: { - dps: 40203.40845 - tps: 20293.20386 + dps: 40239.9177 + tps: 20324.00054 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77975" value: { - dps: 39882.07097 - tps: 20105.40532 + dps: 39921.79711 + tps: 20137.94144 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77995" value: { - dps: 40585.64719 - tps: 20473.11743 + dps: 40620.74265 + tps: 20502.39496 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-55787" value: { - dps: 38308.49198 - tps: 19394.02441 + dps: 38250.49692 + tps: 19363.56808 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-56320" value: { - dps: 38994.76308 - tps: 19834.34328 + dps: 38933.75264 + tps: 19798.10405 } } dps_results: { key: "TestDemonology-AllItems-World-QuellerFocus-63842" value: { - dps: 37556.66831 - tps: 18865.50709 + dps: 37575.86075 + tps: 18895.60871 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77197" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77974" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77994" value: { - dps: 37054.2385 - tps: 18671.52621 + dps: 37073.85152 + tps: 18701.52822 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 37350.24511 - tps: 18755.16012 + dps: 37369.59364 + tps: 18785.24865 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 37350.24511 - tps: 18755.16012 + dps: 37369.59364 + tps: 18785.24865 } } dps_results: { key: "TestDemonology-Average-Default" value: { - dps: 40494.7705 - tps: 20274.29307 + dps: 40519.86295 + tps: 20291.32032 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54502.54434 - tps: 47048.64584 + dps: 54418.72662 + tps: 46959.24477 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38177.66288 - tps: 19581.92379 + dps: 38112.24777 + tps: 19549.58618 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52024.75453 - tps: 27150.26259 + dps: 51964.79577 + tps: 27125.44115 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46775.08858 - tps: 43449.02328 + dps: 46538.00288 + tps: 43244.9696 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27188.54564 - tps: 13996.4697 + dps: 27144.99625 + tps: 13977.41183 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33440.65854 - tps: 17667.09198 + dps: 33442.09875 + tps: 17680.55961 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54661.64876 - tps: 46863.8407 + dps: 54568.22102 + tps: 46792.22521 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38655.54092 - tps: 20734.9052 + dps: 38581.37716 + tps: 20689.59964 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53144.30953 - tps: 29183.46286 + dps: 53042.84417 + tps: 29117.28801 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46903.36817 - tps: 41314.73045 + dps: 46694.4427 + tps: 41159.22264 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27404.49177 - tps: 14719.41075 + dps: 27345.53817 + tps: 14692.12543 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33743.97373 - tps: 18906.705 + dps: 33686.40051 + tps: 18901.70651 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55176.76825 - tps: 47837.36977 + dps: 55138.34583 + tps: 47797.35405 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38988.61567 - tps: 20200.8395 + dps: 38929.18738 + tps: 20180.4143 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53086.97475 - tps: 28089.51787 + dps: 53018.10428 + tps: 28064.15759 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47278.97097 - tps: 43552.3154 + dps: 47111.07303 + tps: 43416.69624 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27611.7537 - tps: 14374.45694 + dps: 27595.10483 + tps: 14363.60029 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33930.73726 - tps: 18233.64295 + dps: 33923.73497 + tps: 18251.62119 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48764.11033 - tps: 40579.05493 + dps: 48708.82123 + tps: 40550.73758 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34715.46478 - tps: 17712.47921 + dps: 34642.14513 + tps: 17671.51723 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49152.02201 - tps: 26253.10408 + dps: 49093.48855 + tps: 26238.23583 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42713.90618 - tps: 37929.21034 + dps: 42576.83427 + tps: 37823.00791 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25113.61276 - tps: 12794.29241 + dps: 25091.55519 + tps: 12781.42393 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31626.18955 - tps: 16963.20588 + dps: 31667.44718 + tps: 16980.92445 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54220.1097 - tps: 46640.82305 + dps: 54164.47555 + tps: 46602.63668 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37966.619 - tps: 19456.35506 + dps: 37972.52074 + tps: 19466.57486 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51451.42749 - tps: 27069.89567 + dps: 51432.33843 + tps: 27089.99145 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46299.65471 - tps: 42861.89663 + dps: 46163.09441 + tps: 42759.28536 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26986.01105 - tps: 13955.60808 + dps: 26930.32085 + tps: 13913.58521 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33415.1623 - tps: 17758.55497 + dps: 33412.58625 + tps: 17783.42782 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54211.92003 - tps: 46101.57125 + dps: 54145.30497 + tps: 46068.34908 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38498.97116 - tps: 20696.54577 + dps: 38455.56801 + tps: 20683.04137 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52964.45235 - tps: 29298.439 + dps: 52939.67643 + tps: 29283.55949 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46793.61232 - tps: 41248.00468 + dps: 46477.28098 + tps: 41010.00975 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27321.77143 - tps: 14674.47094 + dps: 27238.97434 + tps: 14630.15333 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33401.8062 - tps: 18631.89756 + dps: 33342.20627 + tps: 18633.99051 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54914.45028 - tps: 47188.19282 + dps: 54815.89168 + tps: 47095.09673 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38636.38027 - tps: 19985.93927 + dps: 38638.01082 + tps: 19997.91467 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52390.42106 - tps: 27837.16147 + dps: 52371.34608 + tps: 27856.21853 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47011.35962 - tps: 43482.09547 + dps: 46818.85253 + tps: 43331.78145 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27315.02934 - tps: 14239.48306 + dps: 27292.45099 + tps: 14226.0025 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33993.02844 - tps: 18187.01715 + dps: 33989.3738 + tps: 18211.99312 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48703.08341 - tps: 40591.393 + dps: 48743.51216 + tps: 40631.37411 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34711.64054 - tps: 17815.9325 + dps: 34685.2083 + tps: 17814.74025 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 48513.65597 - tps: 25998.98508 + dps: 48431.74757 + tps: 25986.56227 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42538.12087 - tps: 37596.84202 + dps: 42543.40331 + tps: 37594.18293 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24943.24733 - tps: 12673.53411 + dps: 24923.89968 + tps: 12645.42959 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31495.46762 - tps: 16916.11364 + dps: 31539.62852 + tps: 16939.56656 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55188.95013 - tps: 46841.77047 + dps: 55126.53403 + tps: 46801.6679 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38797.50222 - tps: 19613.7638 + dps: 38797.57635 + tps: 19622.17383 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52734.17176 - tps: 27503.71775 + dps: 52718.83195 + tps: 27526.1661 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47423.19412 - tps: 43265.24363 + dps: 47246.00641 + tps: 43136.397 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27568.62926 - tps: 14075.90564 + dps: 27501.32509 + tps: 14024.30235 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34358.10192 - tps: 18062.3415 + dps: 34359.76278 + tps: 18089.7585 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55099.4016 - tps: 46357.03293 + dps: 55049.00136 + tps: 46345.31103 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39283.92696 - tps: 20847.67233 + dps: 39238.50271 + tps: 20829.28809 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54290.87629 - tps: 29766.39049 + dps: 54267.73949 + tps: 29752.58891 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47945.50409 - tps: 41760.32682 + dps: 47695.05362 + tps: 41574.49616 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27950.39643 - tps: 14784.238 + dps: 27860.84613 + tps: 14737.67382 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34378.53293 - tps: 18951.44931 + dps: 34321.69476 + tps: 18955.38996 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55844.84939 - tps: 47236.93361 + dps: 55730.28329 + tps: 47125.94979 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39496.31321 - tps: 20188.02139 + dps: 39486.82492 + tps: 20197.04811 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53667.72076 - tps: 28266.60007 + dps: 53652.25845 + tps: 28287.67033 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48019.17196 - tps: 43743.63038 + dps: 47782.51242 + tps: 43557.63936 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27947.7992 - tps: 14414.4611 + dps: 27930.67985 + tps: 14405.74865 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34945.28465 - tps: 18493.48165 + dps: 34946.1603 + tps: 18521.27716 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49627.90996 - tps: 40758.05576 + dps: 49687.4302 + tps: 40817.33861 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35495.58689 - tps: 17961.87958 + dps: 35467.36109 + tps: 17956.87957 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49797.2072 - tps: 26460.85146 + dps: 49716.49034 + tps: 26448.31598 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 43655.80903 - tps: 37933.78562 + dps: 43653.67386 + tps: 37925.34078 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25609.93192 - tps: 12829.01882 + dps: 25594.53062 + tps: 12803.46277 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32475.1648 - tps: 17224.70001 + dps: 32523.34845 + tps: 17250.23971 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55007.56377 - tps: 47452.94435 + dps: 55072.83865 + tps: 47516.61109 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38756.15436 - tps: 19991.75611 + dps: 38813.38131 + tps: 20020.58641 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54018.80829 - tps: 28139.81159 + dps: 54009.10477 + tps: 28111.41973 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47949.44207 - tps: 44651.84374 + dps: 47743.88635 + tps: 44488.65613 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27410.63791 - tps: 14210.72907 + dps: 27436.12942 + tps: 14227.06284 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34744.16282 - tps: 18760.86114 + dps: 34735.40363 + tps: 18735.30434 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55036.75004 - tps: 46555.5721 + dps: 54988.97718 + tps: 46499.20618 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39132.56611 - tps: 21078.74433 + dps: 39158.21412 + tps: 21087.68332 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54904.72732 - tps: 30426.90685 + dps: 55004.72773 + tps: 30461.78977 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48448.78007 - tps: 42873.22371 + dps: 48401.22611 + tps: 42833.78049 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28191.05112 - tps: 15154.68461 + dps: 28191.14071 + tps: 15134.63082 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36097.98088 - tps: 20135.65806 + dps: 36083.5652 + tps: 20090.05921 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55791.14749 - tps: 48141.02852 + dps: 55748.43482 + tps: 48102.2157 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39400.47431 - tps: 20479.8084 + dps: 39422.98869 + tps: 20496.49555 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54907.86858 - tps: 29014.66058 + dps: 54900.29963 + tps: 28978.27072 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48624.09958 - tps: 44886.8785 + dps: 48428.75326 + tps: 44711.45729 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27839.74288 - tps: 14632.42849 + dps: 27832.95289 + tps: 14623.98514 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35148.76094 - tps: 19120.19324 + dps: 35134.7076 + tps: 19090.81454 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49534.39686 - tps: 40824.1065 + dps: 49442.14723 + tps: 40724.94602 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35447.27395 - tps: 18064.29236 + dps: 35391.30086 + tps: 18011.88552 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51331.12105 - tps: 27088.45453 + dps: 51239.76073 + tps: 26995.95875 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44086.31309 - tps: 38397.15423 + dps: 44007.01442 + tps: 38329.97463 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25355.44874 - tps: 12920.40865 + dps: 25323.9566 + tps: 12894.93372 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33111.58114 - tps: 18041.00435 + dps: 33159.35554 + tps: 18070.06378 } } dps_results: { key: "TestDemonology-SwitchInFrontOfTarget-Default" value: { - dps: 40012.75367 - tps: 20110.3434 + dps: 40031.07753 + tps: 20135.50013 } } diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index c9b42012be..05e684a1da 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestDestruction-AllItems-AgileShadowspiritDiamond" value: { - dps: 40223.65458 - tps: 23815.38906 + dps: 40254.40096 + tps: 23820.03495 } } dps_results: { key: "TestDestruction-AllItems-Althor'sAbacus-50366" value: { - dps: 38618.09021 - tps: 22790.80886 + dps: 38660.20895 + tps: 22808.06174 } } dps_results: { key: "TestDestruction-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 38613.22519 - tps: 22832.88195 + dps: 38641.14767 + tps: 22840.57232 } } dps_results: { key: "TestDestruction-AllItems-Anhuur'sHymnal-55889" value: { - dps: 38813.61858 - tps: 22890.19443 + dps: 38860.12221 + tps: 22909.49181 } } dps_results: { key: "TestDestruction-AllItems-Anhuur'sHymnal-56407" value: { - dps: 38851.2684 - tps: 22922.84555 + dps: 38896.20949 + tps: 22942.27111 } } dps_results: { key: "TestDestruction-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ArrowofTime-72897" value: { - dps: 38682.51939 - tps: 22827.76551 + dps: 38653.36064 + tps: 22824.35222 } } dps_results: { key: "TestDestruction-AllItems-AustereShadowspiritDiamond" value: { - dps: 39803.9954 - tps: 23533.93425 + dps: 39835.01188 + tps: 23539.00066 } } dps_results: { key: "TestDestruction-AllItems-Balespider'sBurningVestments" value: { - dps: 37078.56714 - tps: 21829.18695 + dps: 37120.93369 + tps: 21851.86932 } } dps_results: { key: "TestDestruction-AllItems-BaubleofTrueBlood-50726" value: { - dps: 37904.19624 - tps: 22379.29581 + dps: 37943.75723 + tps: 22398.50629 hps: 100.99448 } } dps_results: { key: "TestDestruction-AllItems-BedrockTalisman-58182" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-BellofEnragingResonance-59326" value: { - dps: 39850.58424 - tps: 23497.00322 + dps: 39898.04691 + tps: 23516.86172 } } dps_results: { key: "TestDestruction-AllItems-BellofEnragingResonance-65053" value: { - dps: 40114.0151 - tps: 23663.60802 + dps: 40162.07129 + tps: 23686.33574 } } dps_results: { key: "TestDestruction-AllItems-BindingPromise-67037" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 38365.18187 - tps: 22681.36228 + dps: 38392.82536 + tps: 22689.09825 } } dps_results: { key: "TestDestruction-AllItems-BloodofIsiset-55995" value: { - dps: 38428.31636 - tps: 22707.31604 + dps: 38471.93734 + tps: 22725.73711 } } dps_results: { key: "TestDestruction-AllItems-BloodofIsiset-56414" value: { - dps: 38478.86518 - tps: 22738.81197 + dps: 38522.52654 + tps: 22757.22186 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 37991.63812 - tps: 22428.2138 + dps: 38027.4048 + tps: 22441.85005 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 39074.3486 - tps: 22981.47386 + dps: 39114.37156 + tps: 22997.66734 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 38568.68711 - tps: 22781.45899 + dps: 38611.99524 + tps: 22799.23894 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 38042.30725 - tps: 22467.16212 + dps: 38085.61982 + tps: 22485.66851 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 38042.30725 - tps: 22467.26115 + dps: 38085.61982 + tps: 22485.76755 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 39054.2969 - tps: 23034.46334 + dps: 39096.61608 + tps: 23052.74156 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-77210" value: { - dps: 38164.02181 - tps: 22588.30681 + dps: 38207.51619 + tps: 22607.00831 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-77982" value: { - dps: 38148.36839 - tps: 22574.5455 + dps: 38191.6776 + tps: 22593.10846 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-78002" value: { - dps: 38181.36255 - tps: 22610.56469 + dps: 38224.76558 + tps: 22629.2121 } } dps_results: { key: "TestDestruction-AllItems-BottledLightning-66879" value: { - dps: 38789.98095 - tps: 22910.25201 + dps: 38836.73507 + tps: 22932.31489 } } dps_results: { key: "TestDestruction-AllItems-BottledWishes-77114" value: { - dps: 40123.99619 - tps: 23682.01173 + dps: 40166.09864 + tps: 23696.06542 } } dps_results: { key: "TestDestruction-AllItems-BracingShadowspiritDiamond" value: { - dps: 40016.70864 - tps: 23193.76972 + dps: 40044.87931 + tps: 23197.89503 } } dps_results: { key: "TestDestruction-AllItems-Brawler'sTrophy-232015" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-BurningShadowspiritDiamond" value: { - dps: 40439.94755 - tps: 23933.1579 + dps: 40467.75777 + tps: 23936.89419 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 39713.10386 - tps: 23309.68048 + dps: 39755.521 + tps: 23327.27463 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 39594.7557 - tps: 23314.70263 + dps: 39636.78159 + tps: 23333.71732 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 40281.46039 - tps: 23860.39968 + dps: 40313.91903 + tps: 23865.79028 } } dps_results: { key: "TestDestruction-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 38565.90273 - tps: 22788.76551 + dps: 38614.4116 + tps: 22812.54149 } } dps_results: { key: "TestDestruction-AllItems-CoreofRipeness-58184" value: { - dps: 39109.36052 - tps: 23098.58915 + dps: 39151.10318 + tps: 23114.66909 } } dps_results: { key: "TestDestruction-AllItems-CorpseTongueCoin-50349" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 38612.87504 - tps: 22825.01971 + dps: 38663.47126 + tps: 22850.07636 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 38730.18468 - tps: 22926.14874 + dps: 38765.88937 + tps: 22938.85357 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 38622.7187 - tps: 22782.63378 + dps: 38667.2085 + tps: 22801.41179 } } dps_results: { key: "TestDestruction-AllItems-CrushingWeight-59506" value: { - dps: 38377.06895 - tps: 22667.80189 + dps: 38402.03443 + tps: 22682.1101 } } dps_results: { key: "TestDestruction-AllItems-CrushingWeight-65118" value: { - dps: 38570.37967 - tps: 22787.62827 + dps: 38577.87517 + tps: 22800.00428 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-77208" value: { - dps: 40809.794 - tps: 24605.60939 + dps: 40855.76916 + tps: 24627.75495 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-77980" value: { - dps: 40581.74746 - tps: 24453.66947 + dps: 40619.14389 + tps: 24464.1766 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-78000" value: { - dps: 41182.24473 - tps: 24896.38034 + dps: 41230.56192 + tps: 24919.34438 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 38042.30725 - tps: 22467.2667 + dps: 38085.61982 + tps: 22485.7731 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 39165.69674 - tps: 23125.72029 + dps: 39207.10675 + tps: 23141.36119 } } dps_results: { key: "TestDestruction-AllItems-Deathbringer'sWill-50363" value: { - dps: 38302.63266 - tps: 22620.12336 + dps: 38349.26748 + tps: 22642.89637 } } dps_results: { key: "TestDestruction-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 39858.78229 - tps: 23576.52068 + dps: 39891.41492 + tps: 23582.29045 } } dps_results: { key: "TestDestruction-AllItems-DislodgedForeignObject-50348" value: { - dps: 39036.94361 - tps: 22972.30192 + dps: 39042.23078 + tps: 22963.26542 } } dps_results: { key: "TestDestruction-AllItems-Dwyer'sCaber-70141" value: { - dps: 38557.64298 - tps: 22735.62663 + dps: 38597.2046 + tps: 22752.86512 } } dps_results: { key: "TestDestruction-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 39803.9954 - tps: 23533.93425 + dps: 39835.01188 + tps: 23539.00066 } } dps_results: { key: "TestDestruction-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 38524.73068 - tps: 22727.18908 + dps: 38567.80655 + tps: 22744.6587 } } dps_results: { key: "TestDestruction-AllItems-EmberShadowspiritDiamond" value: { - dps: 40010.621 - tps: 23661.6201 + dps: 40039.83137 + tps: 23666.38701 } } dps_results: { key: "TestDestruction-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 39858.78229 - tps: 23576.52068 + dps: 39891.41492 + tps: 23582.29045 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheCyclone-59473" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheCyclone-65140" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 38613.22519 - tps: 22832.88195 + dps: 38641.14767 + tps: 22840.57232 } } dps_results: { key: "TestDestruction-AllItems-EternalShadowspiritDiamond" value: { - dps: 39803.9954 - tps: 23533.93425 + dps: 39835.01188 + tps: 23539.00066 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77200" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77977" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77997" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-FallofMortality-59500" value: { - dps: 39165.69674 - tps: 23125.72029 + dps: 39207.10675 + tps: 23141.36119 } } dps_results: { key: "TestDestruction-AllItems-FallofMortality-65124" value: { - dps: 39316.2664 - tps: 23211.96732 + dps: 39358.50877 + tps: 23227.55292 } } dps_results: { key: "TestDestruction-AllItems-FieryQuintessence-69000" value: { - dps: 39258.26766 - tps: 23147.38741 + dps: 39298.36731 + tps: 23161.19234 } } dps_results: { key: "TestDestruction-AllItems-Figurine-DemonPanther-52199" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-Figurine-DreamOwl-52354" value: { - dps: 39023.68035 - tps: 23042.51528 + dps: 39067.05234 + tps: 23058.02914 } } dps_results: { key: "TestDestruction-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 38019.98205 - tps: 22453.22969 + dps: 38055.44927 + tps: 22463.88162 } } dps_results: { key: "TestDestruction-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 40041.24082 - tps: 23568.66491 + dps: 40088.55709 + tps: 23586.33982 } } dps_results: { key: "TestDestruction-AllItems-Figurine-KingofBoars-52351" value: { - dps: 38430.75122 - tps: 22698.01198 + dps: 38466.97702 + tps: 22711.68655 } } dps_results: { key: "TestDestruction-AllItems-FireoftheDeep-77117" value: { - dps: 38743.86349 - tps: 22903.92697 + dps: 38787.73658 + tps: 22922.27828 } } dps_results: { key: "TestDestruction-AllItems-FleetShadowspiritDiamond" value: { - dps: 39889.98085 - tps: 23587.73179 + dps: 39921.10657 + tps: 23592.81792 } } dps_results: { key: "TestDestruction-AllItems-FluidDeath-58181" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ForlornShadowspiritDiamond" value: { - dps: 40016.70864 - tps: 23649.43762 + dps: 40044.87931 + tps: 23653.64713 } } dps_results: { key: "TestDestruction-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 40158.90644 - tps: 23734.22606 + dps: 40202.28681 + tps: 23752.17446 } } dps_results: { key: "TestDestruction-AllItems-FuryofAngerforge-59461" value: { - dps: 38571.98193 - tps: 22803.5844 + dps: 38616.60292 + tps: 22822.81619 } } dps_results: { key: "TestDestruction-AllItems-GaleofShadows-56138" value: { - dps: 39101.03151 - tps: 23092.13686 + dps: 39100.53125 + tps: 23094.56415 } } dps_results: { key: "TestDestruction-AllItems-GaleofShadows-56462" value: { - dps: 39522.20961 - tps: 23373.57175 + dps: 39532.90011 + tps: 23351.60679 } } dps_results: { key: "TestDestruction-AllItems-GearDetector-61462" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { @@ -669,1479 +669,1479 @@ dps_results: { dps_results: { key: "TestDestruction-AllItems-GlowingTwilightScale-54589" value: { - dps: 38673.01308 - tps: 22841.69146 + dps: 38716.54096 + tps: 22858.98147 } } dps_results: { key: "TestDestruction-AllItems-GraceoftheHerald-55266" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-GraceoftheHerald-56295" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-HarmlightToken-63839" value: { - dps: 38977.7888 - tps: 23021.78822 + dps: 38997.8592 + tps: 23025.83795 } } dps_results: { key: "TestDestruction-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-HeartofIgnacious-59514" value: { - dps: 39603.13687 - tps: 23416.39323 + dps: 39623.52493 + tps: 23426.05237 } } dps_results: { key: "TestDestruction-AllItems-HeartofIgnacious-65110" value: { - dps: 39930.40692 - tps: 23664.91023 + dps: 39914.43769 + tps: 23653.88881 } } dps_results: { key: "TestDestruction-AllItems-HeartofRage-59224" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-HeartofRage-65072" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-HeartofSolace-55868" value: { - dps: 38285.80219 - tps: 22624.18938 + dps: 38285.26155 + tps: 22626.54601 } } dps_results: { key: "TestDestruction-AllItems-HeartofSolace-56393" value: { - dps: 38594.60361 - tps: 22840.10058 + dps: 38605.0031 + tps: 22818.71483 } } dps_results: { key: "TestDestruction-AllItems-HeartofThunder-55845" value: { - dps: 38024.31429 - tps: 22448.99903 + dps: 38065.84808 + tps: 22462.52361 } } dps_results: { key: "TestDestruction-AllItems-HeartofThunder-56370" value: { - dps: 38024.04876 - tps: 22449.87582 + dps: 38066.93354 + tps: 22467.10884 } } dps_results: { key: "TestDestruction-AllItems-HeartoftheVile-66969" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 39858.78229 - tps: 23576.52068 + dps: 39891.41492 + tps: 23582.29045 } } dps_results: { key: "TestDestruction-AllItems-ImpatienceofYouth-62464" value: { - dps: 38485.87407 - tps: 22732.30156 + dps: 38522.13157 + tps: 22745.9571 } } dps_results: { key: "TestDestruction-AllItems-ImpatienceofYouth-62469" value: { - dps: 38485.87407 - tps: 22732.30156 + dps: 38522.13157 + tps: 22745.9571 } } dps_results: { key: "TestDestruction-AllItems-ImpetuousQuery-55881" value: { - dps: 38428.31636 - tps: 22707.31604 + dps: 38471.93734 + tps: 22725.73711 } } dps_results: { key: "TestDestruction-AllItems-ImpetuousQuery-56406" value: { - dps: 38478.86518 - tps: 22738.81197 + dps: 38522.52654 + tps: 22757.22186 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-77211" value: { - dps: 38036.77637 - tps: 22457.0101 + dps: 38079.66116 + tps: 22474.24312 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-77983" value: { - dps: 38033.63613 - tps: 22461.50351 + dps: 38076.52091 + tps: 22478.73653 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-78003" value: { - dps: 38033.76429 - tps: 22454.07563 + dps: 38076.64907 + tps: 22471.30865 } } dps_results: { key: "TestDestruction-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 38024.31429 - tps: 22448.98771 + dps: 38065.84808 + tps: 22462.51228 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 41023.41259 - tps: 24148.80384 + dps: 41034.76407 + tps: 24162.13033 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 40857.54612 - tps: 24039.95375 + dps: 40844.82285 + tps: 24029.18874 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 41659.75251 - tps: 24646.32643 + dps: 41650.88116 + tps: 24638.69495 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 38956.19927 - tps: 22976.47035 + dps: 38986.74127 + tps: 22986.271 } } dps_results: { key: "TestDestruction-AllItems-JarofAncientRemedies-59354" value: { - dps: 38021.2871 - tps: 22471.11108 + dps: 38061.50831 + tps: 22484.12665 } } dps_results: { key: "TestDestruction-AllItems-JarofAncientRemedies-65029" value: { - dps: 38001.70401 - tps: 22458.00065 + dps: 38042.37714 + tps: 22470.06162 } } dps_results: { key: "TestDestruction-AllItems-JawsofDefeat-68926" value: { - dps: 39367.90038 - tps: 23275.72517 + dps: 39410.53612 + tps: 23293.39457 } } dps_results: { key: "TestDestruction-AllItems-JawsofDefeat-69111" value: { - dps: 39545.74005 - tps: 23373.62812 + dps: 39589.99147 + tps: 23392.66254 } } dps_results: { key: "TestDestruction-AllItems-JujuofNimbleness-63840" value: { - dps: 38365.18187 - tps: 22681.36228 + dps: 38392.82536 + tps: 22689.09825 } } dps_results: { key: "TestDestruction-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-KiroptyricSigil-77113" value: { - dps: 38627.32994 - tps: 22919.10804 + dps: 38664.56673 + tps: 22931.19539 } } dps_results: { key: "TestDestruction-AllItems-KvaldirBattleStandard-59685" value: { - dps: 38305.7279 - tps: 22615.84269 + dps: 38317.30506 + tps: 22618.2587 } } dps_results: { key: "TestDestruction-AllItems-KvaldirBattleStandard-59689" value: { - dps: 38305.7279 - tps: 22615.84269 + dps: 38317.30506 + tps: 22618.2587 } } dps_results: { key: "TestDestruction-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 38475.62264 - tps: 22776.38947 + dps: 38470.71851 + tps: 22763.57257 } } dps_results: { key: "TestDestruction-AllItems-LeadenDespair-55816" value: { - dps: 38051.89462 - tps: 22478.33919 + dps: 38095.20719 + tps: 22496.84559 } } dps_results: { key: "TestDestruction-AllItems-LeadenDespair-56347" value: { - dps: 38019.98205 - tps: 22453.22969 + dps: 38055.44927 + tps: 22463.88162 } } dps_results: { key: "TestDestruction-AllItems-LeftEyeofRajh-56102" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-LeftEyeofRajh-56427" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-LicensetoSlay-58180" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-MagnetiteMirror-55814" value: { - dps: 38029.39979 - tps: 22472.19964 + dps: 38056.96068 + tps: 22480.12565 } } dps_results: { key: "TestDestruction-AllItems-MagnetiteMirror-56345" value: { - dps: 38029.39979 - tps: 22472.19964 + dps: 38056.96068 + tps: 22480.12565 } } dps_results: { key: "TestDestruction-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 38042.30725 - tps: 22466.69609 + dps: 38085.61982 + tps: 22485.20248 } } dps_results: { key: "TestDestruction-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 38042.30725 - tps: 22466.69609 + dps: 38085.61982 + tps: 22485.20248 } } dps_results: { key: "TestDestruction-AllItems-MarkofKhardros-56132" value: { - dps: 38465.22228 - tps: 22728.68692 + dps: 38494.50191 + tps: 22737.71902 } } dps_results: { key: "TestDestruction-AllItems-MarkofKhardros-56458" value: { - dps: 38522.29427 - tps: 22762.27454 + dps: 38551.79897 + tps: 22771.45149 } } dps_results: { key: "TestDestruction-AllItems-MatrixRestabilizer-68994" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-MatrixRestabilizer-69150" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-MightoftheOcean-55251" value: { - dps: 38029.39979 - tps: 22472.19964 + dps: 38056.96068 + tps: 22480.12565 } } dps_results: { key: "TestDestruction-AllItems-MightoftheOcean-56285" value: { - dps: 38029.39979 - tps: 22472.19964 + dps: 38056.96068 + tps: 22480.12565 } } dps_results: { key: "TestDestruction-AllItems-MirrorofBrokenImages-62466" value: { - dps: 38534.00933 - tps: 22773.17116 + dps: 38577.71475 + tps: 22791.56886 } } dps_results: { key: "TestDestruction-AllItems-MirrorofBrokenImages-62471" value: { - dps: 38534.00933 - tps: 22773.17116 + dps: 38577.71475 + tps: 22791.56886 } } dps_results: { key: "TestDestruction-AllItems-MithrilStopwatch-232013" value: { - dps: 39749.16147 - tps: 23463.60152 + dps: 39802.84244 + tps: 23489.48121 } } dps_results: { key: "TestDestruction-AllItems-MoonwellChalice-70142" value: { - dps: 39926.43358 - tps: 23597.41539 + dps: 39971.56361 + tps: 23616.2133 } } dps_results: { key: "TestDestruction-AllItems-MoonwellPhial-70143" value: { - dps: 38033.90166 - tps: 22460.55538 + dps: 38075.43545 + tps: 22474.07995 } } dps_results: { key: "TestDestruction-AllItems-NecromanticFocus-68982" value: { - dps: 40003.52061 - tps: 23648.7406 + dps: 40046.99271 + tps: 23666.66273 } } dps_results: { key: "TestDestruction-AllItems-NecromanticFocus-69139" value: { - dps: 40343.5681 - tps: 23871.23005 + dps: 40388.05553 + tps: 23891.0839 } } dps_results: { key: "TestDestruction-AllItems-Oremantle'sFavor-61448" value: { - dps: 38275.33646 - tps: 22548.02172 + dps: 38315.03444 + tps: 22559.76913 } } dps_results: { key: "TestDestruction-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 39092.66128 - tps: 23083.55059 + dps: 39133.60928 + tps: 23098.76824 } } dps_results: { key: "TestDestruction-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 39094.18496 - tps: 23063.08433 + dps: 39141.46056 + tps: 23085.98727 } } dps_results: { key: "TestDestruction-AllItems-PorcelainCrab-55237" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-PorcelainCrab-56280" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 39803.9954 - tps: 23533.93425 + dps: 39835.01188 + tps: 23539.00066 } } dps_results: { key: "TestDestruction-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Rainsong-55854" value: { - dps: 38042.30725 - tps: 22466.73096 + dps: 38085.61982 + tps: 22485.23736 } } dps_results: { key: "TestDestruction-AllItems-Rainsong-56377" value: { - dps: 38042.30725 - tps: 22466.70793 + dps: 38085.61982 + tps: 22485.21433 } } dps_results: { key: "TestDestruction-AllItems-ReflectionoftheLight-77115" value: { - dps: 39503.90258 - tps: 23218.51714 + dps: 39538.27408 + tps: 23231.23347 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77201" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77978" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77998" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 40223.65458 - tps: 23815.38906 + dps: 40254.40096 + tps: 23820.03495 } } dps_results: { key: "TestDestruction-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 40223.65458 - tps: 23815.36379 + dps: 40254.40096 + tps: 23820.00967 } } dps_results: { key: "TestDestruction-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 38578.91258 - tps: 22707.02293 + dps: 38619.46839 + tps: 22719.07472 } } dps_results: { key: "TestDestruction-AllItems-RightEyeofRajh-56100" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-RightEyeofRajh-56431" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-RosaryofLight-72901" value: { - dps: 38358.07378 - tps: 22649.74392 + dps: 38404.57789 + tps: 22668.59397 } } dps_results: { key: "TestDestruction-AllItems-RottingSkull-77116" value: { - dps: 38745.07691 - tps: 22919.13467 + dps: 38783.99333 + tps: 22937.70372 } } dps_results: { key: "TestDestruction-AllItems-RuneofZeth-68998" value: { - dps: 39983.79553 - tps: 23580.38458 + dps: 40026.15825 + tps: 23600.19734 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 39436.00202 - tps: 23167.29941 + dps: 39477.38053 + tps: 23184.28593 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 39517.71154 - tps: 23209.28357 + dps: 39559.39631 + tps: 23226.44927 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 39309.56083 - tps: 23162.65602 + dps: 39354.62398 + tps: 23182.65655 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 39382.98665 - tps: 23211.25153 + dps: 39426.66058 + tps: 23229.44309 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ScalesofLife-68915" value: { - dps: 37874.70409 - tps: 22368.04975 + dps: 37911.48058 + tps: 22384.0689 hps: 354.04187 } } dps_results: { key: "TestDestruction-AllItems-ScalesofLife-69109" value: { - dps: 37888.31713 - tps: 22375.21895 + dps: 37927.24917 + tps: 22392.90746 hps: 399.35591 } } dps_results: { key: "TestDestruction-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-SeaStar-55256" value: { - dps: 38537.90786 - tps: 22705.76351 + dps: 38575.92013 + tps: 22720.78068 } } dps_results: { key: "TestDestruction-AllItems-SeaStar-56290" value: { - dps: 39006.84943 - tps: 22946.68413 + dps: 39046.61939 + tps: 22962.7296 } } dps_results: { key: "TestDestruction-AllItems-ShadowflameRegalia" value: { - dps: 33806.41574 - tps: 20286.00681 + dps: 33842.47526 + tps: 20400.29611 } } dps_results: { key: "TestDestruction-AllItems-ShardofWoe-60233" value: { - dps: 39018.50201 - tps: 23053.00093 + dps: 39016.43939 + tps: 23053.95397 } } dps_results: { key: "TestDestruction-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 38051.89462 - tps: 22478.2532 + dps: 38095.20719 + tps: 22496.7596 } } dps_results: { key: "TestDestruction-AllItems-Skardyn'sGrace-56115" value: { - dps: 38506.43971 - tps: 22731.61329 + dps: 38544.3217 + tps: 22746.41168 } } dps_results: { key: "TestDestruction-AllItems-Skardyn'sGrace-56440" value: { - dps: 38573.49751 - tps: 22771.56169 + dps: 38611.62924 + tps: 22786.48752 } } dps_results: { key: "TestDestruction-AllItems-Sorrowsong-55879" value: { - dps: 39139.58219 - tps: 23106.95308 + dps: 39186.58774 + tps: 23127.30652 } } dps_results: { key: "TestDestruction-AllItems-Sorrowsong-56400" value: { - dps: 39284.49078 - tps: 23191.55914 + dps: 39331.98795 + tps: 23212.15901 } } dps_results: { key: "TestDestruction-AllItems-Soul'sAnguish-66994" value: { - dps: 38029.39979 - tps: 22472.19964 + dps: 38056.96068 + tps: 22480.12565 } } dps_results: { key: "TestDestruction-AllItems-SoulCasket-58183" value: { - dps: 39872.67272 - tps: 23446.29601 + dps: 39914.136 + tps: 23462.98844 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77206" value: { - dps: 39157.39888 - tps: 23139.71223 + dps: 39203.57756 + tps: 23157.20078 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77970" value: { - dps: 38995.63419 - tps: 23048.2664 + dps: 39044.38839 + tps: 23068.14187 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77990" value: { - dps: 39257.56527 - tps: 23207.24253 + dps: 39302.06315 + tps: 23225.11304 } } dps_results: { key: "TestDestruction-AllItems-SpidersilkSpindle-68981" value: { - dps: 38628.97983 - tps: 22832.34532 + dps: 38672.76113 + tps: 22850.72203 } } dps_results: { key: "TestDestruction-AllItems-SpidersilkSpindle-69138" value: { - dps: 38705.56894 - tps: 22880.06642 + dps: 38749.41143 + tps: 22898.4262 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77202" value: { - dps: 39258.56132 - tps: 23138.34595 + dps: 39259.08482 + tps: 23127.76852 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77973" value: { - dps: 39185.48013 - tps: 23223.82012 + dps: 39198.39525 + tps: 23226.67518 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77993" value: { - dps: 39629.30677 - tps: 23552.82373 + dps: 39634.00527 + tps: 23556.80857 } } dps_results: { key: "TestDestruction-AllItems-StayofExecution-68996" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-Stonemother'sKiss-61411" value: { - dps: 39095.7533 - tps: 23060.95284 + dps: 39134.10005 + tps: 23078.27617 } } dps_results: { key: "TestDestruction-AllItems-StumpofTime-62465" value: { - dps: 39210.54823 - tps: 23128.14914 + dps: 39250.63373 + tps: 23142.71454 } } dps_results: { key: "TestDestruction-AllItems-StumpofTime-62470" value: { - dps: 39255.6866 - tps: 23130.32036 + dps: 39296.31281 + tps: 23146.77875 } } dps_results: { key: "TestDestruction-AllItems-SymbioticWorm-59332" value: { - dps: 38033.90166 - tps: 22460.52451 + dps: 38075.43545 + tps: 22474.04908 } } dps_results: { key: "TestDestruction-AllItems-SymbioticWorm-65048" value: { - dps: 38033.90166 - tps: 22460.59286 + dps: 38075.43545 + tps: 22474.11743 } } dps_results: { key: "TestDestruction-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 39211.8546 - tps: 23147.70937 + dps: 39257.7388 + tps: 23163.61869 } } dps_results: { key: "TestDestruction-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-TearofBlood-55819" value: { - dps: 38800.99668 - tps: 22896.78222 + dps: 38842.01459 + tps: 22912.72369 } } dps_results: { key: "TestDestruction-AllItems-TearofBlood-56351" value: { - dps: 39022.50025 - tps: 23042.31802 + dps: 39067.25557 + tps: 23060.57103 } } dps_results: { key: "TestDestruction-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 39093.32174 - tps: 23076.37634 + dps: 39141.07566 + tps: 23097.39792 } } dps_results: { key: "TestDestruction-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 39457.97503 - tps: 23275.50252 + dps: 39506.74886 + tps: 23296.8339 } } dps_results: { key: "TestDestruction-AllItems-TheHungerer-68927" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-TheHungerer-69112" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Theralion'sMirror-59519" value: { - dps: 39828.06899 - tps: 23533.08179 + dps: 39871.76622 + tps: 23548.78143 } } dps_results: { key: "TestDestruction-AllItems-Theralion'sMirror-65105" value: { - dps: 40073.04459 - tps: 23675.72044 + dps: 40119.43537 + tps: 23693.60933 } } dps_results: { key: "TestDestruction-AllItems-Throngus'sFinger-56121" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Throngus'sFinger-56449" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Tia'sGrace-55874" value: { - dps: 38428.31636 - tps: 22707.31604 + dps: 38471.93734 + tps: 22725.73711 } } dps_results: { key: "TestDestruction-AllItems-Tia'sGrace-56394" value: { - dps: 38478.86518 - tps: 22738.81197 + dps: 38522.52654 + tps: 22757.22186 } } dps_results: { key: "TestDestruction-AllItems-TinyAbominationinaJar-50706" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 39040.26565 - tps: 23206.1395 + dps: 39077.7311 + tps: 23221.3099 } } dps_results: { key: "TestDestruction-AllItems-UnheededWarning-59520" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-UnquenchableFlame-67101" value: { - dps: 37994.36195 - tps: 22426.48809 + dps: 38030.3369 + tps: 22440.31337 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-62463" value: { - dps: 38485.87407 - tps: 22732.30156 + dps: 38522.13157 + tps: 22745.9571 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-62468" value: { - dps: 38485.87407 - tps: 22732.30156 + dps: 38522.13157 + tps: 22745.9571 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-68709" value: { - dps: 38485.87407 - tps: 22732.30156 + dps: 38522.13157 + tps: 22745.9571 } } dps_results: { key: "TestDestruction-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 39553.06607 - tps: 23372.00576 + dps: 39617.54961 + tps: 23403.77588 } } dps_results: { key: "TestDestruction-AllItems-Varo'then'sBrooch-72899" value: { - dps: 38441.18138 - tps: 22713.39458 + dps: 38482.50461 + tps: 22730.80173 } } dps_results: { key: "TestDestruction-AllItems-VeilofLies-72900" value: { - dps: 38020.02309 - tps: 22454.39605 + dps: 38060.75232 + tps: 22469.9597 } } dps_results: { key: "TestDestruction-AllItems-VesselofAcceleration-68995" value: { - dps: 38142.62039 - tps: 22506.42476 + dps: 38192.15127 + tps: 22532.6996 } } dps_results: { key: "TestDestruction-AllItems-VesselofAcceleration-69167" value: { - dps: 38144.84803 - tps: 22518.4744 + dps: 38192.97677 + tps: 22543.54291 } } dps_results: { key: "TestDestruction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 35497.41631 - tps: 20804.38168 + dps: 34450.35641 + tps: 20556.22987 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77207" value: { - dps: 38208.49533 - tps: 22636.28899 + dps: 38251.88031 + tps: 22654.84885 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77979" value: { - dps: 38191.92852 - tps: 22620.10526 + dps: 38234.9938 + tps: 22638.41666 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77999" value: { - dps: 38216.14322 - tps: 22641.56735 + dps: 38259.53897 + tps: 22660.20697 } } dps_results: { key: "TestDestruction-AllItems-VialofStolenMemories-59515" value: { - dps: 38033.90166 - tps: 22460.52451 + dps: 38075.43545 + tps: 22474.04908 } } dps_results: { key: "TestDestruction-AllItems-VialofStolenMemories-65109" value: { - dps: 38033.90166 - tps: 22460.59286 + dps: 38075.43545 + tps: 22474.11743 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 39134.74259 - tps: 23012.50563 + dps: 39174.99192 + tps: 23028.83155 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 39269.0304 - tps: 23081.50569 + dps: 39309.78307 + tps: 23098.12607 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 37994.36195 - tps: 22426.55276 + dps: 38030.3369 + tps: 22440.37804 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 38042.30725 - tps: 22467.28758 + dps: 38085.61982 + tps: 22485.79398 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 38540.99733 - tps: 22710.34268 + dps: 38516.05541 + tps: 22688.72826 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 38622.8216 - tps: 22841.16984 + dps: 38667.43334 + tps: 22862.10971 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 38042.30725 - tps: 22467.28758 + dps: 38085.61982 + tps: 22485.79398 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 38563.1132 - tps: 22791.79106 + dps: 38606.84187 + tps: 22810.18232 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 38042.30725 - tps: 22467.28758 + dps: 38085.61982 + tps: 22485.79398 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 39055.65618 - tps: 23017.03929 + dps: 39097.26587 + tps: 23034.56211 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 39169.3674 - tps: 23093.8671 + dps: 39214.44538 + tps: 23114.21028 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77198" value: { - dps: 41151.68444 - tps: 24360.63569 + dps: 41193.06932 + tps: 24378.59446 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77975" value: { - dps: 40766.84464 - tps: 24118.99253 + dps: 40808.03319 + tps: 24134.34767 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77995" value: { - dps: 41539.43331 - tps: 24575.54107 + dps: 41579.96031 + tps: 24589.65303 } } dps_results: { key: "TestDestruction-AllItems-WitchingHourglass-55787" value: { - dps: 39338.32715 - tps: 23345.2139 + dps: 39323.55037 + tps: 23310.88508 } } dps_results: { key: "TestDestruction-AllItems-WitchingHourglass-56320" value: { - dps: 39795.72593 - tps: 23655.79378 + dps: 39814.50066 + tps: 23657.16439 } } dps_results: { key: "TestDestruction-AllItems-World-QuellerFocus-63842" value: { - dps: 38329.69265 - tps: 22635.14774 + dps: 38365.86036 + tps: 22648.85721 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77197" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77974" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77994" value: { - dps: 38042.30725 - tps: 22466.8017 + dps: 38085.61982 + tps: 22485.3081 } } dps_results: { key: "TestDestruction-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 38412.97848 - tps: 22702.72981 + dps: 38442.03304 + tps: 22711.61707 } } dps_results: { key: "TestDestruction-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 38412.97848 - tps: 22702.72981 + dps: 38442.03304 + tps: 22711.61707 } } dps_results: { key: "TestDestruction-Average-Default" value: { - dps: 41082.55381 - tps: 24262.44965 + dps: 41102.15307 + tps: 24277.07322 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 41864.92935 - tps: 42105.90851 + dps: 41887.3292 + tps: 42108.95123 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40031.20265 - tps: 23943.78893 + dps: 40065.49562 + tps: 23957.85969 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50419.71466 - tps: 28741.59809 + dps: 50358.54631 + tps: 28699.45202 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26214.48301 - tps: 30138.44154 + dps: 26173.10496 + tps: 30095.59884 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26214.48301 - tps: 15626.42597 + dps: 26173.10496 + tps: 15583.58327 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29047.15886 - tps: 16008.59796 + dps: 28974.89075 + tps: 15957.0562 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 41787.23971 - tps: 41991.24163 + dps: 41818.04028 + tps: 41998.19953 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39785.19165 - tps: 23771.24223 + dps: 39813.38849 + tps: 23775.52685 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50507.4534 - tps: 28586.63525 + dps: 50436.44479 + tps: 28536.55978 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26034.19234 - tps: 29782.97466 + dps: 26012.10024 + tps: 29766.97557 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26034.19234 - tps: 15405.86088 + dps: 26012.10024 + tps: 15389.86179 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28756.09889 - tps: 15763.87397 + dps: 28670.93254 + tps: 15690.18888 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 42439.69792 - tps: 42147.27435 + dps: 42470.34518 + tps: 42153.87461 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40439.94755 - tps: 23933.1579 + dps: 40467.75777 + tps: 23936.89419 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51796.63467 - tps: 28910.28009 + dps: 51721.83932 + tps: 28857.25364 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26498.86624 - tps: 30001.32797 + dps: 26480.62764 + tps: 29988.61876 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26498.86624 - tps: 15517.57679 + dps: 26480.62764 + tps: 15504.86759 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29568.80944 - tps: 15934.33507 + dps: 29484.16735 + tps: 15860.80471 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 42134.2922 - tps: 42384.79575 + dps: 42137.60147 + tps: 42416.05572 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40367.40146 - tps: 24190.57611 + dps: 40338.34307 + tps: 24187.62802 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52013.38851 - tps: 29526.12647 + dps: 51952.29594 + tps: 29501.14827 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26287.98385 - tps: 30183.70785 + dps: 26245.98067 + tps: 30151.10363 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26287.98385 - tps: 15616.17596 + dps: 26245.98067 + tps: 15583.57174 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29630.53286 - tps: 16430.73634 + dps: 29558.53842 + tps: 16379.02713 } } dps_results: { key: "TestDestruction-SwitchInFrontOfTarget-Default" value: { - dps: 40430.22634 - tps: 23933.1579 + dps: 40458.03657 + tps: 23936.89419 } } diff --git a/sim/warlock/items.go b/sim/warlock/items.go index a0c5f88649..700e02fd2f 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -232,6 +232,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ TimeValue: -time.Minute * 4, ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, }) + setBonusAura.AttachBooleanToggle(warlock.Has2pcT13) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() @@ -259,17 +260,14 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ } }, })) + + setBonusAura.AttachBooleanToggle(warlock.Has4pcT13) }, }, }) -func (warlock *Warlock) has4pcT13() bool { - return warlock.HasActiveSetBonus(ItemSetVestmentsOfTheFacelessShroud.Name, 4) -} - func (warlock *Warlock) Calc2PT13SummonDuration() int32 { - has2PT13 := warlock.HasActiveSetBonus(ItemSetVestmentsOfTheFacelessShroud.Name, 2) - if has2PT13 { + if warlock.Has2pcT13 { return core.TernaryInt32(warlock.Spec == proto.Spec_SpecDemonologyWarlock, 20, 30) } else { return 0 diff --git a/sim/warlock/soul_fire.go b/sim/warlock/soul_fire.go index 93c54e57d3..61fd37bb1f 100644 --- a/sim/warlock/soul_fire.go +++ b/sim/warlock/soul_fire.go @@ -56,7 +56,7 @@ func (warlock *Warlock) registerSoulFire() { baseDamage := warlock.CalcAndRollDamageRange(sim, 2.54299998283, 0.22499999404) result := spell.CalcDamage(sim, target, baseDamage, spell.OutcomeMagicHitAndCrit) - if warlock.has4pcT13() && warlock.SoulBurnAura.IsActive() { + if warlock.Has4pcT13 && warlock.SoulBurnAura.IsActive() { warlock.AddSoulShard() } diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index b41e04bfdc..c86879938a 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -39,6 +39,10 @@ type Warlock struct { SoulShards int32 SoulBurnAura *core.Aura + + // Item sets + Has4pcT13 bool + Has2pcT13 bool } func (warlock *Warlock) GetCharacter() *core.Character { From 1b365160b981109bc65fc7d950ce92dda1055f9e Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 20 Dec 2024 23:25:53 +0100 Subject: [PATCH 050/127] WIP - set bonus aura update --- sim/core/item_sets.go | 15 - sim/death_knight/items.go | 21 +- sim/druid/items.go | 22 +- sim/hunter/beast_mastery/TestBM.results | 12 +- sim/hunter/cata_items.go | 8 +- sim/hunter/marksmanship/TestMM.results | 16 +- sim/hunter/survival/TestSV.results | 1328 +++++++-------- sim/mage/items.go | 7 +- sim/paladin/items.go | 8 +- .../retribution/TestRetribution.results | 76 +- sim/rogue/items.go | 7 +- sim/shaman/elemental/TestElemental.results | 7 + .../enhancement/TestEnhancement.results | 1267 +++++++------- sim/shaman/items.go | 21 +- sim/warlock/affliction/TestAffliction.results | 1198 ++++++------- sim/warlock/demonology/TestDemonology.results | 1486 ++++++++--------- .../destruction/TestDestruction.results | 1198 ++++++------- sim/warlock/items.go | 54 +- 18 files changed, 3412 insertions(+), 3339 deletions(-) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 173420fa4a..bd1b554f8b 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -294,18 +294,3 @@ func (setBonusTracker *Aura) AttachStatBuff(stat stats.Stat, value float64) { statsToAdd[stat] = value setBonusTracker.AttachStatsBuff(statsToAdd) } - -// Attaches a Boolean to the set bonus -func (setBonusTracker *Aura) AttachBooleanToggle(toggleArg bool) { - setBonusTracker.ApplyOnGain(func(aura *Aura, sim *Simulation) { - toggleArg = true - }) - - setBonusTracker.ApplyOnExpire(func(aura *Aura, sim *Simulation) { - toggleArg = false - }) - - if setBonusTracker.IsActive() { - toggleArg = true - } -} diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index 23d76c5dbe..bca7138a60 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -237,7 +237,12 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.AttachBooleanToggle(dk.HasT12Tank4pc) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT12Tank4pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT12Tank4pc = false + }) }, }, }) @@ -250,14 +255,24 @@ var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.AttachBooleanToggle(dk.HasT13Dps2pc) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT13Dps2pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT13Dps2pc = false + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. // Spell: Runic Mastery (id: 105647) // Handled in talents_unholy.go:applyRunicEmpowerementCorruption() dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.AttachBooleanToggle(dk.HasT13Dps4pc) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT13Dps4pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + dk.HasT13Dps4pc = false + }) }, }, }) diff --git a/sim/druid/items.go b/sim/druid/items.go index facdfbb584..cbad5b7953 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -15,7 +15,12 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in rake.go and lacerate.go druid := agent.(DruidAgent).GetDruid() - setBonusAura.AttachBooleanToggle(druid.HasT11Feral2pBonus) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT11Feral2pBonus = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT11Feral2pBonus = false + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() @@ -42,7 +47,12 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.AttachBooleanToggle(druid.HasT11Feral4pBonus) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT11Feral4pBonus = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT11Feral4pBonus = false + }) }, }, }) @@ -135,6 +145,13 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ // Full implementation in berserk.go and barkskin.go druid := agent.(DruidAgent).GetDruid() + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT12Feral4pBonus = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + druid.HasT12Feral4pBonus = false + }) + if !druid.InForm(Bear) { return } @@ -152,7 +169,6 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ druid.PseudoStats.BaseDodgeChance -= 0.1 }, }) - setBonusAura.AttachBooleanToggle(druid.HasT12Feral4pBonus) }, }, }) diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index cf69f34b53..4b16c46d0b 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -52,8 +52,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 21867.14021 - tps: 14079.13569 + dps: 21498.78092 + tps: 13858.47028 } } dps_results: { @@ -641,8 +641,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Flamewaker'sBattlegear" value: { - dps: 26321.21677 - tps: 16578.24976 + dps: 26276.80777 + tps: 16480.95918 } } dps_results: { @@ -1061,8 +1061,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Lightning-ChargedBattlegear" value: { - dps: 24565.79227 - tps: 15458.02105 + dps: 25159.77352 + tps: 16110.14663 } } dps_results: { diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index db9afb35f0..978018eb48 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -114,7 +114,13 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ FloatValue: 0.1, ClassMask: HunterSpellSteadyShot, }) - setBonusAura.AttachBooleanToggle(hunter.Has2pcT13) + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + hunter.Has2pcT13 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + hunter.Has2pcT13 = false + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index 5fc4ea4fe9..976e9314b1 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -52,8 +52,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 20508.13111 - tps: 18476.67766 + dps: 20290.45794 + tps: 18285.35959 } } dps_results: { @@ -641,8 +641,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-Flamewaker'sBattlegear" value: { - dps: 24941.63332 - tps: 22473.27177 + dps: 24985.6938 + tps: 22493.28679 } } dps_results: { @@ -1061,8 +1061,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-Lightning-ChargedBattlegear" value: { - dps: 23388.24481 - tps: 21100.25418 + dps: 22739.57703 + tps: 20442.36869 } } dps_results: { @@ -2158,8 +2158,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-WyrmstalkerBattlegear" value: { - dps: 24191.33598 - tps: 21766.91344 + dps: 24506.21055 + tps: 22081.788 } } dps_results: { diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 2cf33f5c9d..8f9a292768 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -38,653 +38,653 @@ character_stats_results: { dps_results: { key: "TestSV-AllItems-AgileShadowspiritDiamond" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-AllItems-AgonyandTorment" value: { - dps: 28835.22024 - tps: 26056.09185 + dps: 29812.78554 + tps: 27030.37542 } } dps_results: { key: "TestSV-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 24218.5404 - tps: 21857.56471 + dps: 23912.27406 + tps: 21587.67586 } } dps_results: { key: "TestSV-AllItems-Althor'sAbacus-50366" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Anhuur'sHymnal-55889" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Anhuur'sHymnal-56407" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 28322.91589 - tps: 25596.91293 + dps: 29289.2474 + tps: 26570.36339 } } dps_results: { key: "TestSV-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 28324.75938 - tps: 25598.49443 + dps: 29292.43247 + tps: 26573.54846 } } dps_results: { key: "TestSV-AllItems-ArrowofTime-72897" value: { - dps: 30402.09306 - tps: 27516.24191 + dps: 31107.66898 + tps: 28205.67165 } } dps_results: { key: "TestSV-AllItems-AustereShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-BaubleofTrueBlood-50726" value: { - dps: 28306.55768 - tps: 25582.83366 - hps: 96.72062 + dps: 29271.48671 + tps: 26554.06532 + hps: 96.48307 } } dps_results: { key: "TestSV-AllItems-BedrockTalisman-58182" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BellofEnragingResonance-59326" value: { - dps: 28702.3661 - tps: 25939.89014 + dps: 29688.86932 + tps: 26941.85166 } } dps_results: { key: "TestSV-AllItems-BellofEnragingResonance-65053" value: { - dps: 28753.96771 - tps: 25987.60202 + dps: 29747.17299 + tps: 26996.20844 } } dps_results: { key: "TestSV-AllItems-BindingPromise-67037" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BlackBruise-50692" value: { - dps: 27833.78553 - tps: 25158.25894 + dps: 28750.84411 + tps: 26083.60861 } } dps_results: { key: "TestSV-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 29224.08843 - tps: 26430.43225 + dps: 30219.86513 + tps: 27439.85662 } } dps_results: { key: "TestSV-AllItems-BloodofIsiset-55995" value: { - dps: 28563.57749 - tps: 25839.0001 + dps: 29539.2853 + tps: 26821.46684 } } dps_results: { key: "TestSV-AllItems-BloodofIsiset-56414" value: { - dps: 28597.39879 - tps: 25872.76129 + dps: 29574.43031 + tps: 26856.5517 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 29553.24685 - tps: 26703.90739 + dps: 30545.15966 + tps: 27699.54078 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 28681.81983 - tps: 25921.36928 + dps: 29659.53087 + tps: 26914.79531 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 29581.0567 - tps: 26718.87229 + dps: 30564.96312 + tps: 27712.64271 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-77210" value: { - dps: 29285.81727 - tps: 26568.26497 + dps: 30122.37199 + tps: 27427.00236 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-77982" value: { - dps: 29159.60099 - tps: 26440.32064 + dps: 30044.73603 + tps: 27344.3701 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-78002" value: { - dps: 29379.34984 - tps: 26661.08529 + dps: 30270.19217 + tps: 27568.19726 } } dps_results: { key: "TestSV-AllItems-BottledLightning-66879" value: { - dps: 28415.13542 - tps: 25681.86136 + dps: 29409.06857 + tps: 26680.81566 } } dps_results: { key: "TestSV-AllItems-BottledWishes-77114" value: { - dps: 28865.91307 - tps: 26103.80521 + dps: 29671.53341 + tps: 26899.3939 } } dps_results: { key: "TestSV-AllItems-BracingShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 25936.94658 + dps: 30341.39417 + tps: 26916.77381 } } dps_results: { key: "TestSV-AllItems-Brawler'sTrophy-232015" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 30154.79748 - tps: 27238.14381 + dps: 31175.85667 + tps: 28278.09077 } } dps_results: { key: "TestSV-AllItems-BurningShadowspiritDiamond" value: { - dps: 29959.78982 - tps: 27064.62497 + dps: 30957.31926 + tps: 28080.62411 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 30199.32497 - tps: 27295.1034 + dps: 31230.06246 + tps: 28341.18126 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 30320.03489 - tps: 27381.14582 + dps: 31301.99311 + tps: 28377.50416 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 30018.73895 - tps: 27117.64611 + dps: 31043.58113 + tps: 28160.22959 } } dps_results: { key: "TestSV-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 29260.35449 - tps: 26437.57015 + dps: 30257.77809 + tps: 27452.43053 } } dps_results: { key: "TestSV-AllItems-CoreofRipeness-58184" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-CorpseTongueCoin-50349" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 29141.55204 - tps: 26332.99428 + dps: 30105.71396 + tps: 27306.53078 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 29089.18228 - tps: 26282.84702 + dps: 30029.30663 + tps: 27234.69438 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 29239.47487 - tps: 26415.56204 + dps: 30231.37266 + tps: 27425.28023 } } dps_results: { key: "TestSV-AllItems-CrushingWeight-59506" value: { - dps: 28304.10872 - tps: 25585.94077 + dps: 29316.5092 + tps: 26596.90315 } } dps_results: { key: "TestSV-AllItems-CrushingWeight-65118" value: { - dps: 28273.71284 - tps: 25549.87055 + dps: 29258.58745 + tps: 26546.69003 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-77208" value: { - dps: 28769.68268 - tps: 26045.83716 + dps: 29736.71468 + tps: 27019.56076 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-77980" value: { - dps: 28698.75125 - tps: 25975.05209 + dps: 29662.82295 + tps: 26945.42301 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-78000" value: { - dps: 28829.69149 - tps: 26105.7891 + dps: 29789.87115 + tps: 27072.61001 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 28709.57414 - tps: 25997.83197 + dps: 29700.3612 + tps: 26982.62295 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 29908.15963 - tps: 27075.35281 + dps: 30931.26497 + tps: 28096.95553 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 28641.57175 - tps: 25917.17539 + dps: 29618.41869 + tps: 26900.22729 } } dps_results: { key: "TestSV-AllItems-Deathbringer'sWill-50363" value: { - dps: 29020.40565 - tps: 26217.0812 + dps: 30041.78055 + tps: 27253.05784 } } dps_results: { key: "TestSV-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 29415.26681 - tps: 26515.57067 + dps: 30422.41503 + tps: 27540.4602 } } dps_results: { key: "TestSV-AllItems-DislodgedForeignObject-50348" value: { - dps: 28395.16782 - tps: 25652.6573 + dps: 29380.28162 + tps: 26659.41529 } } dps_results: { key: "TestSV-AllItems-Dragonwrath,Tarecgosa'sRest-71086" value: { - dps: 30365.11524 - tps: 27438.7442 + dps: 31445.8873 + tps: 28520.26899 } } dps_results: { key: "TestSV-AllItems-Dwyer'sCaber-70141" value: { - dps: 28772.80458 - tps: 26005.40423 + dps: 29790.68362 + tps: 27026.97523 } } dps_results: { key: "TestSV-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-EmberShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 29415.26681 - tps: 26515.57067 + dps: 30422.41503 + tps: 27540.4602 } } dps_results: { key: "TestSV-AllItems-EssenceoftheCyclone-59473" value: { - dps: 29978.65625 - tps: 27084.5377 + dps: 31004.14077 + tps: 28119.75295 } } dps_results: { key: "TestSV-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 28697.83781 - tps: 25973.02179 + dps: 29678.80034 + tps: 26960.74311 } } dps_results: { key: "TestSV-AllItems-EternalShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77200" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77977" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77997" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-FallofMortality-59500" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-FallofMortality-65124" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-FieryQuintessence-69000" value: { - dps: 28318.00484 - tps: 25595.66057 + dps: 29274.86108 + tps: 26557.47601 } } dps_results: { key: "TestSV-AllItems-Figurine-DemonPanther-52199" value: { - dps: 29413.73412 - tps: 26588.21254 + dps: 30423.9358 + tps: 27608.28962 } } dps_results: { key: "TestSV-AllItems-Figurine-DreamOwl-52354" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Figurine-KingofBoars-52351" value: { - dps: 28597.39879 - tps: 25872.76129 + dps: 29574.43031 + tps: 26856.5517 } } dps_results: { key: "TestSV-AllItems-FireoftheDeep-77117" value: { - dps: 28774.70441 - tps: 26049.75177 + dps: 29758.67536 + tps: 27040.48142 } } dps_results: { key: "TestSV-AllItems-Flamewaker'sBattlegear" value: { - dps: 29262.74951 - tps: 26380.52812 + dps: 29238.1739 + tps: 26356.46183 } } dps_results: { key: "TestSV-AllItems-FleetShadowspiritDiamond" value: { - dps: 29417.33007 - tps: 26523.45973 + dps: 30400.85265 + tps: 27525.45194 } } dps_results: { key: "TestSV-AllItems-FluidDeath-58181" value: { - dps: 29710.62469 - tps: 26841.24587 + dps: 30717.14436 + tps: 27862.80998 } } dps_results: { key: "TestSV-AllItems-ForlornShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 28704.9107 - tps: 25980.1779 + dps: 29679.00809 + tps: 26961.03449 } } dps_results: { key: "TestSV-AllItems-FuryofAngerforge-59461" value: { - dps: 28702.3661 - tps: 25939.89014 + dps: 29688.86932 + tps: 26941.85166 } } dps_results: { key: "TestSV-AllItems-GaleofShadows-56138" value: { - dps: 28584.54849 - tps: 25836.86087 + dps: 29492.3533 + tps: 26773.72271 } } dps_results: { key: "TestSV-AllItems-GaleofShadows-56462" value: { - dps: 28581.80224 - tps: 25838.76645 + dps: 29536.3307 + tps: 26791.301 } } dps_results: { key: "TestSV-AllItems-GearDetector-61462" value: { - dps: 29101.22617 - tps: 26298.05634 + dps: 30175.93643 + tps: 27382.97355 } } dps_results: { @@ -697,1462 +697,1462 @@ dps_results: { dps_results: { key: "TestSV-AllItems-GlowingTwilightScale-54589" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-GraceoftheHerald-55266" value: { - dps: 29165.98924 - tps: 26347.32033 + dps: 30190.14689 + tps: 27386.59892 } } dps_results: { key: "TestSV-AllItems-GraceoftheHerald-56295" value: { - dps: 29619.87604 - tps: 26753.02205 + dps: 30619.63674 + tps: 27775.13573 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-77191" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-78478" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-78487" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-AllItems-HarmlightToken-63839" value: { - dps: 28313.04931 - tps: 25589.05086 + dps: 29278.27154 + tps: 26560.93611 } } dps_results: { key: "TestSV-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 28319.22873 - tps: 25595.1104 + dps: 29285.32762 + tps: 26567.96849 } } dps_results: { key: "TestSV-AllItems-HeartofIgnacious-59514" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartofIgnacious-65110" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartofRage-59224" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartofRage-65072" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartofSolace-55868" value: { - dps: 28584.54849 - tps: 25836.86087 + dps: 29492.3533 + tps: 26773.72271 } } dps_results: { key: "TestSV-AllItems-HeartofSolace-56393" value: { - dps: 28581.80224 - tps: 25838.76645 + dps: 29536.3307 + tps: 26791.301 } } dps_results: { key: "TestSV-AllItems-HeartofThunder-55845" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartofThunder-56370" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-HeartoftheVile-66969" value: { - dps: 29312.51228 - tps: 26480.92632 + dps: 30303.02896 + tps: 27489.48029 } } dps_results: { key: "TestSV-AllItems-Heartpierce-50641" value: { - dps: 30346.72189 - tps: 27412.87496 + dps: 31379.75039 + tps: 28464.16888 } } dps_results: { key: "TestSV-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 29415.26681 - tps: 26515.57067 + dps: 30422.41503 + tps: 27540.4602 } } dps_results: { key: "TestSV-AllItems-ImpatienceofYouth-62464" value: { - dps: 28634.29476 - tps: 25909.59168 + dps: 29612.77032 + tps: 26894.8261 } } dps_results: { key: "TestSV-AllItems-ImpatienceofYouth-62469" value: { - dps: 28634.29476 - tps: 25909.59168 + dps: 29612.77032 + tps: 26894.8261 } } dps_results: { key: "TestSV-AllItems-ImpetuousQuery-55881" value: { - dps: 28563.57749 - tps: 25839.0001 + dps: 29539.2853 + tps: 26821.46684 } } dps_results: { key: "TestSV-AllItems-ImpetuousQuery-56406" value: { - dps: 28597.39879 - tps: 25872.76129 + dps: 29574.43031 + tps: 26856.5517 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-77211" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-77983" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-78003" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 28871.86909 - tps: 26069.67759 + dps: 29873.43495 + tps: 27077.47997 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 28816.97919 - tps: 26015.38613 + dps: 29707.35886 + tps: 26925.2855 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 28906.58349 - tps: 26092.18077 + dps: 29944.41829 + tps: 27156.58056 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 28499.15307 - tps: 25775.73797 + dps: 29478.58702 + tps: 26760.92283 } } dps_results: { key: "TestSV-AllItems-JarofAncientRemedies-59354" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-JarofAncientRemedies-65029" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-JawsofDefeat-68926" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-JawsofDefeat-69111" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-JujuofNimbleness-63840" value: { - dps: 29224.08843 - tps: 26430.43225 + dps: 30219.86513 + tps: 27439.85662 } } dps_results: { key: "TestSV-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 29350.06628 - tps: 26508.80906 + dps: 30352.02405 + tps: 27521.97066 } } dps_results: { key: "TestSV-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 29703.36788 - tps: 26833.15525 + dps: 30677.52457 + tps: 27823.45957 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-77194" value: { - dps: 33241.10979 - tps: 30007.01631 + dps: 34357.01742 + tps: 31139.62569 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-78473" value: { - dps: 33666.37148 - tps: 30392.07299 + dps: 34860.88879 + tps: 31597.90331 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-78482" value: { - dps: 32870.75649 - tps: 29670.59109 + dps: 34012.19242 + tps: 30830.96664 } } dps_results: { key: "TestSV-AllItems-KiroptyricSigil-77113" value: { - dps: 30480.12786 - tps: 27555.30988 + dps: 31286.65447 + tps: 28356.93016 } } dps_results: { key: "TestSV-AllItems-KvaldirBattleStandard-59685" value: { - dps: 28436.38743 - tps: 25699.37024 + dps: 29380.46716 + tps: 26657.61394 } } dps_results: { key: "TestSV-AllItems-KvaldirBattleStandard-59689" value: { - dps: 28436.38743 - tps: 25699.37024 + dps: 29380.46716 + tps: 26657.61394 } } dps_results: { key: "TestSV-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 28459.58999 - tps: 25727.69956 + dps: 29410.99153 + tps: 26693.04461 } } dps_results: { key: "TestSV-AllItems-LastWord-50708" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-AllItems-LeadenDespair-55816" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-LeadenDespair-56347" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-LeftEyeofRajh-56102" value: { - dps: 29457.9312 - tps: 26620.01272 + dps: 30462.18961 + tps: 27635.48787 } } dps_results: { key: "TestSV-AllItems-LeftEyeofRajh-56427" value: { - dps: 29627.8641 - tps: 26773.95068 + dps: 30630.58187 + tps: 27789.16081 } } dps_results: { key: "TestSV-AllItems-LicensetoSlay-58180" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Lightning-ChargedBattlegear" value: { - dps: 27514.02006 - tps: 24843.79048 + dps: 28429.18648 + tps: 25756.14158 } } dps_results: { key: "TestSV-AllItems-MagnetiteMirror-55814" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-MagnetiteMirror-56345" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-MarkofKhardros-56132" value: { - dps: 28510.82908 - tps: 25787.76737 + dps: 29489.19341 + tps: 26771.88283 } } dps_results: { key: "TestSV-AllItems-MarkofKhardros-56458" value: { - dps: 28538.38969 - tps: 25815.32798 + dps: 29517.64386 + tps: 26800.33327 } } dps_results: { key: "TestSV-AllItems-MatrixRestabilizer-68994" value: { - dps: 30509.6427 - tps: 27559.37757 + dps: 31534.90005 + tps: 28600.21384 } } dps_results: { key: "TestSV-AllItems-MatrixRestabilizer-69150" value: { - dps: 30818.85674 - tps: 27830.35759 + dps: 31869.57547 + tps: 28905.16216 } } dps_results: { key: "TestSV-AllItems-MightoftheOcean-55251" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-MightoftheOcean-56285" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-MirrorofBrokenImages-62466" value: { - dps: 28634.29476 - tps: 25909.59168 + dps: 29612.77032 + tps: 26894.8261 } } dps_results: { key: "TestSV-AllItems-MirrorofBrokenImages-62471" value: { - dps: 28634.29476 - tps: 25909.59168 + dps: 29612.77032 + tps: 26894.8261 } } dps_results: { key: "TestSV-AllItems-MithrilStopwatch-232013" value: { - dps: 28683.89677 - tps: 25922.89598 + dps: 29666.50026 + tps: 26921.2346 } } dps_results: { key: "TestSV-AllItems-MoonwellChalice-70142" value: { - dps: 28636.92118 - tps: 25912.80285 + dps: 29612.54682 + tps: 26895.18768 } } dps_results: { key: "TestSV-AllItems-MoonwellPhial-70143" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-NecromanticFocus-68982" value: { - dps: 28338.40716 - tps: 25614.28883 + dps: 29304.84898 + tps: 26587.48984 } } dps_results: { key: "TestSV-AllItems-NecromanticFocus-69139" value: { - dps: 28342.65093 - tps: 25618.5326 + dps: 29309.20074 + tps: 26591.84161 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 31003.6762 - tps: 28004.56195 + dps: 32074.27933 + tps: 29090.81124 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 31115.18514 - tps: 28104.70029 + dps: 32186.14582 + tps: 29190.94086 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 30906.238 - tps: 27916.98643 + dps: 31963.48904 + tps: 28990.94773 } } dps_results: { key: "TestSV-AllItems-Oremantle'sFavor-61448" value: { - dps: 28540.12061 - tps: 25798.25506 + dps: 29526.22856 + tps: 26793.61305 } } dps_results: { key: "TestSV-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 28523.1142 - tps: 25774.3438 + dps: 29490.40596 + tps: 26757.38598 } } dps_results: { key: "TestSV-AllItems-PorcelainCrab-55237" value: { - dps: 28310.61276 - tps: 25586.49443 + dps: 29275.82812 + tps: 26558.46898 } } dps_results: { key: "TestSV-AllItems-PorcelainCrab-56280" value: { - dps: 28312.96319 - tps: 25588.84485 + dps: 29278.71214 + tps: 26561.35301 } } dps_results: { key: "TestSV-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 29360.04017 - tps: 26466.27203 + dps: 30341.39417 + tps: 27466.09572 } } dps_results: { key: "TestSV-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 29876.51293 - tps: 27017.5045 + dps: 30793.93697 + tps: 27924.65138 } } dps_results: { key: "TestSV-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 30163.63026 - tps: 27263.29629 + dps: 31032.10538 + tps: 28151.70667 } } dps_results: { key: "TestSV-AllItems-Rainsong-55854" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Rainsong-56377" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 27769.88327 - tps: 25103.09391 + dps: 28684.34446 + tps: 26025.83574 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 27773.0122 - tps: 25106.22284 + dps: 28687.52198 + tps: 26029.01326 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 27763.75617 - tps: 25096.96681 + dps: 28678.19746 + tps: 26019.68874 } } dps_results: { key: "TestSV-AllItems-ReflectionoftheLight-77115" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77201" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77978" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77998" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 29959.78982 - tps: 27064.62497 + dps: 30957.31926 + tps: 28080.62411 } } dps_results: { key: "TestSV-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 29959.78982 - tps: 27064.62497 + dps: 30957.31926 + tps: 28080.62411 } } dps_results: { key: "TestSV-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 30001.47059 - tps: 27109.55671 + dps: 31016.0082 + tps: 28145.33819 } } dps_results: { key: "TestSV-AllItems-RightEyeofRajh-56100" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RightEyeofRajh-56431" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RosaryofLight-72901" value: { - dps: 28848.04276 - tps: 26070.81448 + dps: 29842.30191 + tps: 27077.96594 } } dps_results: { key: "TestSV-AllItems-RottingSkull-77116" value: { - dps: 28860.00479 - tps: 26086.18605 + dps: 29862.84058 + tps: 27100.6459 } } dps_results: { key: "TestSV-AllItems-RuneofZeth-68998" value: { - dps: 28773.75286 - tps: 26006.09244 + dps: 29764.8374 + tps: 27012.70222 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 29876.2856 - tps: 27003.50482 + dps: 30914.39183 + tps: 28052.58882 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 29971.35863 - tps: 27089.78775 + dps: 31001.79269 + tps: 28131.15953 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 30032.418 - tps: 27124.92573 + dps: 31002.96325 + tps: 28106.59143 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 30083.31114 - tps: 27171.53697 + dps: 31085.94135 + tps: 28183.18907 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ScalesofLife-68915" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 hps: 315.97258 } } dps_results: { key: "TestSV-AllItems-ScalesofLife-69109" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 hps: 356.41412 } } dps_results: { key: "TestSV-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 29198.05468 - tps: 26378.84376 + dps: 30180.54016 + tps: 27377.4775 } } dps_results: { key: "TestSV-AllItems-SeaStar-55256" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-SeaStar-56290" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Shadowmourne-49623" value: { - dps: 30424.72738 - tps: 27516.72194 + dps: 31372.72937 + tps: 28459.42369 } } dps_results: { key: "TestSV-AllItems-ShardofWoe-60233" value: { - dps: 28688.47962 - tps: 25936.67983 + dps: 29552.12685 + tps: 26804.60548 } } dps_results: { key: "TestSV-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 28402.11479 - tps: 25675.11705 + dps: 29319.43655 + tps: 26595.34438 } } dps_results: { key: "TestSV-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Skardyn'sGrace-56115" value: { - dps: 29505.01712 - tps: 26679.40023 + dps: 30501.56423 + tps: 27691.96897 } } dps_results: { key: "TestSV-AllItems-Skardyn'sGrace-56440" value: { - dps: 29663.86275 - tps: 26826.56035 + dps: 30666.15471 + tps: 27843.85966 } } dps_results: { key: "TestSV-AllItems-Sorrowsong-55879" value: { - dps: 28563.57749 - tps: 25839.0001 + dps: 29539.2853 + tps: 26821.46684 } } dps_results: { key: "TestSV-AllItems-Sorrowsong-56400" value: { - dps: 28597.39879 - tps: 25872.76129 + dps: 29574.43031 + tps: 26856.5517 } } dps_results: { key: "TestSV-AllItems-Soul'sAnguish-66994" value: { - dps: 28300.36622 - tps: 25577.30451 + dps: 29271.93544 + tps: 26554.62486 } } dps_results: { key: "TestSV-AllItems-SoulCasket-58183" value: { - dps: 28634.29476 - tps: 25909.59168 + dps: 29612.77032 + tps: 26894.8261 } } dps_results: { key: "TestSV-AllItems-Souldrinker-77193" value: { - dps: 30158.8669 - tps: 27242.29882 - hps: 9.33435 + dps: 31179.99017 + tps: 28282.39932 + hps: 9.36496 } } dps_results: { key: "TestSV-AllItems-Souldrinker-78479" value: { - dps: 30159.5138 - tps: 27242.94572 - hps: 10.62815 + dps: 31180.63919 + tps: 28283.04834 + hps: 10.663 } } dps_results: { key: "TestSV-AllItems-Souldrinker-78488" value: { - dps: 30158.22758 - tps: 27241.6595 - hps: 8.05572 + dps: 31179.34876 + tps: 28281.75791 + hps: 8.08213 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77206" value: { - dps: 29029.74133 - tps: 26302.65572 + dps: 30007.55497 + tps: 27287.22856 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77970" value: { - dps: 28936.82273 - tps: 26210.66154 + dps: 29908.49784 + tps: 27189.08435 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77990" value: { - dps: 29117.57679 - tps: 26390.97788 + dps: 30072.28 + tps: 27352.44029 } } dps_results: { key: "TestSV-AllItems-SpidersilkSpindle-68981" value: { - dps: 28697.83781 - tps: 25973.02179 + dps: 29678.80034 + tps: 26960.74311 } } dps_results: { key: "TestSV-AllItems-SpidersilkSpindle-69138" value: { - dps: 28749.08221 - tps: 26024.17511 + dps: 29732.05035 + tps: 27013.90198 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77202" value: { - dps: 30561.80358 - tps: 27572.69261 + dps: 31616.48313 + tps: 28642.43429 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77973" value: { - dps: 30410.61364 - tps: 27473.29818 + dps: 31267.40842 + tps: 28300.1293 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77993" value: { - dps: 30831.63599 - tps: 27816.16829 + dps: 31809.93374 + tps: 28805.2962 } } dps_results: { key: "TestSV-AllItems-StayofExecution-68996" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Stonemother'sKiss-61411" value: { - dps: 28309.99263 - tps: 25585.09162 + dps: 29275.63846 + tps: 26557.23771 } } dps_results: { key: "TestSV-AllItems-StumpofTime-62465" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-StumpofTime-62470" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-SymbioticWorm-59332" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-SymbioticWorm-65048" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 28375.93424 - tps: 25651.60887 + dps: 29343.22386 + tps: 26625.65768 } } dps_results: { key: "TestSV-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 28331.9611 - tps: 25606.87903 + dps: 29331.85756 + tps: 26617.69536 } } dps_results: { key: "TestSV-AllItems-TearofBlood-55819" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-TearofBlood-56351" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 28525.65663 - tps: 25801.14665 + dps: 29499.88029 + tps: 26782.12927 } } dps_results: { key: "TestSV-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 28597.39879 - tps: 25872.76129 + dps: 29574.43031 + tps: 26856.5517 } } dps_results: { key: "TestSV-AllItems-TheHungerer-68927" value: { - dps: 30189.59537 - tps: 27278.59601 + dps: 31145.84666 + tps: 28247.32341 } } dps_results: { key: "TestSV-AllItems-TheHungerer-69112" value: { - dps: 30352.00078 - tps: 27408.44834 + dps: 31374.47783 + tps: 28439.17042 } } dps_results: { key: "TestSV-AllItems-Theralion'sMirror-59519" value: { - dps: 28315.31988 - tps: 25591.20155 + dps: 29280.66537 + tps: 26563.30624 } } dps_results: { key: "TestSV-AllItems-Theralion'sMirror-65105" value: { - dps: 28351.67423 - tps: 25626.96887 + dps: 29314.62967 + tps: 26596.69088 } } dps_results: { key: "TestSV-AllItems-Throngus'sFinger-56121" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Throngus'sFinger-56449" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 30154.33716 - tps: 27231.70781 + dps: 31208.30732 + tps: 28301.45491 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 30215.83992 - tps: 27312.71506 + dps: 31191.83587 + tps: 28306.73645 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 30204.15298 - tps: 27281.14733 + dps: 31137.77699 + tps: 28234.93874 } } dps_results: { key: "TestSV-AllItems-Tia'sGrace-55874" value: { - dps: 29679.22952 - tps: 26838.52456 + dps: 30686.51529 + tps: 27860.83358 } } dps_results: { key: "TestSV-AllItems-Tia'sGrace-56394" value: { - dps: 29867.47866 - tps: 27011.88092 + dps: 30874.67503 + tps: 28034.62297 } } dps_results: { key: "TestSV-AllItems-TinyAbominationinaJar-50706" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 27362.53441 - tps: 24745.98737 + dps: 28297.79706 + tps: 25678.50049 } } dps_results: { key: "TestSV-AllItems-UnheededWarning-59520" value: { - dps: 29539.9085 - tps: 26685.93632 + dps: 30533.7782 + tps: 27695.46498 } } dps_results: { key: "TestSV-AllItems-UnquenchableFlame-67101" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-62463" value: { - dps: 29898.34725 - tps: 27058.24358 + dps: 30928.39071 + tps: 28097.67745 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-62468" value: { - dps: 29898.34725 - tps: 27058.24358 + dps: 30928.39071 + tps: 28097.67745 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-68709" value: { - dps: 29898.34725 - tps: 27058.24358 + dps: 30928.39071 + tps: 28097.67745 } } dps_results: { key: "TestSV-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 27852.84883 - tps: 25178.52208 + dps: 28742.59179 + tps: 26078.31537 } } dps_results: { key: "TestSV-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 29125.99166 - tps: 26402.17247 + dps: 30085.1176 + tps: 27367.81075 } } dps_results: { key: "TestSV-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 29189.4749 - tps: 26465.56032 + dps: 30133.31074 + tps: 27415.77731 } } dps_results: { key: "TestSV-AllItems-Varo'then'sBrooch-72899" value: { - dps: 28780.89361 - tps: 26055.819 + dps: 29763.59679 + tps: 27045.28527 } } dps_results: { key: "TestSV-AllItems-VeilofLies-72900" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-VesselofAcceleration-68995" value: { - dps: 28312.94732 - tps: 25588.42308 + dps: 29277.64075 + tps: 26560.28161 } } dps_results: { key: "TestSV-AllItems-VesselofAcceleration-69167" value: { - dps: 28312.94732 - tps: 25588.42308 + dps: 29277.64075 + tps: 26560.28161 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77207" value: { - dps: 30564.4296 - tps: 27663.71075 + dps: 31690.64646 + tps: 28804.45839 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77979" value: { - dps: 30331.61925 - tps: 27458.66763 + dps: 31427.2185 + tps: 28584.07111 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77999" value: { - dps: 30860.46032 - tps: 27938.22588 + dps: 32067.76246 + tps: 29173.33498 } } dps_results: { key: "TestSV-AllItems-VialofStolenMemories-59515" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-VialofStolenMemories-65109" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 29554.97879 - tps: 26715.45987 + dps: 30571.72007 + tps: 27741.59191 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 29695.2103 - tps: 26842.44345 + dps: 30714.51807 + tps: 27871.06238 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 28652.09064 - tps: 25907.80435 + dps: 29625.16894 + tps: 26882.29841 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 28722.3443 - tps: 25958.40216 + dps: 29716.10537 + tps: 26967.37291 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 28653.76763 - tps: 25929.02994 + dps: 29633.00533 + tps: 26915.02647 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 29605.37221 - tps: 26743.6151 + dps: 30607.53825 + tps: 27754.72918 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 29778.78956 - tps: 26896.11589 + dps: 30806.54395 + tps: 27934.2194 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78359" value: { - dps: 31961.24572 - tps: 29091.69087 + dps: 33157.10267 + tps: 30301.06761 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78471" value: { - dps: 32769.39804 - tps: 29886.10854 + dps: 33933.12602 + tps: 31060.0891 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78480" value: { - dps: 31245.19457 - tps: 28374.67983 + dps: 32372.12362 + tps: 29518.47271 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77198" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77975" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77995" value: { - dps: 28305.30571 - tps: 25581.18738 + dps: 29270.90523 + tps: 26553.5461 } } dps_results: { key: "TestSV-AllItems-WitchingHourglass-55787" value: { - dps: 28303.0115 - tps: 25583.31902 + dps: 29290.14503 + tps: 26577.71339 } } dps_results: { key: "TestSV-AllItems-WitchingHourglass-56320" value: { - dps: 28281.35697 - tps: 25564.92651 + dps: 29251.80187 + tps: 26534.72403 } } dps_results: { key: "TestSV-AllItems-World-QuellerFocus-63842" value: { - dps: 28529.75618 - tps: 25805.23891 + dps: 29504.14029 + tps: 26786.38198 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77197" value: { - dps: 31569.02546 - tps: 28510.41345 + dps: 32664.71216 + tps: 29622.45307 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77974" value: { - dps: 31182.44157 - tps: 28159.8395 + dps: 32271.47452 + tps: 29265.03887 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77994" value: { - dps: 31968.81028 - tps: 28867.6497 + dps: 33100.88761 + tps: 30019.54842 } } dps_results: { @@ -2165,203 +2165,203 @@ dps_results: { dps_results: { key: "TestSV-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 28483.26847 - tps: 25760.20675 + dps: 29460.74296 + tps: 26743.43238 } } dps_results: { key: "TestSV-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 28483.26847 - tps: 25760.20675 + dps: 29460.74296 + tps: 26743.43238 } } dps_results: { key: "TestSV-AllItems-Zod'sRepeatingLongbow-50638" value: { - dps: 28103.43244 - tps: 25270.46923 + dps: 29149.77135 + tps: 26311.13073 } } dps_results: { key: "TestSV-Average-Default" value: { - dps: 30232.96594 - tps: 27346.88241 + dps: 31246.7667 + tps: 28368.69156 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 141350.48112 - tps: 114532.75506 + dps: 141641.83328 + tps: 116558.48667 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 23838.18081 - tps: 21134.21672 + dps: 24635.42825 + tps: 21917.26583 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 28606.75417 - tps: 25061.00716 + dps: 29488.35989 + tps: 25923.76441 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 101432.61349 - tps: 82041.63252 + dps: 101962.838 + tps: 83722.38425 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 16908.69529 - tps: 15060.59128 + dps: 17398.88404 + tps: 15512.33149 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 18082.37819 - tps: 15996.81466 + dps: 18450.67126 + tps: 16277.76236 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 32695.80736 - tps: 29931.06022 + dps: 33601.39278 + tps: 30871.90437 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 29950.60203 - tps: 27197.95645 + dps: 30988.31802 + tps: 28253.52117 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 35957.46745 - tps: 32517.93922 + dps: 36776.97146 + tps: 33374.51955 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 22889.25171 - tps: 20965.75785 + dps: 23644.02525 + tps: 21737.569 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 21138.21538 - tps: 19221.97155 + dps: 21856.21534 + tps: 19956.49111 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 23133.41368 - tps: 20987.39868 + dps: 23800.23255 + tps: 21663.73654 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 141988.12159 - tps: 115062.45123 + dps: 142266.54589 + tps: 117072.58171 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 24029.05099 - tps: 21177.25416 + dps: 24917.59768 + tps: 22038.78814 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 28992.65963 - tps: 25218.25242 + dps: 29849.41058 + tps: 26055.60433 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 101929.59512 - tps: 82477.88376 + dps: 102410.65625 + tps: 84093.47427 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 17046.36052 - tps: 15078.90179 + dps: 17498.49906 + tps: 15509.88576 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 18390.66544 - tps: 16166.60864 + dps: 18759.92289 + tps: 16441.91668 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 33031.54048 - tps: 30102.03081 + dps: 33922.27687 + tps: 31030.85111 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 31175.30769 + tps: 28277.71684 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 36434.92152 - tps: 32771.89303 + dps: 37239.94428 + tps: 33618.43366 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 23119.03409 - tps: 21079.14836 + dps: 23879.93567 + tps: 21858.5214 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 21276.27813 - tps: 19244.58352 + dps: 22007.69819 + tps: 19993.2197 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 23447.13315 - tps: 21159.45718 + dps: 24155.10049 + tps: 21877.77581 } } dps_results: { key: "TestSV-SwitchInFrontOfTarget-Default" value: { - dps: 29931.75319 - tps: 27041.70689 + dps: 30960.94883 + tps: 28102.41235 } } diff --git a/sim/mage/items.go b/sim/mage/items.go index cfadfc4c0f..57c185b174 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -68,7 +68,12 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ mage.baseHotStreakProcChance -= .30 }) - setBonusAura.AttachBooleanToggle(mage.Has4pcT12) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + mage.Has4pcT12 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + mage.Has4pcT12 = false + }) setBonusAura.ExposeToAPL(99064) }, }, diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 5505c86c08..2cdfcf6766 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -22,7 +22,13 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ }, 4: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.(PaladinAgent).GetPaladin() - setBonusAura.AttachBooleanToggle(character.HasT11Ret4pc) + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + character.HasT11Ret4pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + character.HasT11Ret4pc = false + }) // Handled in inquisition.go setBonusAura.ExposeToAPL(90299) diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index 470d23af88..c8d88f050b 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -1243,8 +1243,8 @@ dps_results: { dps_results: { key: "TestRetribution-AllItems-ReinforcedSapphiriumBattleplate" value: { - dps: 32450.21943 - tps: 32485.99946 + dps: 33098.10813 + tps: 33134.4054 } } dps_results: { @@ -2050,127 +2050,127 @@ dps_results: { dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 35964.0789 - tps: 40318.26642 + dps: 36714.4505 + tps: 40967.21073 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31644.43092 - tps: 31535.27793 + dps: 32034.29745 + tps: 31920.38175 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44339.03237 - tps: 42772.15587 + dps: 44634.27709 + tps: 43078.51416 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 20874.90176 - tps: 24982.13328 + dps: 21072.43497 + tps: 25214.36209 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18989.55411 - tps: 18897.29742 + dps: 19266.08949 + tps: 19171.41363 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_bis-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 24519.46478 - tps: 23125.5194 + dps: 24839.73797 + tps: 23440.61198 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36663.9701 - tps: 40979.6835 + dps: 37341.91121 + tps: 41607.99136 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 32096.04754 - tps: 31989.66427 + dps: 32453.57829 + tps: 32344.41421 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43423.29585 - tps: 41867.22173 + dps: 43780.24692 + tps: 42244.60904 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21038.96761 - tps: 25137.8077 + dps: 21084.32526 + tps: 25199.86828 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19119.49279 - tps: 19026.56736 + dps: 19354.01471 + tps: 19259.37284 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_apparatus-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 23862.18143 - tps: 22471.26201 + dps: 24182.53713 + tps: 22786.19293 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 35518.15221 - tps: 39813.36873 + dps: 36013.23729 + tps: 40291.47893 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31157.97227 - tps: 31046.64833 + dps: 31579.48682 + tps: 31471.12742 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43963.15159 - tps: 42401.14983 + dps: 44169.09252 + tps: 42624.39821 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21092.91953 - tps: 25618.0493 + dps: 21315.99669 + tps: 25734.8604 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18469.5281 - tps: 18389.36412 + dps: 18766.42311 + tps: 18684.34107 } } dps_results: { key: "TestRetribution-Settings-BloodElf-p2_with_double_passive-Basic-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 23952.03293 - tps: 22565.13836 + dps: 24220.92272 + tps: 22825.02187 } } dps_results: { diff --git a/sim/rogue/items.go b/sim/rogue/items.go index ee4955c4de..41d349c29d 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -217,7 +217,12 @@ var Tier13 = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() - setBonusAura.AttachBooleanToggle(rogue.Has4pcT13) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + rogue.Has4pcT13 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + rogue.Has4pcT13 = false + }) }, }, }) diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index a1e922025a..ca4862933e 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -1564,6 +1564,13 @@ dps_results: { tps: 1746.63005 } } +dps_results: { + key: "TestElemental-AllItems-Spiritwalker'sVestments" + value: { + dps: 34715.09325 + tps: 1731.74858 + } +} dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77202" value: { diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 8b3e1e1529..3d1a86bb62 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -38,2208 +38,2215 @@ character_stats_results: { dps_results: { key: "TestEnhancement-AllItems-AgileShadowspiritDiamond" value: { - dps: 36887.3206 - tps: 23608.7695 + dps: 36886.00904 + tps: 23607.4739 } } dps_results: { key: "TestEnhancement-AllItems-AgonyandTorment" value: { - dps: 33355.55111 - tps: 20774.30462 + dps: 33359.11814 + tps: 20777.94427 } } dps_results: { key: "TestEnhancement-AllItems-Althor'sAbacus-50366" value: { - dps: 34584.30356 - tps: 22257.58013 + dps: 34582.43448 + tps: 22257.25007 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-55889" value: { - dps: 34780.0441 - tps: 22353.86568 + dps: 34783.853 + tps: 22358.72417 } } dps_results: { key: "TestEnhancement-AllItems-Anhuur'sHymnal-56407" value: { - dps: 34867.68103 - tps: 22499.04119 + dps: 34869.82226 + tps: 22501.14785 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 35890.62413 - tps: 22984.52136 + dps: 35890.01435 + tps: 22984.87401 } } dps_results: { key: "TestEnhancement-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 36067.13693 - tps: 23081.38245 + dps: 36066.69656 + tps: 23081.82643 } } dps_results: { key: "TestEnhancement-AllItems-ArrowofTime-72897" value: { - dps: 36619.96826 - tps: 23467.44545 + dps: 36620.81757 + tps: 23470.36875 } } dps_results: { key: "TestEnhancement-AllItems-AustereShadowspiritDiamond" value: { - dps: 36169.50927 - tps: 23144.7489 + dps: 36167.09527 + tps: 23143.7657 } } dps_results: { key: "TestEnhancement-AllItems-BattlegearoftheRagingElements" value: { - dps: 31109.93907 - tps: 20462.51889 + dps: 31109.13936 + tps: 20464.22275 } } dps_results: { key: "TestEnhancement-AllItems-BaubleofTrueBlood-50726" value: { - dps: 34561.36122 - tps: 22252.75559 + dps: 34559.46703 + tps: 22252.41576 hps: 94.85146 } } dps_results: { key: "TestEnhancement-AllItems-BedrockTalisman-58182" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-59326" value: { - dps: 34976.39396 - tps: 22570.28757 + dps: 34968.73931 + tps: 22562.4721 } } dps_results: { key: "TestEnhancement-AllItems-BellofEnragingResonance-65053" value: { - dps: 35027.82606 - tps: 22602.71459 + dps: 35020.96436 + tps: 22594.92216 } } dps_results: { key: "TestEnhancement-AllItems-BindingPromise-67037" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-BlackBruise-50692" value: { - dps: 33859.86653 - tps: 21374.58379 + dps: 33852.18526 + tps: 21370.73606 } } dps_results: { key: "TestEnhancement-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 35894.50008 - tps: 23026.81018 + dps: 35892.80731 + tps: 23025.79314 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-55995" value: { - dps: 35035.52689 - tps: 22485.99814 + dps: 35033.63231 + tps: 22485.69097 } } dps_results: { key: "TestEnhancement-AllItems-BloodofIsiset-56414" value: { - dps: 35097.81705 - tps: 22516.52446 + dps: 35095.92242 + tps: 22516.22157 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36313.82024 - tps: 23374.63238 + dps: 36309.35507 + tps: 23371.47329 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 35147.51788 - tps: 22599.88937 + dps: 35145.6237 + tps: 22599.54953 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 34946.43123 - tps: 22540.67942 + dps: 34939.30393 + tps: 22533.89955 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 34559.85659 - tps: 22252.82624 + dps: 34557.96241 + tps: 22252.48641 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 35839.34019 - tps: 23068.09965 + dps: 35835.64344 + tps: 23066.7247 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 35099.17279 - tps: 22569.78561 + dps: 35097.27861 + tps: 22569.44577 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77210" value: { - dps: 36311.51807 - tps: 23739.80822 + dps: 36306.26798 + tps: 23737.16317 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-77982" value: { - dps: 36047.5067 - tps: 23489.13574 + dps: 36050.39704 + tps: 23493.6143 } } dps_results: { key: "TestEnhancement-AllItems-Bone-LinkFetish-78002" value: { - dps: 36497.4729 - tps: 23874.8196 + dps: 36497.8342 + tps: 23876.69214 } } dps_results: { key: "TestEnhancement-AllItems-BottledLightning-66879" value: { - dps: 34777.13388 - tps: 22405.02977 + dps: 34774.97037 + tps: 22403.62717 } } dps_results: { key: "TestEnhancement-AllItems-BottledWishes-77114" value: { - dps: 35123.12793 - tps: 22599.66169 + dps: 35123.87323 + tps: 22599.18815 } } dps_results: { key: "TestEnhancement-AllItems-BracingShadowspiritDiamond" value: { - dps: 36183.14043 - tps: 22693.3486 + dps: 36180.70752 + tps: 22692.36653 } } dps_results: { key: "TestEnhancement-AllItems-Brawler'sTrophy-232015" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-BurningShadowspiritDiamond" value: { - dps: 36692.693 - tps: 23501.4542 + dps: 36690.24399 + tps: 23500.43304 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 36782.05634 - tps: 23646.99656 + dps: 36779.58914 + tps: 23643.96645 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 35495.08861 - tps: 22805.1224 + dps: 35493.19443 + tps: 22804.78256 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 36652.74208 - tps: 23627.53268 + dps: 36649.07491 + tps: 23624.82808 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 35452.11849 - tps: 22786.89281 + dps: 35450.2243 + tps: 22786.55298 } } dps_results: { key: "TestEnhancement-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 35931.29193 - tps: 23127.26634 + dps: 35923.64815 + tps: 23119.46816 } } dps_results: { key: "TestEnhancement-AllItems-CoreofRipeness-58184" value: { - dps: 34603.45433 - tps: 22262.38375 + dps: 34601.55648 + tps: 22262.03351 } } dps_results: { key: "TestEnhancement-AllItems-CorpseTongueCoin-50349" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 35866.12644 - tps: 23130.25199 + dps: 35866.97687 + tps: 23131.99705 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 35661.62977 - tps: 23031.36273 + dps: 35659.80586 + tps: 23031.83011 } } dps_results: { key: "TestEnhancement-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 36104.01376 - tps: 23282.48066 + dps: 36105.01897 + tps: 23284.2645 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-59506" value: { - dps: 35561.07741 - tps: 22895.58941 + dps: 35566.33206 + tps: 22902.02314 } } dps_results: { key: "TestEnhancement-AllItems-CrushingWeight-65118" value: { - dps: 35584.06661 - tps: 22792.00494 + dps: 35587.2226 + tps: 22794.85005 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77208" value: { - dps: 35308.00284 - tps: 22971.18225 + dps: 35299.01416 + tps: 22965.4689 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-77980" value: { - dps: 35236.78991 - tps: 22900.03481 + dps: 35232.17347 + tps: 22897.04858 } } dps_results: { key: "TestEnhancement-AllItems-CunningoftheCruel-78000" value: { - dps: 35473.73063 - tps: 23112.50118 + dps: 35465.4866 + tps: 23107.69795 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 35554.51698 - tps: 23022.31678 + dps: 35550.4096 + tps: 23021.13077 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 36316.39828 - tps: 23503.74025 + dps: 36316.3127 + tps: 23506.44456 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 34603.45433 - tps: 22262.38375 + dps: 34601.55648 + tps: 22262.03351 } } dps_results: { key: "TestEnhancement-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 35310.1477 - tps: 22761.41416 + dps: 35308.65801 + tps: 22761.14208 } } dps_results: { key: "TestEnhancement-AllItems-Deathbringer'sWill-50363" value: { - dps: 35416.19233 - tps: 22748.77537 + dps: 35414.86757 + tps: 22748.39545 } } dps_results: { key: "TestEnhancement-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 36226.63127 - tps: 23165.26921 + dps: 36225.23898 + tps: 23163.99519 } } dps_results: { key: "TestEnhancement-AllItems-DislodgedForeignObject-50348" value: { - dps: 34769.96064 - tps: 22292.31672 + dps: 34769.84032 + tps: 22294.06296 } } dps_results: { key: "TestEnhancement-AllItems-Dragonwrath,Tarecgosa'sRest-71086" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Dwyer'sCaber-70141" value: { - dps: 35621.77367 - tps: 23014.51948 + dps: 35615.02401 + tps: 23010.14608 } } dps_results: { key: "TestEnhancement-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 36169.50927 - tps: 23144.7489 + dps: 36167.09527 + tps: 23143.7657 } } dps_results: { key: "TestEnhancement-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 34578.46494 - tps: 22289.03343 + dps: 34576.45494 + tps: 22288.65848 } } dps_results: { key: "TestEnhancement-AllItems-EmberShadowspiritDiamond" value: { - dps: 36183.14043 - tps: 23151.99431 + dps: 36180.70752 + tps: 23150.9922 } } dps_results: { key: "TestEnhancement-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 36226.63127 - tps: 23165.26921 + dps: 36225.23898 + tps: 23163.99519 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-59473" value: { - dps: 36067.28475 - tps: 23356.5154 + dps: 36061.33085 + tps: 23352.2734 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheCyclone-65140" value: { - dps: 36244.61928 - tps: 23454.54577 + dps: 36238.48231 + tps: 23449.85173 } } dps_results: { key: "TestEnhancement-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 35873.19498 - tps: 22950.44046 + dps: 35871.30019 + tps: 22950.15027 } } dps_results: { key: "TestEnhancement-AllItems-EternalShadowspiritDiamond" value: { - dps: 36169.50927 - tps: 23144.7489 + dps: 36167.09527 + tps: 23143.7657 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77200" value: { - dps: 36022.18907 - tps: 23128.3328 + dps: 36020.29488 + tps: 23127.99296 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77977" value: { - dps: 35856.01492 - tps: 23028.85044 + dps: 35854.12074 + tps: 23028.5106 } } dps_results: { key: "TestEnhancement-AllItems-EyeofUnmaking-77997" value: { - dps: 36204.98063 - tps: 23237.76339 + dps: 36203.08644 + tps: 23237.42356 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-59500" value: { - dps: 34603.45433 - tps: 22262.38375 + dps: 34601.55648 + tps: 22262.03351 } } dps_results: { key: "TestEnhancement-AllItems-FallofMortality-65124" value: { - dps: 34612.56866 - tps: 22267.36071 + dps: 34610.46829 + tps: 22266.79946 } } dps_results: { key: "TestEnhancement-AllItems-FieryQuintessence-69000" value: { - dps: 34603.3581 - tps: 22337.04198 + dps: 34599.88141 + tps: 22335.00577 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36195.36691 - tps: 23291.82577 + dps: 36194.88202 + tps: 23293.77135 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-DreamOwl-52354" value: { - dps: 34597.07737 - tps: 22260.77745 + dps: 34595.17953 + tps: 22260.42722 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 34597.07737 - tps: 22260.77745 + dps: 34595.17953 + tps: 22260.42722 } } dps_results: { key: "TestEnhancement-AllItems-Figurine-KingofBoars-52351" value: { - dps: 35657.06702 - tps: 22845.74734 + dps: 35655.17238 + tps: 22845.44444 } } dps_results: { key: "TestEnhancement-AllItems-FireoftheDeep-77117" value: { - dps: 35424.36849 - tps: 22676.55641 + dps: 35422.47358 + tps: 22676.27594 } } dps_results: { key: "TestEnhancement-AllItems-FleetShadowspiritDiamond" value: { - dps: 36273.96914 - tps: 23195.8909 + dps: 36271.55133 + tps: 23194.91395 } } dps_results: { key: "TestEnhancement-AllItems-FluidDeath-58181" value: { - dps: 36357.21523 - tps: 23425.40197 + dps: 36354.90623 + tps: 23424.58884 } } dps_results: { key: "TestEnhancement-AllItems-ForlornShadowspiritDiamond" value: { - dps: 36183.14043 - tps: 23152.09738 + dps: 36180.70752 + tps: 23151.09527 } } dps_results: { key: "TestEnhancement-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 35418.66301 - tps: 22667.94336 + dps: 35418.09714 + tps: 22667.99509 } } dps_results: { key: "TestEnhancement-AllItems-FuryofAngerforge-59461" value: { - dps: 35635.14924 - tps: 22962.46731 + dps: 35627.49459 + tps: 22954.65184 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56138" value: { - dps: 34774.76572 - tps: 22403.8964 + dps: 34772.97576 + tps: 22401.08699 } } dps_results: { key: "TestEnhancement-AllItems-GaleofShadows-56462" value: { - dps: 34712.3748 - tps: 22302.16365 + dps: 34711.28105 + tps: 22301.61831 } } dps_results: { key: "TestEnhancement-AllItems-GearDetector-61462" value: { - dps: 35462.73898 - tps: 22772.31324 + dps: 35463.80444 + tps: 22773.44451 } } dps_results: { key: "TestEnhancement-AllItems-GlowingTwilightScale-54589" value: { - dps: 34585.49264 - tps: 22257.54588 + dps: 34583.56403 + tps: 22257.21583 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-55266" value: { - dps: 35456.9779 - tps: 22812.25584 + dps: 35453.25581 + tps: 22808.24554 } } dps_results: { key: "TestEnhancement-AllItems-GraceoftheHerald-56295" value: { - dps: 35577.61165 - tps: 22997.11862 + dps: 35576.45786 + tps: 22995.82421 } } dps_results: { key: "TestEnhancement-AllItems-HarmlightToken-63839" value: { - dps: 34811.15383 - tps: 22475.96561 + dps: 34809.32345 + tps: 22475.5818 } } dps_results: { key: "TestEnhancement-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 35322.68579 - tps: 22669.61666 + dps: 35320.6549 + tps: 22669.17648 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-59514" value: { - dps: 34798.8445 - tps: 22451.46459 + dps: 34798.4392 + tps: 22454.31584 } } dps_results: { key: "TestEnhancement-AllItems-HeartofIgnacious-65110" value: { - dps: 34937.47274 - tps: 22462.18213 + dps: 34938.70155 + tps: 22465.08479 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-59224" value: { - dps: 35371.90163 - tps: 22770.22958 + dps: 35373.96498 + tps: 22773.29033 } } dps_results: { key: "TestEnhancement-AllItems-HeartofRage-65072" value: { - dps: 35463.4556 - tps: 22818.42477 + dps: 35465.51896 + tps: 22821.48552 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-55868" value: { - dps: 35326.46525 - tps: 22726.83653 + dps: 35324.67529 + tps: 22724.02712 } } dps_results: { key: "TestEnhancement-AllItems-HeartofSolace-56393" value: { - dps: 35330.6974 - tps: 22661.70849 + dps: 35329.60366 + tps: 22661.16315 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-55845" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-HeartofThunder-56370" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-HeartoftheVile-66969" value: { - dps: 35637.69442 - tps: 22918.602 + dps: 35636.72436 + tps: 22917.66863 } } dps_results: { key: "TestEnhancement-AllItems-Heartpierce-50641" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 36226.63127 - tps: 23165.26921 + dps: 36225.23898 + tps: 23163.99519 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62464" value: { - dps: 35796.84536 - tps: 22921.19098 + dps: 35794.95067 + tps: 22920.89275 } } dps_results: { key: "TestEnhancement-AllItems-ImpatienceofYouth-62469" value: { - dps: 35796.84536 - tps: 22921.19098 + dps: 35794.95067 + tps: 22920.89275 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-55881" value: { - dps: 35035.52689 - tps: 22485.99814 + dps: 35033.63231 + tps: 22485.69097 } } dps_results: { key: "TestEnhancement-AllItems-ImpetuousQuery-56406" value: { - dps: 35097.81705 - tps: 22516.52446 + dps: 35095.92242 + tps: 22516.22157 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77211" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-77983" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-IndomitablePride-78003" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 35228.12594 - tps: 22750.70052 + dps: 35227.2288 + tps: 22751.00058 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 35311.64036 - tps: 22664.93134 + dps: 35307.52335 + tps: 22666.9639 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 35370.48789 - tps: 22744.96755 + dps: 35366.6337 + tps: 22744.06745 } } dps_results: { key: "TestEnhancement-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 34926.04722 - tps: 22432.34581 + dps: 34924.15273 + tps: 22432.03112 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-59354" value: { - dps: 34559.85659 - tps: 22257.20684 + dps: 34557.96241 + tps: 22256.86701 } } dps_results: { key: "TestEnhancement-AllItems-JarofAncientRemedies-65029" value: { - dps: 34559.85659 - tps: 22257.27262 + dps: 34557.96241 + tps: 22256.93279 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-68926" value: { - dps: 34615.41278 - tps: 22266.09836 + dps: 34613.31241 + tps: 22265.53711 } } dps_results: { key: "TestEnhancement-AllItems-JawsofDefeat-69111" value: { - dps: 34619.86669 - tps: 22266.16376 + dps: 34617.7476 + tps: 22265.60251 } } dps_results: { key: "TestEnhancement-AllItems-JujuofNimbleness-63840" value: { - dps: 35894.50008 - tps: 23026.81018 + dps: 35892.80731 + tps: 23025.79314 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 35839.04773 - tps: 23054.25097 + dps: 35838.81949 + tps: 23056.75966 } } dps_results: { key: "TestEnhancement-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36203.73382 - tps: 23349.48294 + dps: 36200.19858 + tps: 23347.49643 } } dps_results: { key: "TestEnhancement-AllItems-KiroptyricSigil-77113" value: { - dps: 37010.09799 - tps: 23768.08951 + dps: 37008.41357 + tps: 23768.07866 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59685" value: { - dps: 35030.17641 - tps: 22455.48583 + dps: 35032.40813 + tps: 22458.88965 } } dps_results: { key: "TestEnhancement-AllItems-KvaldirBattleStandard-59689" value: { - dps: 35030.17641 - tps: 22455.48583 + dps: 35032.40813 + tps: 22458.88965 } } dps_results: { key: "TestEnhancement-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 34671.48543 - tps: 22372.89945 + dps: 34667.07165 + tps: 22372.73672 } } dps_results: { key: "TestEnhancement-AllItems-LastWord-50708" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-55816" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-LeadenDespair-56347" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56102" value: { - dps: 35912.66375 - tps: 23152.01685 + dps: 35917.18619 + tps: 23157.25358 } } dps_results: { key: "TestEnhancement-AllItems-LeftEyeofRajh-56427" value: { - dps: 36133.36461 - tps: 23323.64793 + dps: 36138.16588 + tps: 23329.27079 } } dps_results: { key: "TestEnhancement-AllItems-LicensetoSlay-58180" value: { - dps: 35612.11328 - tps: 22950.69249 + dps: 35609.73327 + tps: 22948.50031 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-55814" value: { - dps: 35033.67149 - tps: 22571.31369 + dps: 35035.73485 + tps: 22574.37444 } } dps_results: { key: "TestEnhancement-AllItems-MagnetiteMirror-56345" value: { - dps: 35153.17354 - tps: 22642.78547 + dps: 35155.2369 + tps: 22645.84622 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 34559.85659 - tps: 22252.82251 + dps: 34557.96241 + tps: 22252.48268 } } dps_results: { key: "TestEnhancement-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 34559.85659 - tps: 22252.82251 + dps: 34557.96241 + tps: 22252.48268 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56132" value: { - dps: 35474.4596 - tps: 22734.79102 + dps: 35472.84682 + tps: 22734.57044 } } dps_results: { key: "TestEnhancement-AllItems-MarkofKhardros-56458" value: { - dps: 35595.17054 - tps: 22798.31197 + dps: 35593.5946 + tps: 22798.10701 } } dps_results: { key: "TestEnhancement-AllItems-MatrixRestabilizer-68994" value: { - dps: 37285.08477 - tps: 23831.22174 + dps: 37280.73542 + tps: 23826.81689 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-55251" value: { - dps: 35114.15238 - tps: 22559.72861 + dps: 35119.44712 + tps: 22564.17366 } } dps_results: { key: "TestEnhancement-AllItems-MightoftheOcean-56285" value: { - dps: 35353.37635 - tps: 22784.64222 + dps: 35355.51758 + tps: 22786.74888 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62466" value: { - dps: 35165.76995 - tps: 22549.82591 + dps: 35163.87526 + tps: 22549.52768 } } dps_results: { key: "TestEnhancement-AllItems-MirrorofBrokenImages-62471" value: { - dps: 35165.76995 - tps: 22549.82591 + dps: 35163.87526 + tps: 22549.52768 } } dps_results: { key: "TestEnhancement-AllItems-MithrilStopwatch-232013" value: { - dps: 34959.8274 - tps: 22557.92067 + dps: 34952.18362 + tps: 22550.12248 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellChalice-70142" value: { - dps: 35327.14028 - tps: 22622.80012 + dps: 35325.69585 + tps: 22622.7482 } } dps_results: { key: "TestEnhancement-AllItems-MoonwellPhial-70143" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-68982" value: { - dps: 35281.66959 - tps: 22595.95802 + dps: 35279.54412 + tps: 22595.41758 } } dps_results: { key: "TestEnhancement-AllItems-NecromanticFocus-69139" value: { - dps: 35371.70529 - tps: 22638.15207 + dps: 35369.55713 + tps: 22637.6143 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Oremantle'sFavor-61448" value: { - dps: 35169.23283 - tps: 22656.30556 + dps: 35165.8407 + tps: 22654.23578 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 34598.72436 - tps: 22261.03846 + dps: 34596.82651 + tps: 22260.68823 } } dps_results: { key: "TestEnhancement-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 34801.54222 - tps: 22391.76426 + dps: 34799.55685 + tps: 22389.42637 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-55237" value: { - dps: 34920.1202 - tps: 22432.0052 + dps: 34917.9641 + tps: 22431.50691 } } dps_results: { key: "TestEnhancement-AllItems-PorcelainCrab-56280" value: { - dps: 35228.11336 - tps: 22580.57234 + dps: 35225.99031 + tps: 22580.12891 } } dps_results: { key: "TestEnhancement-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 36169.50927 - tps: 23144.7489 + dps: 36167.09527 + tps: 23143.7657 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 36247.15211 - tps: 23397.78824 + dps: 36251.08977 + tps: 23404.0949 } } dps_results: { key: "TestEnhancement-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 36606.28211 - tps: 23576.05842 + dps: 36602.61907 + tps: 23575.50219 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-55854" value: { - dps: 34559.85659 - tps: 22252.8423 + dps: 34557.96241 + tps: 22252.50247 } } dps_results: { key: "TestEnhancement-AllItems-Rainsong-56377" value: { - dps: 34559.85659 - tps: 22252.82923 + dps: 34557.96241 + tps: 22252.4894 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 32336.52498 - tps: 21534.10441 + dps: 32346.56658 + tps: 21542.43107 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 32755.55915 - tps: 21983.03313 + dps: 32762.98789 + tps: 21987.89842 } } dps_results: { key: "TestEnhancement-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 32119.30145 - tps: 21330.16367 + dps: 32125.32142 + tps: 21336.92802 } } dps_results: { key: "TestEnhancement-AllItems-ReflectionoftheLight-77115" value: { - dps: 34559.85659 - tps: 22252.79693 + dps: 34557.96241 + tps: 22252.4571 } } dps_results: { key: "TestEnhancement-AllItems-RegaliaoftheRagingElements" value: { - dps: 24123.6024 - tps: 15746.75878 + dps: 24117.4269 + tps: 15741.85694 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77201" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77978" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ResolveofUndying-77998" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 36770.62629 - tps: 23548.76822 + dps: 36768.19789 + tps: 23547.76767 } } dps_results: { key: "TestEnhancement-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 36677.8669 - tps: 23493.45026 + dps: 36675.4385 + tps: 23492.44972 } } dps_results: { key: "TestEnhancement-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 36028.46037 - tps: 23323.78062 + dps: 36027.57319 + tps: 23323.70679 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56100" value: { - dps: 35280.33145 - tps: 22651.81825 + dps: 35284.14036 + tps: 22656.67674 } } dps_results: { key: "TestEnhancement-AllItems-RightEyeofRajh-56431" value: { - dps: 35440.70727 - tps: 22845.6238 + dps: 35442.8485 + tps: 22847.73046 } } dps_results: { key: "TestEnhancement-AllItems-RosaryofLight-72901" value: { - dps: 35736.52028 - tps: 23068.21967 + dps: 35729.48132 + tps: 23066.69707 } } dps_results: { key: "TestEnhancement-AllItems-RottingSkull-77116" value: { - dps: 35959.04164 - tps: 23177.44555 + dps: 35953.13776 + tps: 23171.52109 } } dps_results: { key: "TestEnhancement-AllItems-RuneofZeth-68998" value: { - dps: 35085.43767 - tps: 22727.77921 + dps: 35078.93553 + tps: 22719.96883 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 36479.94006 - tps: 23466.01945 + dps: 36476.17553 + tps: 23463.86278 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 36582.14097 - tps: 23529.31664 + dps: 36578.33139 + tps: 23527.11492 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 35344.30709 - tps: 22716.08916 + dps: 35342.41291 + tps: 22715.74933 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 35388.76831 - tps: 22742.34255 + dps: 35386.87413 + tps: 22742.00272 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 36385.23698 - tps: 23429.9176 + dps: 36380.62312 + tps: 23427.58369 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 36498.98728 - tps: 23497.27608 + dps: 36496.5255 + tps: 23496.51412 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 35299.06137 - tps: 22695.09105 + dps: 35297.16719 + tps: 22694.75121 } } dps_results: { key: "TestEnhancement-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 35358.44576 - tps: 22728.92354 + dps: 35356.55157 + tps: 22728.5837 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-68915" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 hps: 311.3142 } } dps_results: { key: "TestEnhancement-AllItems-ScalesofLife-69109" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 hps: 351.1595 } } dps_results: { key: "TestEnhancement-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 35904.5349 - tps: 23016.9206 + dps: 35902.2108 + tps: 23013.95283 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-55256" value: { - dps: 34559.85659 - tps: 22252.8451 + dps: 34557.96241 + tps: 22252.50527 } } dps_results: { key: "TestEnhancement-AllItems-SeaStar-56290" value: { - dps: 34559.85659 - tps: 22252.82923 + dps: 34557.96241 + tps: 22252.4894 } } dps_results: { key: "TestEnhancement-AllItems-Shadowmourne-49623" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-ShardofWoe-60233" value: { - dps: 34791.50854 - tps: 22354.12741 + dps: 34790.37788 + tps: 22354.08484 } } dps_results: { key: "TestEnhancement-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 35269.58996 - tps: 22610.98876 + dps: 35265.77723 + tps: 22609.75626 } } dps_results: { key: "TestEnhancement-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56115" value: { - dps: 36151.18726 - tps: 23157.57553 + dps: 36149.74626 + tps: 23155.45879 } } dps_results: { key: "TestEnhancement-AllItems-Skardyn'sGrace-56440" value: { - dps: 36357.24988 - tps: 23280.681 + dps: 36355.7774 + tps: 23278.62052 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-55879" value: { - dps: 35035.52689 - tps: 22485.99814 + dps: 35033.63231 + tps: 22485.69097 } } dps_results: { key: "TestEnhancement-AllItems-Sorrowsong-56400" value: { - dps: 35097.81705 - tps: 22516.52446 + dps: 35095.92242 + tps: 22516.22157 } } dps_results: { key: "TestEnhancement-AllItems-Soul'sAnguish-66994" value: { - dps: 35040.50396 - tps: 22507.08479 + dps: 35044.31286 + tps: 22511.94328 } } dps_results: { key: "TestEnhancement-AllItems-SoulCasket-58183" value: { - dps: 35165.76995 - tps: 22549.82591 + dps: 35163.87526 + tps: 22549.52768 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77206" value: { - dps: 35747.02571 - tps: 22831.7436 + dps: 35747.08387 + tps: 22832.50199 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77970" value: { - dps: 35612.70605 - tps: 22762.4188 + dps: 35611.04996 + tps: 22762.49277 } } dps_results: { key: "TestEnhancement-AllItems-SoulshifterVortex-77990" value: { - dps: 35901.22003 - tps: 22912.54414 + dps: 35899.59523 + tps: 22912.59295 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-68981" value: { - dps: 35282.79995 - tps: 22607.1784 + dps: 35280.90516 + tps: 22606.8882 } } dps_results: { key: "TestEnhancement-AllItems-SpidersilkSpindle-69138" value: { - dps: 35377.17898 - tps: 22653.4304 + dps: 35375.28411 + tps: 22653.14669 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sBattlegear" value: { - dps: 32278.87176 - tps: 20362.42845 + dps: 32285.19439 + tps: 20369.90532 } } dps_results: { key: "TestEnhancement-AllItems-Spiritwalker'sRegalia" value: { - dps: 24385.33417 - tps: 15694.93118 + dps: 24379.50575 + tps: 15692.98575 + } +} +dps_results: { + key: "TestEnhancement-AllItems-Spiritwalker'sVestments" + value: { + dps: 23918.77193 + tps: 15430.60431 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77202" value: { - dps: 36978.7498 - tps: 23853.57761 + dps: 36982.18631 + tps: 23856.96913 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77973" value: { - dps: 36761.18563 - tps: 23678.20784 + dps: 36754.6482 + tps: 23675.29991 } } dps_results: { key: "TestEnhancement-AllItems-StarcatcherCompass-77993" value: { - dps: 37390.70851 - tps: 24003.43535 + dps: 37386.51562 + tps: 24001.21906 } } dps_results: { key: "TestEnhancement-AllItems-StayofExecution-68996" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Stonemother'sKiss-61411" value: { - dps: 34813.37631 - tps: 22384.40839 + dps: 34809.32402 + tps: 22383.08302 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62465" value: { - dps: 34973.48679 - tps: 22567.2914 + dps: 34971.10678 + tps: 22565.09922 } } dps_results: { key: "TestEnhancement-AllItems-StumpofTime-62470" value: { - dps: 34973.48679 - tps: 22567.2914 + dps: 34971.10678 + tps: 22565.09922 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-59332" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-SymbioticWorm-65048" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 34946.67251 - tps: 22434.72314 + dps: 34944.24127 + tps: 22434.10652 } } dps_results: { key: "TestEnhancement-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 35399.86419 - tps: 22769.52766 + dps: 35402.45705 + tps: 22774.70247 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-55819" value: { - dps: 34591.2939 - tps: 22259.43299 + dps: 34589.39606 + tps: 22259.08276 } } dps_results: { key: "TestEnhancement-AllItems-TearofBlood-56351" value: { - dps: 34597.07737 - tps: 22260.77745 + dps: 34595.17953 + tps: 22260.42722 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 34965.68641 - tps: 22451.77166 + dps: 34963.79189 + tps: 22451.45969 } } dps_results: { key: "TestEnhancement-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 35097.81705 - tps: 22516.52446 + dps: 35095.92242 + tps: 22516.22157 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-68927" value: { - dps: 36463.06245 - tps: 23427.535 + dps: 36460.87375 + tps: 23428.09942 } } dps_results: { key: "TestEnhancement-AllItems-TheHungerer-69112" value: { - dps: 36678.91317 - tps: 23666.70336 + dps: 36682.02766 + tps: 23671.63187 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-59519" value: { - dps: 35284.95132 - tps: 22600.28251 + dps: 35281.6228 + tps: 22599.27044 } } dps_results: { key: "TestEnhancement-AllItems-Theralion'sMirror-65105" value: { - dps: 35388.15544 - tps: 22655.17887 + dps: 35386.22797 + tps: 22654.86886 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56121" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Throngus'sFinger-56449" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-55874" value: { - dps: 36277.67918 - tps: 23251.67173 + dps: 36275.25473 + tps: 23249.04301 } } dps_results: { key: "TestEnhancement-AllItems-Tia'sGrace-56394" value: { - dps: 36505.43219 - tps: 23400.80728 + dps: 36500.45515 + tps: 23396.10721 } } dps_results: { key: "TestEnhancement-AllItems-TidefuryRaiment" value: { - dps: 21929.18114 - tps: 14548.42696 + dps: 21926.5921 + tps: 14549.20369 } } dps_results: { key: "TestEnhancement-AllItems-TinyAbominationinaJar-50706" value: { - dps: 35577.86853 - tps: 23069.97197 + dps: 35580.76309 + tps: 23074.25192 } } dps_results: { key: "TestEnhancement-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 34695.45083 - tps: 22396.57463 + dps: 34695.09802 + tps: 22398.44093 } } dps_results: { key: "TestEnhancement-AllItems-UnheededWarning-59520" value: { - dps: 36486.82222 - tps: 23447.75726 + dps: 36481.9504 + tps: 23443.1286 } } dps_results: { key: "TestEnhancement-AllItems-UnquenchableFlame-67101" value: { - dps: 34559.85659 - tps: 22252.85097 + dps: 34557.96241 + tps: 22252.51114 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62463" value: { - dps: 36719.57019 - tps: 23525.96228 + dps: 36715.8455 + tps: 23523.9564 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-62468" value: { - dps: 36719.57019 - tps: 23525.96228 + dps: 36715.8455 + tps: 23523.9564 } } dps_results: { key: "TestEnhancement-AllItems-UnsolvableRiddle-68709" value: { - dps: 36719.57019 - tps: 23525.96228 + dps: 36715.8455 + tps: 23523.9564 } } dps_results: { key: "TestEnhancement-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 31400.98234 - tps: 19975.40659 + dps: 31407.64207 + tps: 19982.2922 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 35620.24066 - tps: 23254.9562 + dps: 35616.86665 + tps: 23253.78685 } } dps_results: { key: "TestEnhancement-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 35633.79831 - tps: 23349.04366 + dps: 35631.09172 + tps: 23346.5258 } } dps_results: { key: "TestEnhancement-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36077.45368 - tps: 23065.5774 + dps: 36074.90167 + tps: 23064.96265 } } dps_results: { key: "TestEnhancement-AllItems-VeilofLies-72900" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-68995" value: { - dps: 35744.64794 - tps: 23030.70742 + dps: 35736.57622 + tps: 23023.96207 } } dps_results: { key: "TestEnhancement-AllItems-VesselofAcceleration-69167" value: { - dps: 35927.54762 - tps: 23154.33675 + dps: 35920.68057 + tps: 23148.64686 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77207" value: { - dps: 36896.66183 - tps: 23921.10692 + dps: 36891.58788 + tps: 23918.85876 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77979" value: { - dps: 36652.72853 - tps: 23756.30562 + dps: 36646.37216 + tps: 23752.0879 } } dps_results: { key: "TestEnhancement-AllItems-VialofShadows-77999" value: { - dps: 37161.32228 - tps: 24143.69726 + dps: 37158.81012 + tps: 24143.90535 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-59515" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-VialofStolenMemories-65109" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36089.2942 - tps: 23217.52287 + dps: 36085.59523 + tps: 23215.48432 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 36264.59952 - tps: 23330.17782 + dps: 36260.85601 + tps: 23328.04217 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 35180.38052 - tps: 22619.29405 + dps: 35178.48634 + tps: 22618.95422 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 35253.45157 - tps: 22662.44093 + dps: 35251.55738 + tps: 22662.10109 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 34917.25306 - tps: 22544.7171 + dps: 34915.53219 + tps: 22542.79081 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 34837.70808 - tps: 22328.79041 + dps: 34848.10187 + tps: 22339.33939 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 34998.75176 - tps: 22582.96755 + dps: 34991.7923 + tps: 22575.13766 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 34666.62948 - tps: 22351.79322 + dps: 34668.69284 + tps: 22354.85398 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 35201.63398 - tps: 22567.40167 + dps: 35199.73926 + tps: 22567.10591 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 36059.03343 - tps: 23237.36265 + dps: 36055.84651 + tps: 23235.64533 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 36222.55877 - tps: 23332.33195 + dps: 36219.41376 + tps: 23331.79831 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 34559.85659 - tps: 22252.88803 + dps: 34557.96241 + tps: 22252.54819 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 35148.57487 - tps: 22606.13891 + dps: 35146.68068 + tps: 22605.79907 } } dps_results: { key: "TestEnhancement-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 35226.357 - tps: 22652.93042 + dps: 35224.46281 + tps: 22652.59058 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicBattlegear" value: { - dps: 33277.31988 - tps: 21447.66372 + dps: 33284.69291 + tps: 21453.62927 } } dps_results: { key: "TestEnhancement-AllItems-VolcanicRegalia" value: { - dps: 24327.0748 - tps: 15919.05755 + dps: 24319.00582 + tps: 15917.3764 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77198" value: { - dps: 34660.31541 - tps: 22305.03478 + dps: 34656.85951 + tps: 22302.96396 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77975" value: { - dps: 34653.54274 - tps: 22291.90714 + dps: 34651.43507 + tps: 22291.40068 } } dps_results: { key: "TestEnhancement-AllItems-WillofUnbinding-77995" value: { - dps: 34669.93873 - tps: 22310.43243 + dps: 34666.52173 + tps: 22308.3818 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-55787" value: { - dps: 34708.76897 - tps: 22329.30666 + dps: 34704.5536 + tps: 22328.14589 } } dps_results: { key: "TestEnhancement-AllItems-WitchingHourglass-56320" value: { - dps: 34770.71403 - tps: 22362.51996 + dps: 34773.73817 + tps: 22366.81217 } } dps_results: { key: "TestEnhancement-AllItems-World-QuellerFocus-63842" value: { - dps: 34973.23673 - tps: 22455.47182 + dps: 34971.3422 + tps: 22455.16037 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77197" value: { - dps: 38154.90465 - tps: 24605.95284 + dps: 38150.67858 + tps: 24602.28754 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77974" value: { - dps: 37753.45819 - tps: 24352.12614 + dps: 37748.96148 + tps: 24348.01985 } } dps_results: { key: "TestEnhancement-AllItems-WrathofUnchaining-77994" value: { - dps: 38602.29286 - tps: 24884.84699 + dps: 38597.63036 + tps: 24880.83369 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 34982.17491 - tps: 22449.99079 + dps: 34980.52527 + tps: 22449.75459 } } dps_results: { key: "TestEnhancement-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 34982.17491 - tps: 22449.99079 + dps: 34980.52527 + tps: 22449.75459 } } dps_results: { key: "TestEnhancement-Average-Default" value: { - dps: 36888.48895 - tps: 23584.22475 + dps: 36889.22139 + tps: 23584.65269 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37286.80309 - tps: 28128.77981 + dps: 37285.53225 + tps: 28127.49254 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 36738.94792 - tps: 23515.83567 + dps: 36737.5751 + tps: 23514.54766 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42178.60004 - tps: 25983.63688 + dps: 42185.48693 + tps: 25990.35721 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28661.01684 - tps: 22838.39568 + dps: 28654.08963 + tps: 22835.10795 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28205.4675 - tps: 18189.6526 + dps: 28199.18877 + tps: 18186.82259 } } dps_results: { key: "TestEnhancement-Settings-Dwarf-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31273.57885 - tps: 19426.36519 + dps: 31285.99691 + tps: 19438.29033 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37712.29041 - tps: 28440.55697 + dps: 37717.08364 + tps: 28445.59652 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37158.00711 - tps: 23739.98698 + dps: 37163.61024 + tps: 23745.56833 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42895.52197 - tps: 26366.27166 + dps: 42900.6381 + tps: 26370.81037 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 29122.36094 - tps: 23207.41998 + dps: 29121.36704 + tps: 23204.6786 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28653.91075 - tps: 18491.63361 + dps: 28653.06966 + tps: 18488.90669 } } dps_results: { key: "TestEnhancement-Settings-Orc-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32186.91994 - tps: 19941.58278 + dps: 32200.79264 + tps: 19949.92009 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37490.06152 - tps: 28272.61074 + dps: 37493.97995 + tps: 28276.87014 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37003.62855 - tps: 23600.1847 + dps: 37008.19915 + tps: 23604.07612 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43090.61759 - tps: 26505.93202 + dps: 43100.60544 + tps: 26513.6274 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28945.85005 - tps: 23037.96319 + dps: 28947.10962 + tps: 23038.95748 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28481.90641 - tps: 18408.46587 + dps: 28483.12507 + tps: 18409.45984 } } dps_results: { key: "TestEnhancement-Settings-Troll-p3.orc-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32121.93096 - tps: 20168.60132 + dps: 32141.48105 + tps: 20184.82185 } } dps_results: { key: "TestEnhancement-SwitchInFrontOfTarget-Default" value: { - dps: 34172.71371 - tps: 21209.52654 + dps: 34176.657 + tps: 21212.70866 } } diff --git a/sim/shaman/items.go b/sim/shaman/items.go index e482060586..87f914c537 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -24,7 +24,12 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ setBonusAura.AttachStatBuff(stats.MP5, 3) } - setBonusAura.AttachBooleanToggle(shaman.HasDungeonSet3) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasDungeonSet3 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasDungeonSet3 = false + }) }, }, }) @@ -156,7 +161,12 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.AttachBooleanToggle(shaman.HasT12Ele4pc) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasT12Ele4pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasT12Ele4pc = false + }) }, }, }) @@ -322,7 +332,12 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in lavalash.go shaman := agent.(ShamanAgent).GetShaman() - setBonusAura.AttachBooleanToggle(shaman.HasT12Enh2pc) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasT12Enh2pc = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + shaman.HasT12Enh2pc = false + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index 0efd2a028d..05680e7708 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestAffliction-AllItems-AgileShadowspiritDiamond" value: { - dps: 38105.89158 - tps: 26577.87521 + dps: 38075.37796 + tps: 26688.5452 } } dps_results: { key: "TestAffliction-AllItems-Althor'sAbacus-50366" value: { - dps: 36343.18508 - tps: 25421.48031 + dps: 36422.56514 + tps: 25578.34903 } } dps_results: { key: "TestAffliction-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 36347.20694 - tps: 25450.85934 + dps: 36162.68093 + tps: 25392.89794 } } dps_results: { key: "TestAffliction-AllItems-Anhuur'sHymnal-55889" value: { - dps: 36665.30699 - tps: 25617.2396 + dps: 36579.92532 + tps: 25641.25576 } } dps_results: { key: "TestAffliction-AllItems-Anhuur'sHymnal-56407" value: { - dps: 36673.64585 - tps: 25622.98774 + dps: 36580.63366 + tps: 25642.34355 } } dps_results: { key: "TestAffliction-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ArrowofTime-72897" value: { - dps: 36268.54856 - tps: 25457.27986 + dps: 36531.02581 + tps: 25629.259 } } dps_results: { key: "TestAffliction-AllItems-AustereShadowspiritDiamond" value: { - dps: 37591.95604 - tps: 26172.52544 + dps: 37613.40017 + tps: 26229.03873 } } dps_results: { key: "TestAffliction-AllItems-Balespider'sBurningVestments" value: { - dps: 35045.61167 - tps: 24523.60366 + dps: 35012.22945 + tps: 24461.383 } } dps_results: { key: "TestAffliction-AllItems-BaubleofTrueBlood-50726" value: { - dps: 35750.25722 - tps: 25001.40082 - hps: 102.469 + dps: 35608.85567 + tps: 24955.06695 + hps: 102.53611 } } dps_results: { key: "TestAffliction-AllItems-BedrockTalisman-58182" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-BellofEnragingResonance-59326" value: { - dps: 37649.76039 - tps: 26201.41743 + dps: 37482.68868 + tps: 26216.49566 } } dps_results: { key: "TestAffliction-AllItems-BellofEnragingResonance-65053" value: { - dps: 37836.9973 - tps: 26350.64971 + dps: 37645.11854 + tps: 26412.82102 } } dps_results: { key: "TestAffliction-AllItems-BindingPromise-67037" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 36022.65636 - tps: 25309.09756 + dps: 35948.99704 + tps: 25281.1884 } } dps_results: { key: "TestAffliction-AllItems-BloodofIsiset-55995" value: { - dps: 36105.99594 - tps: 25294.15294 + dps: 35993.16021 + tps: 25280.80634 } } dps_results: { key: "TestAffliction-AllItems-BloodofIsiset-56414" value: { - dps: 36146.48929 - tps: 25330.96627 + dps: 36033.69343 + tps: 25317.60045 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 35794.20931 - tps: 25023.33505 + dps: 35690.17532 + tps: 25074.02753 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 36779.86436 - tps: 25668.65707 + dps: 36649.19081 + tps: 25763.22702 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 36223.34317 - tps: 25374.68764 + dps: 36227.77935 + tps: 25473.53329 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 35729.69024 - tps: 25027.23598 + dps: 35802.36244 + tps: 25098.69232 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 35664.50279 - tps: 24963.1581 + dps: 35675.26636 + tps: 25080.10945 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 36669.78952 - tps: 25610.58513 + dps: 36538.37354 + tps: 25581.65211 } } dps_results: { key: "TestAffliction-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-77210" value: { - dps: 35925.80957 - tps: 25145.01055 + dps: 35807.89849 + tps: 25121.92788 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-77982" value: { - dps: 35908.39363 - tps: 25123.23464 + dps: 35793.18477 + tps: 25108.26336 } } dps_results: { key: "TestAffliction-AllItems-Bone-LinkFetish-78002" value: { - dps: 35951.18705 - tps: 25167.25306 + dps: 35834.66108 + tps: 25146.76422 } } dps_results: { key: "TestAffliction-AllItems-BottledLightning-66879" value: { - dps: 36499.28613 - tps: 25482.95118 + dps: 36673.97708 + tps: 25729.36819 } } dps_results: { key: "TestAffliction-AllItems-BottledWishes-77114" value: { - dps: 37807.14717 - tps: 26391.93983 + dps: 37781.95362 + tps: 26548.70457 } } dps_results: { key: "TestAffliction-AllItems-BracingShadowspiritDiamond" value: { - dps: 37834.32834 - tps: 25702.95886 + dps: 37749.86365 + tps: 25783.917 } } dps_results: { key: "TestAffliction-AllItems-Brawler'sTrophy-232015" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-BurningShadowspiritDiamond" value: { - dps: 38265.71112 - tps: 26600.37151 + dps: 38185.39703 + tps: 26687.40888 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 37372.71297 - tps: 26068.49593 + dps: 37237.99723 + tps: 26166.10123 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 37140.47113 - tps: 25914.29028 + dps: 37021.13288 + tps: 25894.05379 } } dps_results: { key: "TestAffliction-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 38163.32339 - tps: 26606.52071 + dps: 38165.62683 + tps: 26721.69226 } } dps_results: { key: "TestAffliction-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 36365.36769 - tps: 25369.57537 + dps: 36207.86317 + tps: 25386.50213 } } dps_results: { key: "TestAffliction-AllItems-CoreofRipeness-58184" value: { - dps: 36728.07453 - tps: 25684.39237 + dps: 36925.65343 + tps: 25939.95496 } } dps_results: { key: "TestAffliction-AllItems-CorpseTongueCoin-50349" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 36362.19046 - tps: 25449.38299 + dps: 36340.89418 + tps: 25455.73855 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 36436.76726 - tps: 25433.56715 + dps: 36270.72015 + tps: 25436.95872 } } dps_results: { key: "TestAffliction-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 36376.3501 - tps: 25393.55057 + dps: 36324.00059 + tps: 25515.93756 } } dps_results: { key: "TestAffliction-AllItems-CrushingWeight-59506" value: { - dps: 36098.61748 - tps: 25188.14461 + dps: 36083.23968 + tps: 25340.17062 } } dps_results: { key: "TestAffliction-AllItems-CrushingWeight-65118" value: { - dps: 36229.51736 - tps: 25303.46429 + dps: 36085.01687 + tps: 25291.62873 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-77208" value: { - dps: 38722.82658 - tps: 27588.86394 + dps: 38705.3417 + tps: 27629.07902 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-77980" value: { - dps: 38284.56006 - tps: 27253.74933 + dps: 38307.37624 + tps: 27223.63466 } } dps_results: { key: "TestAffliction-AllItems-CunningoftheCruel-78000" value: { - dps: 39105.72741 - tps: 27930.83777 + dps: 39187.5601 + tps: 28086.30487 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 35664.41111 - tps: 24963.63367 + dps: 35675.26636 + tps: 25080.16939 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 36756.21916 - tps: 25778.75129 + dps: 36841.95089 + tps: 25865.98398 } } dps_results: { key: "TestAffliction-AllItems-Deathbringer'sWill-50363" value: { - dps: 36064.24982 - tps: 25186.78053 + dps: 35977.68706 + tps: 25221.26813 } } dps_results: { key: "TestAffliction-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 37722.41969 - tps: 26219.2649 + dps: 37719.33456 + tps: 26328.80781 } } dps_results: { key: "TestAffliction-AllItems-DislodgedForeignObject-50348" value: { - dps: 36766.00846 - tps: 25666.95494 + dps: 36672.40311 + tps: 25706.83119 } } dps_results: { key: "TestAffliction-AllItems-Dwyer'sCaber-70141" value: { - dps: 36323.11153 - tps: 25328.66412 + dps: 36187.68291 + tps: 25376.09218 } } dps_results: { key: "TestAffliction-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 37591.95604 - tps: 26172.52544 + dps: 37613.40017 + tps: 26229.03873 } } dps_results: { key: "TestAffliction-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 36273.54577 - tps: 25352.09677 + dps: 36183.24913 + tps: 25383.31984 } } dps_results: { key: "TestAffliction-AllItems-EmberShadowspiritDiamond" value: { - dps: 37794.25497 - tps: 26314.62871 + dps: 37809.73495 + tps: 26339.39598 } } dps_results: { key: "TestAffliction-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 37722.41969 - tps: 26219.2649 + dps: 37719.33456 + tps: 26328.80781 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheCyclone-59473" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheCyclone-65140" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 36347.20694 - tps: 25450.85934 + dps: 36162.68093 + tps: 25392.89794 } } dps_results: { key: "TestAffliction-AllItems-EternalShadowspiritDiamond" value: { - dps: 37591.95604 - tps: 26172.52544 + dps: 37613.40017 + tps: 26229.03873 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77200" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77977" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-EyeofUnmaking-77997" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-FallofMortality-59500" value: { - dps: 36756.21916 - tps: 25778.75129 + dps: 36841.95089 + tps: 25865.98398 } } dps_results: { key: "TestAffliction-AllItems-FallofMortality-65124" value: { - dps: 37012.37198 - tps: 25986.73904 + dps: 37055.08981 + tps: 26031.89247 } } dps_results: { key: "TestAffliction-AllItems-FieryQuintessence-69000" value: { - dps: 37160.61401 - tps: 25926.03506 + dps: 36998.24022 + tps: 25846.77958 } } dps_results: { key: "TestAffliction-AllItems-Figurine-DemonPanther-52199" value: { - dps: 36186.23465 - tps: 25183.91938 + dps: 35990.22407 + tps: 25199.62158 } } dps_results: { key: "TestAffliction-AllItems-Figurine-DreamOwl-52354" value: { - dps: 36712.83232 - tps: 25694.4748 + dps: 36756.78616 + tps: 25833.69845 } } dps_results: { key: "TestAffliction-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 35810.3143 - tps: 25051.50674 + dps: 35786.91291 + tps: 25109.94773 } } dps_results: { key: "TestAffliction-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 37643.07427 - tps: 26322.32019 + dps: 37684.32331 + tps: 26472.99638 } } dps_results: { key: "TestAffliction-AllItems-Figurine-KingofBoars-52351" value: { - dps: 36127.27402 - tps: 25310.53005 + dps: 36002.70584 + tps: 25399.90806 } } dps_results: { key: "TestAffliction-AllItems-FireoftheDeep-77117" value: { - dps: 36398.90981 - tps: 25551.36507 + dps: 36294.84638 + tps: 25545.05699 } } dps_results: { key: "TestAffliction-AllItems-FleetShadowspiritDiamond" value: { - dps: 37735.87093 - tps: 26254.78372 + dps: 37700.41463 + tps: 26360.10401 } } dps_results: { key: "TestAffliction-AllItems-FluidDeath-58181" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-ForlornShadowspiritDiamond" value: { - dps: 37834.32834 - tps: 26220.70772 + dps: 37749.86365 + tps: 26303.31806 } } dps_results: { key: "TestAffliction-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 37667.94907 - tps: 26564.76612 + dps: 37727.66949 + tps: 26624.88921 } } dps_results: { key: "TestAffliction-AllItems-FuryofAngerforge-59461" value: { - dps: 36390.65626 - tps: 25388.61794 + dps: 36234.17766 + tps: 25402.51367 } } dps_results: { key: "TestAffliction-AllItems-GaleofShadows-56138" value: { - dps: 36848.47325 - tps: 25839.19745 + dps: 36764.46434 + tps: 25824.10221 } } dps_results: { key: "TestAffliction-AllItems-GaleofShadows-56462" value: { - dps: 37343.95572 - tps: 26049.3539 + dps: 36935.1041 + tps: 25862.61672 } } dps_results: { key: "TestAffliction-AllItems-GearDetector-61462" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { @@ -669,703 +669,703 @@ dps_results: { dps_results: { key: "TestAffliction-AllItems-GlowingTwilightScale-54589" value: { - dps: 36361.05463 - tps: 25437.49956 + dps: 36353.27992 + tps: 25515.7391 } } dps_results: { key: "TestAffliction-AllItems-GraceoftheHerald-55266" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-GraceoftheHerald-56295" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-HarmlightToken-63839" value: { - dps: 37108.79841 - tps: 25770.52419 + dps: 36856.15362 + tps: 25783.9954 } } dps_results: { key: "TestAffliction-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-HeartofIgnacious-59514" value: { - dps: 37201.53538 - tps: 25971.31177 + dps: 37178.90497 + tps: 26074.77378 } } dps_results: { key: "TestAffliction-AllItems-HeartofIgnacious-65110" value: { - dps: 37399.26551 - tps: 26179.20327 + dps: 37477.51035 + tps: 26339.61572 } } dps_results: { key: "TestAffliction-AllItems-HeartofRage-59224" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-HeartofRage-65072" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-HeartofSolace-55868" value: { - dps: 36083.17129 - tps: 25296.45445 + dps: 35998.17624 + tps: 25281.03828 } } dps_results: { key: "TestAffliction-AllItems-HeartofSolace-56393" value: { - dps: 36464.4141 - tps: 25429.70741 + dps: 36065.14386 + tps: 25248.41771 } } dps_results: { key: "TestAffliction-AllItems-HeartofThunder-55845" value: { - dps: 35792.86524 - tps: 25015.71314 + dps: 35693.8221 + tps: 25007.07744 } } dps_results: { key: "TestAffliction-AllItems-HeartofThunder-56370" value: { - dps: 35792.86153 - tps: 25016.05005 + dps: 35698.41155 + tps: 25005.11267 } } dps_results: { key: "TestAffliction-AllItems-HeartoftheVile-66969" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 37722.41969 - tps: 26219.2649 + dps: 37719.33456 + tps: 26328.80781 } } dps_results: { key: "TestAffliction-AllItems-ImpatienceofYouth-62464" value: { - dps: 36171.45661 - tps: 25350.6868 + dps: 36046.79635 + tps: 25440.05724 } } dps_results: { key: "TestAffliction-AllItems-ImpatienceofYouth-62469" value: { - dps: 36171.45661 - tps: 25350.6868 + dps: 36046.79635 + tps: 25440.05724 } } dps_results: { key: "TestAffliction-AllItems-ImpetuousQuery-55881" value: { - dps: 36108.57744 - tps: 25290.12805 + dps: 36048.20933 + tps: 25319.9735 } } dps_results: { key: "TestAffliction-AllItems-ImpetuousQuery-56406" value: { - dps: 36149.07651 - tps: 25326.94829 + dps: 36088.84764 + tps: 25356.8613 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-77211" value: { - dps: 35704.89865 - tps: 24977.14758 + dps: 35633.83678 + tps: 25024.88949 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-77983" value: { - dps: 35757.6954 - tps: 24980.75707 + dps: 35784.46572 + tps: 25091.74098 } } dps_results: { key: "TestAffliction-AllItems-IndomitablePride-78003" value: { - dps: 35720.09479 - tps: 25031.10186 + dps: 35745.85223 + tps: 25100.18041 } } dps_results: { key: "TestAffliction-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 35792.86524 - tps: 25015.59083 + dps: 35693.8221 + tps: 25006.94154 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 38682.50869 - tps: 27062.12085 + dps: 38577.35035 + tps: 27035.53796 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 38076.3965 - tps: 26686.76049 + dps: 38183.80229 + tps: 26816.67345 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 39243.86576 - tps: 27446.58632 + dps: 39072.08779 + tps: 27485.13699 } } dps_results: { key: "TestAffliction-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 36586.23083 - tps: 25676.89633 + dps: 36500.72654 + tps: 25641.55972 } } dps_results: { key: "TestAffliction-AllItems-JarofAncientRemedies-59354" value: { - dps: 35597.98643 - tps: 24848.29087 + dps: 35596.69027 + tps: 24982.36255 } } dps_results: { key: "TestAffliction-AllItems-JarofAncientRemedies-65029" value: { - dps: 35862.00067 - tps: 25049.69243 + dps: 35713.67548 + tps: 25122.06805 } } dps_results: { key: "TestAffliction-AllItems-JawsofDefeat-68926" value: { - dps: 37062.08222 - tps: 25815.5347 + dps: 37114.9784 + tps: 26041.35054 } } dps_results: { key: "TestAffliction-AllItems-JawsofDefeat-69111" value: { - dps: 37305.58851 - tps: 26004.27809 + dps: 37377.02967 + tps: 26187.04243 } } dps_results: { key: "TestAffliction-AllItems-JujuofNimbleness-63840" value: { - dps: 36022.65636 - tps: 25309.09756 + dps: 35948.99704 + tps: 25281.1884 } } dps_results: { key: "TestAffliction-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-KiroptyricSigil-77113" value: { - dps: 36422.05681 - tps: 25475.06205 + dps: 36410.34718 + tps: 25631.72584 } } dps_results: { key: "TestAffliction-AllItems-KvaldirBattleStandard-59685" value: { - dps: 36150.59243 - tps: 25242.37077 + dps: 35908.27244 + tps: 25252.97054 } } dps_results: { key: "TestAffliction-AllItems-KvaldirBattleStandard-59689" value: { - dps: 36150.59243 - tps: 25242.37077 + dps: 35908.27244 + tps: 25252.97054 } } dps_results: { key: "TestAffliction-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 36366.39129 - tps: 25282.05866 + dps: 36128.57114 + tps: 25254.29082 } } dps_results: { key: "TestAffliction-AllItems-LeadenDespair-55816" value: { - dps: 35714.1423 - tps: 24980.53782 + dps: 35823.52018 + tps: 25137.94825 } } dps_results: { key: "TestAffliction-AllItems-LeadenDespair-56347" value: { - dps: 35810.3143 - tps: 25051.50674 + dps: 35786.92399 + tps: 25109.94773 } } dps_results: { key: "TestAffliction-AllItems-LeftEyeofRajh-56102" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-LeftEyeofRajh-56427" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-LicensetoSlay-58180" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-MagnetiteMirror-55814" value: { - dps: 35753.736 - tps: 25064.22462 + dps: 35679.60069 + tps: 25036.60937 } } dps_results: { key: "TestAffliction-AllItems-MagnetiteMirror-56345" value: { - dps: 35753.736 - tps: 25064.22462 + dps: 35679.60069 + tps: 25036.60937 } } dps_results: { key: "TestAffliction-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 35792.13859 - tps: 25006.85097 + dps: 35748.58862 + tps: 24990.10144 } } dps_results: { key: "TestAffliction-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 35792.13859 - tps: 25006.85097 + dps: 35748.58862 + tps: 24990.10144 } } dps_results: { key: "TestAffliction-AllItems-MarkofKhardros-56132" value: { - dps: 36085.46155 - tps: 25367.24441 + dps: 36007.31091 + tps: 25334.41027 } } dps_results: { key: "TestAffliction-AllItems-MarkofKhardros-56458" value: { - dps: 36128.9018 - tps: 25406.92558 + dps: 36050.22535 + tps: 25373.40801 } } dps_results: { key: "TestAffliction-AllItems-MatrixRestabilizer-68994" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-MatrixRestabilizer-69150" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-MightoftheOcean-55251" value: { - dps: 36302.18762 - tps: 25177.84318 + dps: 36168.06462 + tps: 25228.5432 } } dps_results: { key: "TestAffliction-AllItems-MightoftheOcean-56285" value: { - dps: 36302.18762 - tps: 25177.84318 + dps: 36168.06462 + tps: 25228.5432 } } dps_results: { key: "TestAffliction-AllItems-MirrorofBrokenImages-62466" value: { - dps: 36193.25731 - tps: 25367.11582 + dps: 36133.18035 + tps: 25397.10253 } } dps_results: { key: "TestAffliction-AllItems-MirrorofBrokenImages-62471" value: { - dps: 36193.25731 - tps: 25367.11582 + dps: 36133.18035 + tps: 25397.10253 } } dps_results: { key: "TestAffliction-AllItems-MithrilStopwatch-232013" value: { - dps: 37464.13697 - tps: 26112.57406 + dps: 37315.66653 + tps: 26145.88295 } } dps_results: { key: "TestAffliction-AllItems-MoonwellChalice-70142" value: { - dps: 37331.89576 - tps: 26214.06776 + dps: 37492.05254 + tps: 26456.69068 } } dps_results: { key: "TestAffliction-AllItems-MoonwellPhial-70143" value: { - dps: 35729.30316 - tps: 25016.10173 + dps: 35690.05011 + tps: 25084.19795 } } dps_results: { key: "TestAffliction-AllItems-NecromanticFocus-68982" value: { - dps: 37489.9059 - tps: 26399.31268 + dps: 37550.99642 + tps: 26460.94661 } } dps_results: { key: "TestAffliction-AllItems-NecromanticFocus-69139" value: { - dps: 37917.24866 - tps: 26668.04266 + dps: 37838.55918 + tps: 26698.04533 } } dps_results: { key: "TestAffliction-AllItems-Oremantle'sFavor-61448" value: { - dps: 36083.82647 - tps: 25232.57424 + dps: 36178.52836 + tps: 25445.87642 } } dps_results: { key: "TestAffliction-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 36739.78495 - tps: 25697.86547 + dps: 36757.51561 + tps: 25808.10628 } } dps_results: { key: "TestAffliction-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 36778.1648 - tps: 25656.02655 + dps: 36688.09507 + tps: 25696.78762 } } dps_results: { key: "TestAffliction-AllItems-PorcelainCrab-55237" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-PorcelainCrab-56280" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 37591.95604 - tps: 26172.52544 + dps: 37613.40017 + tps: 26229.03873 } } dps_results: { key: "TestAffliction-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Rainsong-55854" value: { - dps: 35761.73309 - tps: 24968.38482 + dps: 35686.38791 + tps: 25003.1708 } } dps_results: { key: "TestAffliction-AllItems-Rainsong-56377" value: { - dps: 35792.13859 - tps: 25006.85097 + dps: 35748.58862 + tps: 24990.10144 } } dps_results: { key: "TestAffliction-AllItems-ReflectionoftheLight-77115" value: { - dps: 37096.57185 - tps: 25930.63964 + dps: 36966.41288 + tps: 25827.00093 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77201" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77978" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ResolveofUndying-77998" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 38105.89158 - tps: 26577.87521 + dps: 38075.37796 + tps: 26688.5452 } } dps_results: { key: "TestAffliction-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 38101.00176 - tps: 26569.83911 + dps: 38066.77773 + tps: 26676.81157 } } dps_results: { key: "TestAffliction-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 36460.57142 - tps: 25519.97125 + dps: 36488.88269 + tps: 25664.81883 } } dps_results: { key: "TestAffliction-AllItems-RightEyeofRajh-56100" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-RightEyeofRajh-56431" value: { - dps: 36052.22514 - tps: 25216.04098 + dps: 35963.79622 + tps: 25230.97816 } } dps_results: { key: "TestAffliction-AllItems-RosaryofLight-72901" value: { - dps: 36221.77397 - tps: 25291.79243 + dps: 35959.25043 + tps: 25203.96152 } } dps_results: { key: "TestAffliction-AllItems-RottingSkull-77116" value: { - dps: 36531.9042 - tps: 25531.52287 + dps: 36382.55306 + tps: 25610.51502 } } dps_results: { key: "TestAffliction-AllItems-RuneofZeth-68998" value: { - dps: 37510.13274 - tps: 26139.87232 + dps: 37492.96573 + tps: 26193.12298 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 37115.52614 - tps: 25895.03969 + dps: 36982.56397 + tps: 25991.32822 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 37191.36328 - tps: 25946.18704 + dps: 37057.88403 + tps: 26042.86385 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 36901.47134 - tps: 25750.50412 + dps: 36769.7843 + tps: 25733.3372 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 36973.63651 - tps: 25804.48624 + dps: 36863.81613 + tps: 25796.45519 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ScalesofLife-68915" value: { - dps: 35737.88452 - tps: 24990.31492 + dps: 35706.06141 + tps: 25029.67715 hps: 357.04731 } } dps_results: { key: "TestAffliction-AllItems-ScalesofLife-69109" value: { - dps: 35746.56416 - tps: 25014.45651 + dps: 35690.77273 + tps: 25044.85856 hps: 402.74602 } } dps_results: { key: "TestAffliction-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-SeaStar-55256" value: { - dps: 36270.64082 - tps: 25329.77536 + dps: 36143.9543 + tps: 25409.43871 } } dps_results: { key: "TestAffliction-AllItems-SeaStar-56290" value: { - dps: 36707.20874 - tps: 25624.60245 + dps: 36576.12285 + tps: 25705.79252 } } dps_results: { @@ -1378,770 +1378,770 @@ dps_results: { dps_results: { key: "TestAffliction-AllItems-ShardofWoe-60233" value: { - dps: 36599.83928 - tps: 25556.62863 + dps: 36425.46954 + tps: 25567.44071 } } dps_results: { key: "TestAffliction-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 35809.66479 - tps: 24952.9698 + dps: 35748.61925 + tps: 25081.14549 } } dps_results: { key: "TestAffliction-AllItems-Skardyn'sGrace-56115" value: { - dps: 36143.90281 - tps: 25328.28432 + dps: 36019.68728 + tps: 25417.22033 } } dps_results: { key: "TestAffliction-AllItems-Skardyn'sGrace-56440" value: { - dps: 36191.88476 - tps: 25372.24003 + dps: 36067.61994 + tps: 25461.11032 } } dps_results: { key: "TestAffliction-AllItems-Sorrowsong-55879" value: { - dps: 36816.16393 - tps: 25797.36316 + dps: 36700.02286 + tps: 25785.60765 } } dps_results: { key: "TestAffliction-AllItems-Sorrowsong-56400" value: { - dps: 36950.80089 - tps: 25901.11053 + dps: 36834.26871 + tps: 25889.55913 } } dps_results: { key: "TestAffliction-AllItems-Soul'sAnguish-66994" value: { - dps: 36302.18762 - tps: 25177.84318 + dps: 36168.06462 + tps: 25228.5432 } } dps_results: { key: "TestAffliction-AllItems-SoulCasket-58183" value: { - dps: 37455.88127 - tps: 26220.40978 + dps: 37322.54975 + tps: 26316.24686 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77206" value: { - dps: 36360.29385 - tps: 25578.5826 + dps: 36337.52276 + tps: 25664.89283 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77970" value: { - dps: 36336.59334 - tps: 25508.87927 + dps: 36364.20039 + tps: 25621.26079 } } dps_results: { key: "TestAffliction-AllItems-SoulshifterVortex-77990" value: { - dps: 36504.85595 - tps: 25754.63674 + dps: 36553.72845 + tps: 25838.44365 } } dps_results: { key: "TestAffliction-AllItems-SpidersilkSpindle-68981" value: { - dps: 36266.74228 - tps: 25440.2907 + dps: 36154.06482 + tps: 25426.86782 } } dps_results: { key: "TestAffliction-AllItems-SpidersilkSpindle-69138" value: { - dps: 36328.09584 - tps: 25496.06847 + dps: 36215.4788 + tps: 25482.61648 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77202" value: { - dps: 36966.16539 - tps: 25815.50644 + dps: 36890.96067 + tps: 25992.0877 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77973" value: { - dps: 36685.89118 - tps: 25750.0528 + dps: 36429.3763 + tps: 25599.20114 } } dps_results: { key: "TestAffliction-AllItems-StarcatcherCompass-77993" value: { - dps: 37182.88898 - tps: 26127.83803 + dps: 36977.0315 + tps: 26025.09204 } } dps_results: { key: "TestAffliction-AllItems-StayofExecution-68996" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-Stonemother'sKiss-61411" value: { - dps: 36767.87127 - tps: 25725.89298 + dps: 36836.96707 + tps: 25839.63345 } } dps_results: { key: "TestAffliction-AllItems-StumpofTime-62465" value: { - dps: 37193.16096 - tps: 26019.76036 + dps: 37092.1873 + tps: 26034.26226 } } dps_results: { key: "TestAffliction-AllItems-StumpofTime-62470" value: { - dps: 37237.94368 - tps: 26018.85926 + dps: 37135.16997 + tps: 26028.49215 } } dps_results: { key: "TestAffliction-AllItems-SymbioticWorm-59332" value: { - dps: 35787.47569 - tps: 25056.93023 + dps: 35715.90925 + tps: 25092.23903 } } dps_results: { key: "TestAffliction-AllItems-SymbioticWorm-65048" value: { - dps: 35806.72468 - tps: 25046.01073 + dps: 35708.34888 + tps: 25061.01556 } } dps_results: { key: "TestAffliction-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 36824.97482 - tps: 25744.88118 + dps: 36833.40602 + tps: 25900.55873 } } dps_results: { key: "TestAffliction-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-TearofBlood-55819" value: { - dps: 36452.36037 - tps: 25473.84808 + dps: 36549.03303 + tps: 25657.56014 } } dps_results: { key: "TestAffliction-AllItems-TearofBlood-56351" value: { - dps: 36725.85564 - tps: 25664.09499 + dps: 36686.41923 + tps: 25731.18032 } } dps_results: { key: "TestAffliction-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 36631.3776 - tps: 25631.54115 + dps: 36513.86375 + tps: 25614.80154 } } dps_results: { key: "TestAffliction-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 36859.23817 - tps: 25794.67994 + dps: 36740.12523 + tps: 25784.01558 } } dps_results: { key: "TestAffliction-AllItems-TheHungerer-68927" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-TheHungerer-69112" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Theralion'sMirror-59519" value: { - dps: 37187.22403 - tps: 26170.60698 + dps: 37291.01074 + tps: 26277.56254 } } dps_results: { key: "TestAffliction-AllItems-Theralion'sMirror-65105" value: { - dps: 37507.30918 - tps: 26437.19761 + dps: 37556.05981 + tps: 26492.55765 } } dps_results: { key: "TestAffliction-AllItems-Throngus'sFinger-56121" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Throngus'sFinger-56449" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Tia'sGrace-55874" value: { - dps: 36105.99594 - tps: 25294.15294 + dps: 35993.16021 + tps: 25280.80634 } } dps_results: { key: "TestAffliction-AllItems-Tia'sGrace-56394" value: { - dps: 36146.48929 - tps: 25330.96627 + dps: 36033.69343 + tps: 25317.60045 } } dps_results: { key: "TestAffliction-AllItems-TinyAbominationinaJar-50706" value: { - dps: 36070.19035 - tps: 25240.2959 + dps: 35861.14536 + tps: 25174.90449 } } dps_results: { key: "TestAffliction-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 36990.34676 - tps: 25930.33921 + dps: 36819.5486 + tps: 25745.70203 } } dps_results: { key: "TestAffliction-AllItems-UnheededWarning-59520" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-UnquenchableFlame-67101" value: { - dps: 35764.61891 - tps: 24988.04395 + dps: 35643.03165 + tps: 25065.9377 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-62463" value: { - dps: 36171.45661 - tps: 25350.6868 + dps: 36046.79635 + tps: 25440.05724 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-62468" value: { - dps: 36171.45661 - tps: 25350.6868 + dps: 36046.79635 + tps: 25440.05724 } } dps_results: { key: "TestAffliction-AllItems-UnsolvableRiddle-68709" value: { - dps: 36171.45661 - tps: 25350.6868 + dps: 36046.79635 + tps: 25440.05724 } } dps_results: { key: "TestAffliction-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 36882.95701 - tps: 25758.95356 + dps: 37055.14642 + tps: 25903.1393 } } dps_results: { key: "TestAffliction-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36127.98105 - tps: 25308.85081 + dps: 35987.72994 + tps: 25275.33174 } } dps_results: { key: "TestAffliction-AllItems-VeilofLies-72900" value: { - dps: 35780.66772 - tps: 25023.45933 + dps: 35740.37516 + tps: 25092.69507 } } dps_results: { key: "TestAffliction-AllItems-VesselofAcceleration-68995" value: { - dps: 35951.41697 - tps: 25129.26793 + dps: 35801.64439 + tps: 25127.11025 } } dps_results: { key: "TestAffliction-AllItems-VesselofAcceleration-69167" value: { - dps: 35949.92603 - tps: 25122.78819 + dps: 35832.53872 + tps: 25132.87844 } } dps_results: { key: "TestAffliction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 32779.50043 - tps: 23216.87292 + dps: 33184.44255 + tps: 23177.12207 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77207" value: { - dps: 35977.38845 - tps: 25196.57585 + dps: 35859.22723 + tps: 25172.00508 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77979" value: { - dps: 35950.07685 - tps: 25171.13005 + dps: 35843.68153 + tps: 25157.086 } } dps_results: { key: "TestAffliction-AllItems-VialofShadows-77999" value: { - dps: 35980.55507 - tps: 25200.03887 + dps: 35860.68298 + tps: 25175.31593 } } dps_results: { key: "TestAffliction-AllItems-VialofStolenMemories-59515" value: { - dps: 35787.47569 - tps: 25056.93023 + dps: 35715.89818 + tps: 25092.23903 } } dps_results: { key: "TestAffliction-AllItems-VialofStolenMemories-65109" value: { - dps: 35806.72468 - tps: 25046.01073 + dps: 35708.33781 + tps: 25061.01556 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 36835.9179 - tps: 25706.46163 + dps: 36704.86216 + tps: 25801.31858 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 36960.55459 - tps: 25790.52119 + dps: 36828.64905 + tps: 25886.01627 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 35777.49519 - tps: 24992.62251 + dps: 35653.65604 + tps: 25082.0604 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 36120.71662 - tps: 25275.02133 + dps: 35942.07975 + tps: 25243.4259 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 36276.59971 - tps: 25401.54524 + dps: 36166.0464 + tps: 25366.61347 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 36259.77596 - tps: 25402.61321 + dps: 36290.86848 + tps: 25492.42436 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 35691.57519 - tps: 24979.47976 + dps: 35705.92688 + tps: 25075.74399 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 36106.72381 - tps: 25358.08089 + dps: 36125.1229 + tps: 25455.31121 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 35691.57519 - tps: 24979.47976 + dps: 35705.92688 + tps: 25075.74399 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 36668.77788 - tps: 25598.86161 + dps: 36534.93643 + tps: 25565.25128 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 36752.30759 - tps: 25658.78962 + dps: 36656.13277 + tps: 25663.05154 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77198" value: { - dps: 38515.21367 - tps: 26830.0362 + dps: 38282.51469 + tps: 26838.55513 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77975" value: { - dps: 38189.71426 - tps: 26619.83836 + dps: 37953.35796 + tps: 26606.01722 } } dps_results: { key: "TestAffliction-AllItems-WillofUnbinding-77995" value: { - dps: 38796.84666 - tps: 27003.10399 + dps: 38645.75951 + tps: 27079.13828 } } dps_results: { key: "TestAffliction-AllItems-WitchingHourglass-55787" value: { - dps: 36897.76623 - tps: 25805.6483 + dps: 36653.07427 + tps: 25654.40162 } } dps_results: { key: "TestAffliction-AllItems-WitchingHourglass-56320" value: { - dps: 37266.7088 - tps: 26037.76664 + dps: 37322.31764 + tps: 26233.37138 } } dps_results: { key: "TestAffliction-AllItems-World-QuellerFocus-63842" value: { - dps: 36046.27261 - tps: 25236.90936 + dps: 35921.87326 + tps: 25326.30124 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77197" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77974" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-WrathofUnchaining-77994" value: { - dps: 35796.77398 - tps: 25013.03299 + dps: 35683.63378 + tps: 24999.83309 } } dps_results: { key: "TestAffliction-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 35881.97153 - tps: 25148.13435 + dps: 36049.72097 + tps: 25373.54434 } } dps_results: { key: "TestAffliction-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 35881.97153 - tps: 25148.13435 + dps: 36049.72097 + tps: 25373.54434 } } dps_results: { key: "TestAffliction-Average-Default" value: { - dps: 38595.74637 - tps: 26995.90329 + dps: 38588.3039 + tps: 26987.64674 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 38999.33512 - tps: 34139.97156 + dps: 38956.22067 + tps: 34098.92963 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37847.57921 - tps: 26690.01079 + dps: 37822.03434 + tps: 26626.40477 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 46174.06951 - tps: 29745.41211 + dps: 46204.94357 + tps: 29762.10756 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25348.12714 - tps: 25252.73541 + dps: 25281.05133 + tps: 25198.93387 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25348.12714 - tps: 17631.11493 + dps: 25281.05133 + tps: 17577.31339 } } dps_results: { key: "TestAffliction-Settings-Goblin-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28046.66532 - tps: 17364.77058 + dps: 27967.90829 + tps: 17148.48851 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 38580.61828 - tps: 33819.68645 + dps: 38600.41651 + tps: 33837.88884 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37570.5694 - tps: 26402.61478 + dps: 37497.31622 + tps: 26488.09508 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 45848.55087 - tps: 29533.11244 + dps: 45710.56658 + tps: 29581.38701 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25227.79766 - tps: 25031.18831 + dps: 25185.26723 + tps: 25001.43085 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25227.79766 - tps: 17552.47322 + dps: 25185.26723 + tps: 17522.71575 } } dps_results: { key: "TestAffliction-Settings-Human-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 27325.93067 - tps: 16726.30019 + dps: 27299.21561 + tps: 16755.03989 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 39271.809 - tps: 34027.47489 + dps: 39285.27622 + tps: 34037.08082 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38265.71112 - tps: 26600.37151 + dps: 38185.39703 + tps: 26687.40888 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 45672.51901 - tps: 29994.82195 + dps: 45843.71178 + tps: 30025.89851 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25703.8171 - tps: 25147.46771 + dps: 25675.51717 + tps: 25124.84027 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25703.8171 - tps: 17668.00089 + dps: 25675.51717 + tps: 17645.37346 } } dps_results: { key: "TestAffliction-Settings-Orc-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 27718.19144 - tps: 17019.39507 + dps: 27671.84345 + tps: 17114.01593 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 38913.13349 - tps: 34059.99992 + dps: 38781.29963 + tps: 34075.96365 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37901.01856 - tps: 26754.92615 + dps: 37778.50173 + tps: 26702.94262 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 47308.96059 - tps: 30826.4667 + dps: 47157.75955 + tps: 30656.31156 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 25363.00743 - tps: 25339.89094 + dps: 25352.73702 + tps: 25310.71698 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25363.00743 - tps: 17718.27046 + dps: 25352.73702 + tps: 17689.0965 } } dps_results: { key: "TestAffliction-Settings-Troll-p3-Affliction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28705.86272 - tps: 17735.17056 + dps: 28745.13145 + tps: 17658.28505 } } dps_results: { key: "TestAffliction-SwitchInFrontOfTarget-Default" value: { - dps: 38133.66411 - tps: 26600.37151 + dps: 38053.35001 + tps: 26687.40888 } } diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index c84922b0d2..5d852cccad 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestDemonology-AllItems-AgileShadowspiritDiamond" value: { - dps: 39997.25654 - tps: 20026.83212 + dps: 39978.47143 + tps: 20067.26006 } } dps_results: { key: "TestDemonology-AllItems-Althor'sAbacus-50366" value: { - dps: 37728.32564 - tps: 19009.94515 + dps: 37852.87921 + tps: 19006.8136 } } dps_results: { key: "TestDemonology-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37933.08287 - tps: 19040.8181 + dps: 38028.96658 + tps: 19055.70932 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-55889" value: { - dps: 38384.05212 - tps: 19354.48641 + dps: 38562.01587 + tps: 19472.56432 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-56407" value: { - dps: 38463.05343 - tps: 19386.7767 + dps: 38640.43289 + tps: 19503.9706 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ArrowofTime-72897" value: { - dps: 37592.58017 - tps: 18954.93238 + dps: 37397.48612 + tps: 18887.3552 } } dps_results: { key: "TestDemonology-AllItems-AustereShadowspiritDiamond" value: { - dps: 39675.08021 - tps: 19803.18104 + dps: 39651.95956 + tps: 19840.71076 } } dps_results: { key: "TestDemonology-AllItems-Balespider'sBurningVestments" value: { - dps: 36635.41045 - tps: 18503.02392 + dps: 36684.84796 + tps: 18428.83938 } } dps_results: { key: "TestDemonology-AllItems-BaubleofTrueBlood-50726" value: { - dps: 37060.73911 - tps: 18690.22714 - hps: 102.07136 + dps: 37190.2422 + tps: 18741.53571 + hps: 101.68908 } } dps_results: { key: "TestDemonology-AllItems-BedrockTalisman-58182" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-59326" value: { - dps: 39288.03096 - tps: 19785.77361 + dps: 39212.73455 + tps: 19708.83567 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-65053" value: { - dps: 39483.7112 - tps: 19748.76469 + dps: 39352.20027 + tps: 19749.84569 } } dps_results: { key: "TestDemonology-AllItems-BindingPromise-67037" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 37575.61609 - tps: 18895.6304 + dps: 37670.35118 + tps: 18910.00191 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-55995" value: { - dps: 37617.43842 - tps: 18924.85372 + dps: 37712.15185 + tps: 18939.32108 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-56414" value: { - dps: 37734.37766 - tps: 18954.09873 + dps: 37829.39189 + tps: 18968.64026 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 37089.14764 - tps: 18695.20079 + dps: 37145.08861 + tps: 18724.28821 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 37941.96294 - tps: 19145.52611 + dps: 38034.99411 + tps: 19163.85603 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 37780.62798 - tps: 19104.75424 + dps: 37692.09577 + tps: 18997.39179 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 37073.85152 - tps: 18701.17584 + dps: 37150.057 + tps: 18714.56092 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 38092.12253 - tps: 19187.70125 + dps: 38168.59077 + tps: 19197.72926 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77210" value: { - dps: 37226.80749 - tps: 18848.26773 + dps: 37336.53097 + tps: 18889.67256 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77982" value: { - dps: 37211.85577 - tps: 18835.32466 + dps: 37309.83213 + tps: 18864.03411 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-78002" value: { - dps: 37258.16476 - tps: 18880.92033 + dps: 37352.45991 + tps: 18901.56711 } } dps_results: { key: "TestDemonology-AllItems-BottledLightning-66879" value: { - dps: 38035.31234 - tps: 19195.19914 + dps: 37917.7362 + tps: 19156.41297 } } dps_results: { key: "TestDemonology-AllItems-BottledWishes-77114" value: { - dps: 39288.00632 - tps: 19836.57724 + dps: 39338.36675 + tps: 19822.71362 } } dps_results: { key: "TestDemonology-AllItems-BracingShadowspiritDiamond" value: { - dps: 39888.11207 - tps: 19523.93005 + dps: 39836.07177 + tps: 19537.38477 } } dps_results: { key: "TestDemonology-AllItems-Brawler'sTrophy-232015" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-BurningShadowspiritDiamond" value: { - dps: 40213.68745 - tps: 20135.50013 + dps: 40164.32709 + tps: 20151.08765 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 38455.40515 - tps: 19408.1275 + dps: 38548.58659 + tps: 19429.0769 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 38720.55 - tps: 19466.5545 + dps: 38825.70259 + tps: 19485.80088 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 37073.89415 - tps: 18701.54954 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 40114.44709 - tps: 20108.0143 + dps: 40100.17291 + tps: 20148.28387 } } dps_results: { key: "TestDemonology-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 37792.29781 - tps: 19114.86289 + dps: 37699.77472 + tps: 19004.44102 } } dps_results: { key: "TestDemonology-AllItems-CoreofRipeness-58184" value: { - dps: 38248.7195 - tps: 19252.59371 + dps: 38327.55066 + tps: 19234.40356 } } dps_results: { key: "TestDemonology-AllItems-CorpseTongueCoin-50349" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 37761.50449 - tps: 19004.33207 + dps: 37680.40135 + tps: 19008.84773 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 37859.18862 - tps: 19058.41118 + dps: 37732.11573 + tps: 19051.46045 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 37880.32933 - tps: 19132.54967 + dps: 38110.16875 + tps: 19116.36834 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-59506" value: { - dps: 37541.6211 - tps: 18898.11657 + dps: 37632.75568 + tps: 19006.49439 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-65118" value: { - dps: 37715.53274 - tps: 18991.43055 + dps: 37459.27798 + tps: 18864.86279 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77208" value: { - dps: 40394.75703 - tps: 21095.77488 + dps: 40628.93694 + tps: 21127.57398 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77980" value: { - dps: 40084.68478 - tps: 20753.79806 + dps: 40345.74142 + tps: 20934.32332 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-78000" value: { - dps: 40931.44961 - tps: 21376.02826 + dps: 41115.29099 + tps: 21506.98488 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 38248.7195 - tps: 19252.59371 + dps: 38327.55066 + tps: 19234.40356 } } dps_results: { key: "TestDemonology-AllItems-Deathbringer'sWill-50363" value: { - dps: 37497.44644 - tps: 18909.07588 + dps: 37475.14888 + tps: 18923.29811 } } dps_results: { key: "TestDemonology-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 39785.41531 - tps: 19879.92527 + dps: 39769.35357 + tps: 19918.13548 } } dps_results: { key: "TestDemonology-AllItems-DislodgedForeignObject-50348" value: { - dps: 37906.70764 - tps: 19115.80371 + dps: 38062.2103 + tps: 19152.25184 } } dps_results: { key: "TestDemonology-AllItems-Dwyer'sCaber-70141" value: { - dps: 37907.73203 - tps: 19084.78656 + dps: 37903.11748 + tps: 19046.61255 } } dps_results: { key: "TestDemonology-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 39675.08021 - tps: 19803.18104 + dps: 39651.95956 + tps: 19840.71076 } } dps_results: { key: "TestDemonology-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 37527.62397 - tps: 18978.69615 + dps: 37636.73684 + tps: 19020.3463 } } dps_results: { key: "TestDemonology-AllItems-EmberShadowspiritDiamond" value: { - dps: 39888.11207 - tps: 19915.73985 + dps: 39836.07177 + tps: 19928.00287 } } dps_results: { key: "TestDemonology-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 39785.41531 - tps: 19879.92527 + dps: 39769.35357 + tps: 19918.13548 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-59473" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-65140" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 37933.08287 - tps: 19040.8181 + dps: 38028.96658 + tps: 19055.70932 } } dps_results: { key: "TestDemonology-AllItems-EternalShadowspiritDiamond" value: { - dps: 39675.08021 - tps: 19803.18104 + dps: 39651.95956 + tps: 19840.71076 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77200" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77977" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77997" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-59500" value: { - dps: 38248.7195 - tps: 19252.59371 + dps: 38327.55066 + tps: 19234.40356 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-65124" value: { - dps: 38399.10846 - tps: 19325.29683 + dps: 38443.44123 + tps: 19300.25621 } } dps_results: { key: "TestDemonology-AllItems-FieryQuintessence-69000" value: { - dps: 38273.36984 - tps: 19384.39429 + dps: 38404.34516 + tps: 19317.85876 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DemonPanther-52199" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DreamOwl-52354" value: { - dps: 38125.72008 - tps: 19193.13359 + dps: 38195.11155 + tps: 19192.48479 } } dps_results: { key: "TestDemonology-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.53276 } } dps_results: { key: "TestDemonology-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 38946.16192 - tps: 19611.38974 + dps: 39020.341 + tps: 19616.73537 } } dps_results: { key: "TestDemonology-AllItems-Figurine-KingofBoars-52351" value: { - dps: 37734.37766 - tps: 18954.09873 + dps: 37829.39189 + tps: 18968.64026 } } dps_results: { key: "TestDemonology-AllItems-FireoftheDeep-77117" value: { - dps: 38103.06857 - tps: 19107.41345 + dps: 38199.40747 + tps: 19122.34381 } } dps_results: { key: "TestDemonology-AllItems-FleetShadowspiritDiamond" value: { - dps: 39746.53241 - tps: 19853.11865 + dps: 39723.51086 + tps: 19890.75123 } } dps_results: { key: "TestDemonology-AllItems-FluidDeath-58181" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-ForlornShadowspiritDiamond" value: { - dps: 39888.11207 - tps: 19909.51532 + dps: 39836.07177 + tps: 19923.5268 } } dps_results: { key: "TestDemonology-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 39456.2913 - tps: 19683.08061 + dps: 39569.25485 + tps: 19709.40529 } } dps_results: { key: "TestDemonology-AllItems-FuryofAngerforge-59461" value: { - dps: 37809.93403 - tps: 19122.72579 + dps: 37713.98402 + tps: 19037.85672 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56138" value: { - dps: 38225.71217 - tps: 19227.90691 + dps: 38328.23756 + tps: 19300.52144 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56462" value: { - dps: 38405.21252 - tps: 19342.80018 + dps: 38398.55541 + tps: 19425.82374 } } dps_results: { key: "TestDemonology-AllItems-GearDetector-61462" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { @@ -669,703 +669,703 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-GlowingTwilightScale-54589" value: { - dps: 37767.54645 - tps: 19027.86698 + dps: 37882.19971 + tps: 19022.38047 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-55266" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-56295" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HarmlightToken-63839" value: { - dps: 38289.9922 - tps: 19238.72562 + dps: 38370.11503 + tps: 19300.74663 } } dps_results: { key: "TestDemonology-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-59514" value: { - dps: 38586.26619 - tps: 19463.72523 + dps: 38788.87453 + tps: 19656.28504 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-65110" value: { - dps: 38980.83841 - tps: 19663.45333 + dps: 39363.58648 + tps: 19781.63807 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-59224" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-65072" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-55868" value: { - dps: 37484.05336 - tps: 18864.65374 + dps: 37582.35068 + tps: 18935.71596 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-56393" value: { - dps: 37561.77532 - tps: 18930.17529 + dps: 37556.12986 + tps: 19011.42299 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-55845" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-56370" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-HeartoftheVile-66969" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 39785.41531 - tps: 19879.92527 + dps: 39769.35357 + tps: 19918.13548 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62464" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62469" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-55881" value: { - dps: 37617.43842 - tps: 18924.85372 + dps: 37712.15185 + tps: 18939.32108 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-56406" value: { - dps: 37734.37766 - tps: 18954.09873 + dps: 37829.39189 + tps: 18968.64026 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77211" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.59583 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77983" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.57691 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-78003" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.61717 } } dps_results: { key: "TestDemonology-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 40288.43062 - tps: 20336.14044 + dps: 40269.32567 + tps: 20336.61708 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 39882.2154 - tps: 20171.17077 + dps: 39862.06129 + tps: 20178.84405 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 40710.79848 - tps: 20528.1422 + dps: 40470.74999 + tps: 20481.23745 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 38113.00785 - tps: 19163.13013 + dps: 38206.05896 + tps: 19179.40632 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-59354" value: { - dps: 37073.85152 - tps: 18713.33559 + dps: 37153.1212 + tps: 18721.80152 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-65029" value: { - dps: 37073.85152 - tps: 18714.50568 + dps: 37181.61189 + tps: 18735.46545 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-68926" value: { - dps: 38434.51884 - tps: 19364.80959 + dps: 38516.32033 + tps: 19363.72515 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-69111" value: { - dps: 38647.20382 - tps: 19486.79106 + dps: 38740.31725 + tps: 19483.76932 } } dps_results: { key: "TestDemonology-AllItems-JujuofNimbleness-63840" value: { - dps: 37575.61609 - tps: 18895.6304 + dps: 37670.35118 + tps: 18910.00191 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-KiroptyricSigil-77113" value: { - dps: 37988.94139 - tps: 19173.70015 + dps: 38046.27459 + tps: 19157.80199 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59685" value: { - dps: 37264.4656 - tps: 18701.6599 + dps: 37296.50658 + tps: 18726.25655 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59689" value: { - dps: 37264.4656 - tps: 18701.6599 + dps: 37296.50658 + tps: 18726.25655 } } dps_results: { key: "TestDemonology-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 37390.11298 - tps: 18734.92536 + dps: 37461.51865 + tps: 18903.60985 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-55816" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.50754 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-56347" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.53276 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56102" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56427" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-LicensetoSlay-58180" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-55814" value: { - dps: 37073.61212 - tps: 18701.54954 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-56345" value: { - dps: 37073.61212 - tps: 18701.54954 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 37073.85152 - tps: 18701.15242 + dps: 37150.057 + tps: 18714.53751 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 37073.85152 - tps: 18701.15242 + dps: 37150.057 + tps: 18714.53751 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56132" value: { - dps: 37412.76339 - tps: 18797.86084 + dps: 37502.71596 + tps: 18810.44674 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56458" value: { - dps: 37455.93315 - tps: 18810.47304 + dps: 37545.52495 + tps: 18822.88951 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-68994" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-69150" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-55251" value: { - dps: 37623.5856 - tps: 19018.54083 + dps: 37794.9993 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-56285" value: { - dps: 37623.5856 - tps: 19018.54083 + dps: 37794.9993 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62466" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62471" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-MithrilStopwatch-232013" value: { - dps: 39034.79294 - tps: 19658.99846 + dps: 38915.29241 + tps: 19530.89242 } } dps_results: { key: "TestDemonology-AllItems-MoonwellChalice-70142" value: { - dps: 39222.70182 - tps: 19780.45731 + dps: 39284.49937 + tps: 19804.48398 } } dps_results: { key: "TestDemonology-AllItems-MoonwellPhial-70143" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.5529 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-68982" value: { - dps: 39144.57389 - tps: 19609.51886 + dps: 39227.64861 + tps: 19606.91962 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-69139" value: { - dps: 39468.61381 - tps: 19763.99428 + dps: 39564.30757 + tps: 19759.77478 } } dps_results: { key: "TestDemonology-AllItems-Oremantle'sFavor-61448" value: { - dps: 37668.90031 - tps: 18993.89707 + dps: 37578.90375 + tps: 18995.38123 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 38188.26934 - tps: 19224.97792 + dps: 38265.80656 + tps: 19215.02845 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 38400.83743 - tps: 19325.97137 + dps: 38386.57618 + tps: 19341.03787 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-55237" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-56280" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 39675.08021 - tps: 19803.18104 + dps: 39651.95956 + tps: 19840.71076 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-55854" value: { - dps: 37073.85152 - tps: 18701.27652 + dps: 37150.057 + tps: 18714.6616 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-56377" value: { - dps: 37073.85152 - tps: 18701.19457 + dps: 37150.057 + tps: 18714.57965 } } dps_results: { key: "TestDemonology-AllItems-ReflectionoftheLight-77115" value: { - dps: 38397.18613 - tps: 19376.39994 + dps: 38467.49501 + tps: 19394.06681 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77201" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77978" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77998" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 39997.25654 - tps: 20026.83212 + dps: 39978.47143 + tps: 20067.26006 } } dps_results: { key: "TestDemonology-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 39997.25654 - tps: 20026.76562 + dps: 39978.47143 + tps: 20067.1761 } } dps_results: { key: "TestDemonology-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37859.81559 - tps: 19123.33854 + dps: 37877.48726 + tps: 19167.84881 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56100" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56431" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-RosaryofLight-72901" value: { - dps: 37481.62312 - tps: 18846.48425 + dps: 37524.24112 + tps: 18900.99064 } } dps_results: { key: "TestDemonology-AllItems-RottingSkull-77116" value: { - dps: 37972.66873 - tps: 19254.4983 + dps: 37880.82193 + tps: 19189.23271 } } dps_results: { key: "TestDemonology-AllItems-RuneofZeth-68998" value: { - dps: 39069.97381 - tps: 19830.35542 + dps: 38964.14126 + tps: 19782.53836 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 38232.66604 - tps: 19294.20699 + dps: 38325.78229 + tps: 19314.02001 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 38298.34552 - tps: 19327.79893 + dps: 38391.481 + tps: 19347.94704 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 38397.97044 - tps: 19317.21697 + dps: 38508.69083 + tps: 19337.01629 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 38472.52743 - tps: 19352.24677 + dps: 38551.81701 + tps: 19360.47701 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-68915" value: { - dps: 37075.75998 - tps: 18704.81865 + dps: 37188.49796 + tps: 18739.5384 hps: 357.04731 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-69109" value: { - dps: 37075.75998 - tps: 18704.81865 + dps: 37188.49796 + tps: 18739.55659 hps: 402.74602 } } dps_results: { key: "TestDemonology-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-55256" value: { - dps: 37510.76286 - tps: 18924.75354 + dps: 37587.13356 + tps: 18940.30177 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-56290" value: { - dps: 37887.70597 - tps: 19117.44259 + dps: 37964.21922 + tps: 19134.85706 } } dps_results: { @@ -1378,1274 +1378,1274 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-ShardofWoe-60233" value: { - dps: 37616.26821 - tps: 18924.03757 + dps: 37893.09723 + tps: 19140.15018 } } dps_results: { key: "TestDemonology-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.49177 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56115" value: { - dps: 37458.87439 - tps: 18826.53585 + dps: 37562.94596 + tps: 18849.98856 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56440" value: { - dps: 37508.02917 - tps: 18842.9059 + dps: 37613.60671 + tps: 18867.60942 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-55879" value: { - dps: 38297.751 - tps: 19263.14876 + dps: 38393.08864 + tps: 19274.15688 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-56400" value: { - dps: 38506.13767 - tps: 19337.27588 + dps: 38601.86156 + tps: 19347.87664 } } dps_results: { key: "TestDemonology-AllItems-Soul'sAnguish-66994" value: { - dps: 37623.5856 - tps: 19018.54083 + dps: 37794.9993 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-SoulCasket-58183" value: { - dps: 38902.19023 - tps: 19558.53721 + dps: 38997.57471 + tps: 19578.81028 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77206" value: { - dps: 38261.70445 - tps: 18985.60123 + dps: 38422.21838 + tps: 19028.94393 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77970" value: { - dps: 38116.62979 - tps: 18950.86329 + dps: 38226.76071 + tps: 18962.2754 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77990" value: { - dps: 38046.34717 - tps: 18838.19676 + dps: 38179.13084 + tps: 18879.52303 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-68981" value: { - dps: 37933.2123 - tps: 19040.94753 + dps: 38028.96658 + tps: 19055.70932 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-69138" value: { - dps: 38071.57034 - tps: 19085.25814 + dps: 38167.7403 + tps: 19100.13232 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77202" value: { - dps: 38541.61293 - tps: 19587.09035 + dps: 38463.81132 + tps: 19622.20752 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77973" value: { - dps: 38305.4123 - tps: 19331.13736 + dps: 38257.80954 + tps: 19381.36204 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77993" value: { - dps: 38995.4432 - tps: 19628.86587 + dps: 38802.80759 + tps: 19652.65661 } } dps_results: { key: "TestDemonology-AllItems-StayofExecution-68996" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Stonemother'sKiss-61411" value: { - dps: 38414.00408 - tps: 19286.73468 + dps: 38327.24917 + tps: 19388.07475 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62465" value: { - dps: 38853.01366 - tps: 19609.57899 + dps: 39034.41044 + tps: 19725.38598 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62470" value: { - dps: 38986.59075 - tps: 19623.85869 + dps: 39183.82684 + tps: 19745.82678 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-59332" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.5461 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-65048" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.56114 } } dps_results: { key: "TestDemonology-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 38306.17356 - tps: 19160.81848 + dps: 38400.64074 + tps: 19162.3778 } } dps_results: { key: "TestDemonology-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-55819" value: { - dps: 37893.7982 - tps: 19078.82699 + dps: 37993.64039 + tps: 19079.12866 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-56351" value: { - dps: 38125.72008 - tps: 19193.13359 + dps: 38195.11155 + tps: 19192.48479 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 38331.30173 - tps: 19247.41078 + dps: 38434.17314 + tps: 19268.86276 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 38804.3288 - tps: 19437.01024 + dps: 38901.82794 + tps: 19461.7769 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-68927" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-69112" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-59519" value: { - dps: 38920.9352 - tps: 19433.75413 + dps: 39049.90046 + tps: 19454.67103 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-65105" value: { - dps: 39179.75201 - tps: 19546.74953 + dps: 39199.8854 + tps: 19499.32365 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56121" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56449" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-55874" value: { - dps: 37617.43842 - tps: 18924.85372 + dps: 37712.15185 + tps: 18939.32108 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-56394" value: { - dps: 37734.37766 - tps: 18954.09873 + dps: 37829.39189 + tps: 18968.64026 } } dps_results: { key: "TestDemonology-AllItems-TinyAbominationinaJar-50706" value: { - dps: 37490.73083 - tps: 18909.67092 + dps: 37659.05292 + tps: 19047.45103 } } dps_results: { key: "TestDemonology-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 38360.65435 - tps: 19318.90211 + dps: 38334.67972 + tps: 19314.09228 } } dps_results: { key: "TestDemonology-AllItems-UnheededWarning-59520" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-UnquenchableFlame-67101" value: { - dps: 37073.85152 - tps: 18701.32686 + dps: 37150.057 + tps: 18714.71194 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62463" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62468" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-68709" value: { - dps: 37779.73511 - tps: 18986.00237 + dps: 37874.99262 + tps: 19000.62481 } } dps_results: { key: "TestDemonology-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 38618.69523 - tps: 19254.27416 + dps: 38220.87182 + tps: 19278.83665 } } dps_results: { key: "TestDemonology-AllItems-Varo'then'sBrooch-72899" value: { - dps: 37475.56359 - tps: 18830.71727 + dps: 37607.96539 + tps: 18866.35427 } } dps_results: { key: "TestDemonology-AllItems-VeilofLies-72900" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.56866 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-68995" value: { - dps: 37171.61914 - tps: 18753.57487 + dps: 37230.96936 + tps: 18738.02197 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-69167" value: { - dps: 37181.21878 - tps: 18762.28304 + dps: 37255.30716 + tps: 18772.24993 } } dps_results: { key: "TestDemonology-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 34590.90742 - tps: 17499.51725 + dps: 34936.9393 + tps: 17352.95002 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77207" value: { - dps: 37270.71135 - tps: 18894.22662 + dps: 37377.13438 + tps: 18923.91884 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77979" value: { - dps: 37246.95529 - tps: 18874.38946 + dps: 37351.05965 + tps: 18900.07734 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77999" value: { - dps: 37285.83359 - tps: 18909.28484 + dps: 37381.80941 + tps: 18932.71808 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-59515" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.5461 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-65109" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.56114 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 37990.50864 - tps: 19170.35494 + dps: 38083.55403 + tps: 19188.93253 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 38098.45144 - tps: 19225.56257 + dps: 38191.52842 + tps: 19244.69087 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 37623.6241 - tps: 19018.56641 + dps: 37795.01222 + tps: 19131.86746 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37350.56179 - tps: 18946.27549 + dps: 37560.062 + tps: 18946.56282 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 37871.03566 - tps: 19163.81368 + dps: 37733.7532 + tps: 19043.31751 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 37803.67377 - tps: 19002.8404 + dps: 37899.05968 + tps: 19017.50555 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 38111.80637 - tps: 19187.63613 + dps: 38207.6224 + tps: 19204.40168 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 38268.17842 - tps: 19268.16625 + dps: 38382.29873 + tps: 19288.31908 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 37073.89415 - tps: 18701.54954 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77198" value: { - dps: 40239.9177 - tps: 20324.00054 + dps: 40084.81072 + tps: 20171.79134 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77975" value: { - dps: 39921.79711 - tps: 20137.94144 + dps: 39792.51873 + tps: 20004.55998 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77995" value: { - dps: 40620.74265 - tps: 20502.39496 + dps: 40453.5403 + tps: 20355.03651 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-55787" value: { - dps: 38250.49692 - tps: 19363.56808 + dps: 38492.33141 + tps: 19419.33225 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-56320" value: { - dps: 38933.75264 - tps: 19798.10405 + dps: 38915.99013 + tps: 19637.41918 } } dps_results: { key: "TestDemonology-AllItems-World-QuellerFocus-63842" value: { - dps: 37575.86075 - tps: 18895.60871 + dps: 37670.35118 + tps: 18910.00191 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77197" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77974" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77994" value: { - dps: 37073.85152 - tps: 18701.52822 + dps: 37166.62863 + tps: 18715.4292 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 37369.59364 - tps: 18785.24865 + dps: 37459.90697 + tps: 18798.08376 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 37369.59364 - tps: 18785.24865 + dps: 37459.90697 + tps: 18798.08376 } } dps_results: { key: "TestDemonology-Average-Default" value: { - dps: 40519.86295 - tps: 20291.32032 + dps: 40505.4539 + tps: 20300.49518 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54418.72662 - tps: 46959.24477 + dps: 54186.56656 + tps: 46385.30782 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38112.24777 - tps: 19549.58618 + dps: 38184.77703 + tps: 19586.24021 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51964.79577 - tps: 27125.44115 + dps: 52056.82905 + tps: 27227.23957 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46538.00288 - tps: 43244.9696 + dps: 46672.01837 + tps: 43177.78599 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27144.99625 - tps: 13977.41183 + dps: 26911.7799 + tps: 13963.68938 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33442.09875 - tps: 17680.55961 + dps: 33701.15948 + tps: 18009.71524 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54568.22102 - tps: 46792.22521 + dps: 54394.89453 + tps: 46310.42522 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38581.37716 - tps: 20689.59964 + dps: 38554.47655 + tps: 20664.40735 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53042.84417 - tps: 29117.28801 + dps: 53071.97863 + tps: 29262.67513 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46694.4427 - tps: 41159.22264 + dps: 46765.36979 + tps: 41301.90463 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27345.53817 - tps: 14692.12543 + dps: 27319.00319 + tps: 14765.96093 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33686.40051 - tps: 18901.70651 + dps: 33608.20211 + tps: 18939.06276 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55138.34583 - tps: 47797.35405 + dps: 54907.28608 + tps: 47265.03076 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38929.18738 - tps: 20180.4143 + dps: 38961.88816 + tps: 20110.5349 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53018.10428 - tps: 28064.15759 + dps: 53083.2899 + tps: 28128.92353 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47111.07303 - tps: 43416.69624 + dps: 47347.06964 + tps: 43736.06681 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27595.10483 - tps: 14363.60029 + dps: 27398.66483 + tps: 14326.54911 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33923.73497 - tps: 18251.62119 + dps: 34067.77847 + tps: 18508.63861 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48708.82123 - tps: 40550.73758 + dps: 48605.87769 + tps: 40234.76667 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34642.14513 - tps: 17671.51723 + dps: 34639.74204 + tps: 17787.7624 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49093.48855 - tps: 26238.23583 + dps: 49094.31198 + tps: 26427.98685 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42576.83427 - tps: 37823.00791 + dps: 42520.15348 + tps: 37781.41543 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25091.55519 - tps: 12781.42393 + dps: 25028.72024 + tps: 12747.12779 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31667.44718 - tps: 16980.92445 + dps: 31449.19399 + tps: 16723.76596 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54164.47555 - tps: 46602.63668 + dps: 54260.56906 + tps: 47165.1573 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37972.52074 - tps: 19466.57486 + dps: 37919.57299 + tps: 19557.08633 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51432.33843 - tps: 27089.99145 + dps: 51670.76344 + tps: 27173.18302 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46163.09441 - tps: 42759.28536 + dps: 46276.39112 + tps: 43143.86842 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26930.32085 - tps: 13913.58521 + dps: 26658.45835 + tps: 13824.48218 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33412.58625 - tps: 17783.42782 + dps: 33451.64654 + tps: 17956.8453 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54145.30497 - tps: 46068.34908 + dps: 54072.14017 + tps: 45611.28211 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38455.56801 - tps: 20683.04137 + dps: 38327.9197 + tps: 20591.07577 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52939.67643 - tps: 29283.55949 + dps: 52899.56106 + tps: 29357.49128 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46477.28098 - tps: 41010.00975 + dps: 46801.51319 + tps: 41292.29804 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27238.97434 - tps: 14630.15333 + dps: 27247.72858 + tps: 14643.97828 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33342.20627 - tps: 18633.99051 + dps: 33409.28806 + tps: 18834.21823 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54815.89168 - tps: 47095.09673 + dps: 54830.28995 + tps: 47564.45689 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38638.01082 - tps: 19997.91467 + dps: 38595.36021 + tps: 20102.1805 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52371.34608 - tps: 27856.21853 + dps: 52616.76939 + tps: 27962.0929 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46818.85253 - tps: 43331.78145 + dps: 46752.23678 + tps: 43319.96697 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27292.45099 - tps: 14226.0025 + dps: 27230.87097 + tps: 14242.35479 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33989.3738 - tps: 18211.99312 + dps: 34019.17201 + tps: 18381.73918 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48743.51216 - tps: 40631.37411 + dps: 48763.84455 + tps: 40990.41573 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34685.2083 - tps: 17814.74025 + dps: 34504.74309 + tps: 17809.61857 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 48431.74757 - tps: 25986.56227 + dps: 48437.0323 + tps: 26183.73645 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42543.40331 - tps: 37594.18293 + dps: 42505.13136 + tps: 38138.71096 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24923.89968 - tps: 12645.42959 + dps: 24906.52838 + tps: 12599.11473 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31539.62852 - tps: 16939.56656 + dps: 31197.30321 + tps: 16606.61831 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55126.53403 - tps: 46801.6679 + dps: 55104.68399 + tps: 46984.85157 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38797.57635 - tps: 19622.17383 + dps: 38724.6181 + tps: 19723.06277 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52718.83195 - tps: 27526.1661 + dps: 52945.99988 + tps: 27587.88931 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47246.00641 - tps: 43136.397 + dps: 47371.46696 + tps: 43211.97912 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27501.32509 - tps: 14024.30235 + dps: 27320.07243 + tps: 13966.08488 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34359.76278 - tps: 18089.7585 + dps: 34390.64865 + tps: 18269.02055 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55049.00136 - tps: 46345.31103 + dps: 55054.78554 + tps: 45830.22517 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39238.50271 - tps: 20829.28809 + dps: 39163.05522 + tps: 20776.16548 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54267.73949 - tps: 29752.58891 + dps: 54200.53361 + tps: 29796.85847 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47695.05362 - tps: 41574.49616 + dps: 47800.80987 + tps: 41762.3523 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27860.84613 - tps: 14737.67382 + dps: 27863.51672 + tps: 14768.53166 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34321.69476 - tps: 18955.38996 + dps: 34382.38862 + tps: 19158.11378 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55730.28329 - tps: 47125.94979 + dps: 55720.89958 + tps: 47194.50536 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39486.82492 - tps: 20197.04811 + dps: 39391.32545 + tps: 20263.64289 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53652.25845 - tps: 28287.67033 + dps: 53879.59191 + tps: 28367.29216 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47782.51242 - tps: 43557.63936 + dps: 47748.10998 + tps: 43501.97658 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27930.67985 - tps: 14405.74865 + dps: 27901.67238 + tps: 14420.32782 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34946.1603 - tps: 18521.27716 + dps: 34965.66334 + tps: 18697.08575 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49687.4302 - tps: 40817.33861 + dps: 49722.96997 + tps: 41162.43341 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35467.36109 - tps: 17956.87957 + dps: 35287.50705 + tps: 17965.31874 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49716.49034 - tps: 26448.31598 + dps: 49725.11357 + tps: 26654.60705 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 43653.67386 - tps: 37925.34078 + dps: 43511.51515 + tps: 38064.53395 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25594.53062 - tps: 12803.46277 + dps: 25517.96051 + tps: 12729.04846 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32523.34845 - tps: 17250.23971 + dps: 32174.02152 + tps: 16921.20115 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55072.83865 - tps: 47516.61109 + dps: 54933.30749 + tps: 47161.16738 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38813.38131 - tps: 20020.58641 + dps: 38697.3125 + tps: 20004.99114 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54009.10477 - tps: 28111.41973 + dps: 54315.78253 + tps: 28226.79059 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47743.88635 - tps: 44488.65613 + dps: 47638.8725 + tps: 44354.78561 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27436.12942 - tps: 14227.06284 + dps: 27291.99313 + tps: 14189.58605 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34735.40363 - tps: 18735.30434 + dps: 35086.42661 + tps: 19074.37707 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54988.97718 - tps: 46499.20618 + dps: 55051.45441 + tps: 46184.84949 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39158.21412 - tps: 21087.68332 + dps: 39221.3964 + tps: 21032.34852 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 55004.72773 - tps: 30461.78977 + dps: 54770.76674 + tps: 30031.74165 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48401.22611 - tps: 42833.78049 + dps: 48100.81925 + tps: 42582.19019 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28191.14071 - tps: 15134.63082 + dps: 28036.76494 + tps: 15054.13883 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 36083.5652 - tps: 20090.05921 + dps: 35984.36113 + tps: 20095.32468 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55748.43482 - tps: 48102.2157 + dps: 55553.68677 + tps: 47806.39561 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39422.98869 - tps: 20496.49555 + dps: 39309.10461 + tps: 20482.00469 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54900.29963 - tps: 28978.27072 + dps: 55250.13252 + tps: 29109.42399 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48428.75326 - tps: 44711.45729 + dps: 48514.51757 + tps: 44977.45736 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27832.95289 - tps: 14623.98514 + dps: 27767.25999 + tps: 14603.52479 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35134.7076 - tps: 19090.81454 + dps: 35534.94718 + tps: 19454.65546 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49442.14723 - tps: 40724.94602 + dps: 49344.54934 + tps: 40614.26367 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35391.30086 - tps: 18011.88552 + dps: 35441.42856 + tps: 18161.52939 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51239.76073 - tps: 26995.95875 + dps: 51424.63986 + tps: 27205.70813 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44007.01442 - tps: 38329.97463 + dps: 43898.44641 + tps: 38388.30712 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25323.9566 - tps: 12894.93372 + dps: 25176.74144 + tps: 12912.36091 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33159.35554 - tps: 18070.06378 + dps: 33012.32449 + tps: 18025.45969 } } dps_results: { key: "TestDemonology-SwitchInFrontOfTarget-Default" value: { - dps: 40031.07753 - tps: 20135.50013 + dps: 39981.71717 + tps: 20151.08765 } } diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index 05e684a1da..1d3c0c79a5 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -38,625 +38,625 @@ character_stats_results: { dps_results: { key: "TestDestruction-AllItems-AgileShadowspiritDiamond" value: { - dps: 40254.40096 - tps: 23820.03495 + dps: 40384.73187 + tps: 23922.57373 } } dps_results: { key: "TestDestruction-AllItems-Althor'sAbacus-50366" value: { - dps: 38660.20895 - tps: 22808.06174 + dps: 38625.86691 + tps: 22870.97614 } } dps_results: { key: "TestDestruction-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 38641.14767 - tps: 22840.57232 + dps: 38564.09092 + tps: 22853.24563 } } dps_results: { key: "TestDestruction-AllItems-Anhuur'sHymnal-55889" value: { - dps: 38860.12221 - tps: 22909.49181 + dps: 38779.83976 + tps: 22943.70128 } } dps_results: { key: "TestDestruction-AllItems-Anhuur'sHymnal-56407" value: { - dps: 38896.20949 - tps: 22942.27111 + dps: 38818.64934 + tps: 22968.60763 } } dps_results: { key: "TestDestruction-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ArrowofTime-72897" value: { - dps: 38653.36064 - tps: 22824.35222 + dps: 38643.46024 + tps: 22858.60886 } } dps_results: { key: "TestDestruction-AllItems-AustereShadowspiritDiamond" value: { - dps: 39835.01188 - tps: 23539.00066 + dps: 39958.6156 + tps: 23635.85692 } } dps_results: { key: "TestDestruction-AllItems-Balespider'sBurningVestments" value: { - dps: 37120.93369 - tps: 21851.86932 + dps: 37159.72343 + tps: 22082.62325 } } dps_results: { key: "TestDestruction-AllItems-BaubleofTrueBlood-50726" value: { - dps: 37943.75723 - tps: 22398.50629 - hps: 100.99448 + dps: 37979.46945 + tps: 22540.91773 + hps: 101.14686 } } dps_results: { key: "TestDestruction-AllItems-BedrockTalisman-58182" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-BellofEnragingResonance-59326" value: { - dps: 39898.04691 - tps: 23516.86172 + dps: 39753.14723 + tps: 23420.37122 } } dps_results: { key: "TestDestruction-AllItems-BellofEnragingResonance-65053" value: { - dps: 40162.07129 - tps: 23686.33574 + dps: 39976.2355 + tps: 23548.86997 } } dps_results: { key: "TestDestruction-AllItems-BindingPromise-67037" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 38392.82536 - tps: 22689.09825 + dps: 38306.59407 + tps: 22700.23726 } } dps_results: { key: "TestDestruction-AllItems-BloodofIsiset-55995" value: { - dps: 38471.93734 - tps: 22725.73711 + dps: 38398.14718 + tps: 22755.424 } } dps_results: { key: "TestDestruction-AllItems-BloodofIsiset-56414" value: { - dps: 38522.52654 - tps: 22757.22186 + dps: 38448.66885 + tps: 22786.96892 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 38027.4048 - tps: 22441.85005 + dps: 37967.76745 + tps: 22503.98081 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 39114.37156 - tps: 22997.66734 + dps: 39057.2499 + tps: 23069.44831 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 38611.99524 - tps: 22799.23894 + dps: 38462.41449 + tps: 22735.28375 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 38085.61982 - tps: 22485.66851 + dps: 38012.34534 + tps: 22514.89597 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 38085.61982 - tps: 22485.76755 + dps: 38012.34534 + tps: 22514.995 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 39096.61608 - tps: 23052.74156 + dps: 39018.32561 + tps: 23078.04511 } } dps_results: { key: "TestDestruction-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-77210" value: { - dps: 38207.51619 - tps: 22607.00831 + dps: 38138.27489 + tps: 22640.57257 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-77982" value: { - dps: 38191.6776 - tps: 22593.10846 + dps: 38123.09346 + tps: 22624.01845 } } dps_results: { key: "TestDestruction-AllItems-Bone-LinkFetish-78002" value: { - dps: 38224.76558 - tps: 22629.2121 + dps: 38165.37981 + tps: 22665.27575 } } dps_results: { key: "TestDestruction-AllItems-BottledLightning-66879" value: { - dps: 38836.73507 - tps: 22932.31489 + dps: 38751.4835 + tps: 22933.83353 } } dps_results: { key: "TestDestruction-AllItems-BottledWishes-77114" value: { - dps: 40166.09864 - tps: 23696.06542 + dps: 40343.53859 + tps: 23888.39425 } } dps_results: { key: "TestDestruction-AllItems-BracingShadowspiritDiamond" value: { - dps: 40044.87931 - tps: 23197.89503 + dps: 40152.41398 + tps: 23290.16951 } } dps_results: { key: "TestDestruction-AllItems-Brawler'sTrophy-232015" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-BurningShadowspiritDiamond" value: { - dps: 40467.75777 - tps: 23936.89419 + dps: 40581.30779 + tps: 24036.45451 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 39755.521 - tps: 23327.27463 + dps: 39696.93893 + tps: 23401.74948 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 39636.78159 - tps: 23333.71732 + dps: 39557.27743 + tps: 23359.56562 } } dps_results: { key: "TestDestruction-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 40313.91903 - tps: 23865.79028 + dps: 40443.63781 + tps: 23949.03178 } } dps_results: { key: "TestDestruction-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 38614.4116 - tps: 22812.54149 + dps: 38464.69437 + tps: 22735.51605 } } dps_results: { key: "TestDestruction-AllItems-CoreofRipeness-58184" value: { - dps: 39151.10318 - tps: 23114.66909 + dps: 39146.39792 + tps: 23190.23155 } } dps_results: { key: "TestDestruction-AllItems-CorpseTongueCoin-50349" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 38663.47126 - tps: 22850.07636 + dps: 38638.82351 + tps: 22891.53039 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 38765.88937 - tps: 22938.85357 + dps: 38581.48189 + tps: 22845.54118 } } dps_results: { key: "TestDestruction-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 38667.2085 - tps: 22801.41179 + dps: 38636.61335 + tps: 22859.3526 } } dps_results: { key: "TestDestruction-AllItems-CrushingWeight-59506" value: { - dps: 38402.03443 - tps: 22682.1101 + dps: 38401.76659 + tps: 22691.39782 } } dps_results: { key: "TestDestruction-AllItems-CrushingWeight-65118" value: { - dps: 38577.87517 - tps: 22800.00428 + dps: 38572.47072 + tps: 22851.97528 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-77208" value: { - dps: 40855.76916 - tps: 24627.75495 + dps: 40942.90269 + tps: 24750.78367 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-77980" value: { - dps: 40619.14389 - tps: 24464.1766 + dps: 40601.98946 + tps: 24436.82902 } } dps_results: { key: "TestDestruction-AllItems-CunningoftheCruel-78000" value: { - dps: 41230.56192 - tps: 24919.34438 + dps: 41321.30784 + tps: 24999.91216 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 38085.61982 - tps: 22485.7731 + dps: 38012.34534 + tps: 22515.00055 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 39207.10675 - tps: 23141.36119 + dps: 39176.73337 + tps: 23206.11624 } } dps_results: { key: "TestDestruction-AllItems-Deathbringer'sWill-50363" value: { - dps: 38349.26748 - tps: 22642.89637 + dps: 38213.90567 + tps: 22640.69965 } } dps_results: { key: "TestDestruction-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 39891.41492 - tps: 23582.29045 + dps: 40015.02048 + tps: 23661.07605 } } dps_results: { key: "TestDestruction-AllItems-DislodgedForeignObject-50348" value: { - dps: 39042.23078 - tps: 22963.26542 + dps: 39096.57471 + tps: 23075.86374 } } dps_results: { key: "TestDestruction-AllItems-Dwyer'sCaber-70141" value: { - dps: 38597.2046 - tps: 22752.86512 + dps: 38698.15962 + tps: 22893.74662 } } dps_results: { key: "TestDestruction-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 39835.01188 - tps: 23539.00066 + dps: 39958.6156 + tps: 23635.85692 } } dps_results: { key: "TestDestruction-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 38567.80655 - tps: 22744.6587 + dps: 38453.81267 + tps: 22759.0779 } } dps_results: { key: "TestDestruction-AllItems-EmberShadowspiritDiamond" value: { - dps: 40039.83137 - tps: 23666.38701 + dps: 40152.41398 + tps: 23762.31773 } } dps_results: { key: "TestDestruction-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 39891.41492 - tps: 23582.29045 + dps: 40015.02048 + tps: 23661.07605 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheCyclone-59473" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheCyclone-65140" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 38641.14767 - tps: 22840.57232 + dps: 38564.09092 + tps: 22853.24563 } } dps_results: { key: "TestDestruction-AllItems-EternalShadowspiritDiamond" value: { - dps: 39835.01188 - tps: 23539.00066 + dps: 39958.6156 + tps: 23635.85692 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77200" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77977" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-EyeofUnmaking-77997" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-FallofMortality-59500" value: { - dps: 39207.10675 - tps: 23141.36119 + dps: 39176.73337 + tps: 23206.11624 } } dps_results: { key: "TestDestruction-AllItems-FallofMortality-65124" value: { - dps: 39358.50877 - tps: 23227.55292 + dps: 39320.2104 + tps: 23288.20412 } } dps_results: { key: "TestDestruction-AllItems-FieryQuintessence-69000" value: { - dps: 39298.36731 - tps: 23161.19234 + dps: 39302.16207 + tps: 23225.63032 } } dps_results: { key: "TestDestruction-AllItems-Figurine-DemonPanther-52199" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-Figurine-DreamOwl-52354" value: { - dps: 39067.05234 - tps: 23058.02914 + dps: 39015.78327 + tps: 23111.98377 } } dps_results: { key: "TestDestruction-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 38055.44927 - tps: 22463.88162 + dps: 38012.34534 + tps: 22515.00632 } } dps_results: { key: "TestDestruction-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 40088.55709 - tps: 23586.33982 + dps: 40033.32405 + tps: 23639.42662 } } dps_results: { key: "TestDestruction-AllItems-Figurine-KingofBoars-52351" value: { - dps: 38466.97702 - tps: 22711.68655 + dps: 38411.52592 + tps: 22779.88458 } } dps_results: { key: "TestDestruction-AllItems-FireoftheDeep-77117" value: { - dps: 38787.73658 - tps: 22922.27828 + dps: 38713.52488 + tps: 22952.34075 } } dps_results: { key: "TestDestruction-AllItems-FleetShadowspiritDiamond" value: { - dps: 39921.10657 - tps: 23592.81792 + dps: 40045.04021 + tps: 23689.92113 } } dps_results: { key: "TestDestruction-AllItems-FluidDeath-58181" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ForlornShadowspiritDiamond" value: { - dps: 40044.87931 - tps: 23653.64713 + dps: 40152.41398 + tps: 23748.03945 } } dps_results: { key: "TestDestruction-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 40202.28681 - tps: 23752.17446 + dps: 40147.07868 + tps: 23792.82701 } } dps_results: { key: "TestDestruction-AllItems-FuryofAngerforge-59461" value: { - dps: 38616.60292 - tps: 22822.81619 + dps: 38470.03844 + tps: 22723.7645 } } dps_results: { key: "TestDestruction-AllItems-GaleofShadows-56138" value: { - dps: 39100.53125 - tps: 23094.56415 + dps: 39160.08902 + tps: 23208.06561 } } dps_results: { key: "TestDestruction-AllItems-GaleofShadows-56462" value: { - dps: 39532.90011 - tps: 23351.60679 + dps: 39542.54235 + tps: 23437.51476 } } dps_results: { key: "TestDestruction-AllItems-GearDetector-61462" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { @@ -669,703 +669,703 @@ dps_results: { dps_results: { key: "TestDestruction-AllItems-GlowingTwilightScale-54589" value: { - dps: 38716.54096 - tps: 22858.98147 + dps: 38661.27267 + tps: 22899.51851 } } dps_results: { key: "TestDestruction-AllItems-GraceoftheHerald-55266" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-GraceoftheHerald-56295" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HarmlightToken-63839" value: { - dps: 38997.8592 - tps: 23025.83795 + dps: 39056.87119 + tps: 23039.02622 } } dps_results: { key: "TestDestruction-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HeartofIgnacious-59514" value: { - dps: 39623.52493 - tps: 23426.05237 + dps: 39638.59996 + tps: 23473.33294 } } dps_results: { key: "TestDestruction-AllItems-HeartofIgnacious-65110" value: { - dps: 39914.43769 - tps: 23653.88881 + dps: 39849.29299 + tps: 23563.17211 } } dps_results: { key: "TestDestruction-AllItems-HeartofRage-59224" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HeartofRage-65072" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HeartofSolace-55868" value: { - dps: 38285.26155 - tps: 22626.54601 + dps: 38343.34022 + tps: 22737.65339 } } dps_results: { key: "TestDestruction-AllItems-HeartofSolace-56393" value: { - dps: 38605.0031 - tps: 22818.71483 + dps: 38614.88586 + tps: 22903.29054 } } dps_results: { key: "TestDestruction-AllItems-HeartofThunder-55845" value: { - dps: 38065.84808 - tps: 22462.52361 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HeartofThunder-56370" value: { - dps: 38066.93354 - tps: 22467.10884 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-HeartoftheVile-66969" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 39891.41492 - tps: 23582.29045 + dps: 40015.02048 + tps: 23661.07605 } } dps_results: { key: "TestDestruction-AllItems-ImpatienceofYouth-62464" value: { - dps: 38522.13157 - tps: 22745.9571 + dps: 38466.57957 + tps: 22814.27788 } } dps_results: { key: "TestDestruction-AllItems-ImpatienceofYouth-62469" value: { - dps: 38522.13157 - tps: 22745.9571 + dps: 38466.57957 + tps: 22814.27788 } } dps_results: { key: "TestDestruction-AllItems-ImpetuousQuery-55881" value: { - dps: 38471.93734 - tps: 22725.73711 + dps: 38398.14718 + tps: 22755.424 } } dps_results: { key: "TestDestruction-AllItems-ImpetuousQuery-56406" value: { - dps: 38522.52654 - tps: 22757.22186 + dps: 38448.66885 + tps: 22786.96892 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-77211" value: { - dps: 38079.66116 - tps: 22474.24312 + dps: 38012.34534 + tps: 22515.29297 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-77983" value: { - dps: 38076.52091 - tps: 22478.73653 + dps: 38012.34534 + tps: 22515.20697 } } dps_results: { key: "TestDestruction-AllItems-IndomitablePride-78003" value: { - dps: 38076.64907 - tps: 22471.30865 + dps: 38012.34534 + tps: 22515.38999 } } dps_results: { key: "TestDestruction-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 38065.84808 - tps: 22462.51228 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 41034.76407 - tps: 24162.13033 + dps: 41131.63573 + tps: 24411.23901 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 40844.82285 - tps: 24029.18874 + dps: 40830.78786 + tps: 24050.34536 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 41650.88116 - tps: 24638.69495 + dps: 41613.81727 + tps: 24542.33662 } } dps_results: { key: "TestDestruction-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 38986.74127 - tps: 22986.271 + dps: 38900.55582 + tps: 22997.8782 } } dps_results: { key: "TestDestruction-AllItems-JarofAncientRemedies-59354" value: { - dps: 38061.50831 - tps: 22484.12665 + dps: 38012.19613 + tps: 22527.60088 } } dps_results: { key: "TestDestruction-AllItems-JarofAncientRemedies-65029" value: { - dps: 38042.37714 - tps: 22470.06162 + dps: 38016.78052 + tps: 22535.24632 } } dps_results: { key: "TestDestruction-AllItems-JawsofDefeat-68926" value: { - dps: 39410.53612 - tps: 23293.39457 + dps: 39351.44444 + tps: 23304.44424 } } dps_results: { key: "TestDestruction-AllItems-JawsofDefeat-69111" value: { - dps: 39589.99147 - tps: 23392.66254 + dps: 39528.79885 + tps: 23406.61678 } } dps_results: { key: "TestDestruction-AllItems-JujuofNimbleness-63840" value: { - dps: 38392.82536 - tps: 22689.09825 + dps: 38306.59407 + tps: 22700.23726 } } dps_results: { key: "TestDestruction-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-KiroptyricSigil-77113" value: { - dps: 38664.56673 - tps: 22931.19539 + dps: 38829.70896 + tps: 23107.91608 } } dps_results: { key: "TestDestruction-AllItems-KvaldirBattleStandard-59685" value: { - dps: 38317.30506 - tps: 22618.2587 + dps: 38308.98486 + tps: 22640.05022 } } dps_results: { key: "TestDestruction-AllItems-KvaldirBattleStandard-59689" value: { - dps: 38317.30506 - tps: 22618.2587 + dps: 38308.98486 + tps: 22640.05022 } } dps_results: { key: "TestDestruction-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 38470.71851 - tps: 22763.57257 + dps: 38545.47775 + tps: 22789.02184 } } dps_results: { key: "TestDestruction-AllItems-LeadenDespair-55816" value: { - dps: 38095.20719 - tps: 22496.84559 + dps: 38012.34534 + tps: 22514.89166 } } dps_results: { key: "TestDestruction-AllItems-LeadenDespair-56347" value: { - dps: 38055.44927 - tps: 22463.88162 + dps: 38012.34534 + tps: 22515.00632 } } dps_results: { key: "TestDestruction-AllItems-LeftEyeofRajh-56102" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-LeftEyeofRajh-56427" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-LicensetoSlay-58180" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-MagnetiteMirror-55814" value: { - dps: 38056.96068 - tps: 22480.12565 + dps: 37971.62227 + tps: 22491.16784 } } dps_results: { key: "TestDestruction-AllItems-MagnetiteMirror-56345" value: { - dps: 38056.96068 - tps: 22480.12565 + dps: 37971.62227 + tps: 22491.16784 } } dps_results: { key: "TestDestruction-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 38085.61982 - tps: 22485.20248 + dps: 38012.34534 + tps: 22514.42994 } } dps_results: { key: "TestDestruction-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 38085.61982 - tps: 22485.20248 + dps: 38012.34534 + tps: 22514.42994 } } dps_results: { key: "TestDestruction-AllItems-MarkofKhardros-56132" value: { - dps: 38494.50191 - tps: 22737.71902 + dps: 38408.72534 + tps: 22748.68296 } } dps_results: { key: "TestDestruction-AllItems-MarkofKhardros-56458" value: { - dps: 38551.79897 - tps: 22771.45149 + dps: 38465.96503 + tps: 22782.40518 } } dps_results: { key: "TestDestruction-AllItems-MatrixRestabilizer-68994" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-MatrixRestabilizer-69150" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-MightoftheOcean-55251" value: { - dps: 38056.96068 - tps: 22480.12565 + dps: 37971.62227 + tps: 22491.16784 } } dps_results: { key: "TestDestruction-AllItems-MightoftheOcean-56285" value: { - dps: 38056.96068 - tps: 22480.12565 + dps: 37971.62227 + tps: 22491.16784 } } dps_results: { key: "TestDestruction-AllItems-MirrorofBrokenImages-62466" value: { - dps: 38577.71475 - tps: 22791.56886 + dps: 38503.7834 + tps: 22821.38156 } } dps_results: { key: "TestDestruction-AllItems-MirrorofBrokenImages-62471" value: { - dps: 38577.71475 - tps: 22791.56886 + dps: 38503.7834 + tps: 22821.38156 } } dps_results: { key: "TestDestruction-AllItems-MithrilStopwatch-232013" value: { - dps: 39802.84244 - tps: 23489.48121 + dps: 39651.5938 + tps: 23404.75306 } } dps_results: { key: "TestDestruction-AllItems-MoonwellChalice-70142" value: { - dps: 39971.56361 - tps: 23616.2133 + dps: 39914.17415 + tps: 23651.05026 } } dps_results: { key: "TestDestruction-AllItems-MoonwellPhial-70143" value: { - dps: 38075.43545 - tps: 22474.07995 + dps: 38012.34534 + tps: 22515.09783 } } dps_results: { key: "TestDestruction-AllItems-NecromanticFocus-68982" value: { - dps: 40046.99271 - tps: 23666.66273 + dps: 39983.02137 + tps: 23698.22811 } } dps_results: { key: "TestDestruction-AllItems-NecromanticFocus-69139" value: { - dps: 40388.05553 - tps: 23891.0839 + dps: 40242.75154 + tps: 23850.1709 } } dps_results: { key: "TestDestruction-AllItems-Oremantle'sFavor-61448" value: { - dps: 38315.03444 - tps: 22559.76913 + dps: 38311.50527 + tps: 22614.36583 } } dps_results: { key: "TestDestruction-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 39133.60928 - tps: 23098.76824 + dps: 39113.29861 + tps: 23164.90555 } } dps_results: { key: "TestDestruction-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 39141.46056 - tps: 23085.98727 + dps: 39005.66808 + tps: 23086.71506 } } dps_results: { key: "TestDestruction-AllItems-PorcelainCrab-55237" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-PorcelainCrab-56280" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 39835.01188 - tps: 23539.00066 + dps: 39958.6156 + tps: 23635.85692 } } dps_results: { key: "TestDestruction-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Rainsong-55854" value: { - dps: 38085.61982 - tps: 22485.23736 + dps: 38012.34534 + tps: 22514.46481 } } dps_results: { key: "TestDestruction-AllItems-Rainsong-56377" value: { - dps: 38085.61982 - tps: 22485.21433 + dps: 38012.34534 + tps: 22514.44178 } } dps_results: { key: "TestDestruction-AllItems-ReflectionoftheLight-77115" value: { - dps: 39538.27408 - tps: 23231.23347 + dps: 39472.05078 + tps: 23243.93924 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77201" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77978" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ResolveofUndying-77998" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 40254.40096 - tps: 23820.03495 + dps: 40384.73187 + tps: 23922.57373 } } dps_results: { key: "TestDestruction-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 40254.40096 - tps: 23820.00967 + dps: 40384.73187 + tps: 23922.55857 } } dps_results: { key: "TestDestruction-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 38619.46839 - tps: 22719.07472 + dps: 38603.9467 + tps: 22816.82832 } } dps_results: { key: "TestDestruction-AllItems-RightEyeofRajh-56100" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-RightEyeofRajh-56431" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-RosaryofLight-72901" value: { - dps: 38404.57789 - tps: 22668.59397 + dps: 38356.79956 + tps: 22741.39292 } } dps_results: { key: "TestDestruction-AllItems-RottingSkull-77116" value: { - dps: 38783.99333 - tps: 22937.70372 + dps: 38674.6293 + tps: 22859.87236 } } dps_results: { key: "TestDestruction-AllItems-RuneofZeth-68998" value: { - dps: 40026.15825 - tps: 23600.19734 + dps: 39835.60262 + tps: 23467.6877 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 39477.38053 - tps: 23184.28593 + dps: 39419.43201 + tps: 23257.59213 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 39559.39631 - tps: 23226.44927 + dps: 39501.26098 + tps: 23300.10007 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 39354.62398 - tps: 23182.65655 + dps: 39277.0776 + tps: 23206.50643 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 39426.66058 - tps: 23229.44309 + dps: 39336.07672 + tps: 23245.97106 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ScalesofLife-68915" value: { - dps: 37911.48058 - tps: 22384.0689 + dps: 37972.72762 + tps: 22539.83699 hps: 354.04187 } } dps_results: { key: "TestDestruction-AllItems-ScalesofLife-69109" value: { - dps: 37927.24917 - tps: 22392.90746 + dps: 37972.72762 + tps: 22539.91967 hps: 399.35591 } } dps_results: { key: "TestDestruction-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-SeaStar-55256" value: { - dps: 38575.92013 - tps: 22720.78068 + dps: 38520.02497 + tps: 22790.30868 } } dps_results: { key: "TestDestruction-AllItems-SeaStar-56290" value: { - dps: 39046.61939 - tps: 22962.7296 + dps: 38989.65206 + tps: 23034.23929 } } dps_results: { @@ -1378,770 +1378,770 @@ dps_results: { dps_results: { key: "TestDestruction-AllItems-ShardofWoe-60233" value: { - dps: 39016.43939 - tps: 23053.95397 + dps: 38972.28039 + tps: 23085.228 } } dps_results: { key: "TestDestruction-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 38095.20719 - tps: 22496.7596 + dps: 38012.34534 + tps: 22514.82 } } dps_results: { key: "TestDestruction-AllItems-Skardyn'sGrace-56115" value: { - dps: 38544.3217 - tps: 22746.41168 + dps: 38488.94286 + tps: 22817.34835 } } dps_results: { key: "TestDestruction-AllItems-Skardyn'sGrace-56440" value: { - dps: 38611.62924 - tps: 22786.48752 + dps: 38556.15527 + tps: 22857.91007 } } dps_results: { key: "TestDestruction-AllItems-Sorrowsong-55879" value: { - dps: 39186.58774 - tps: 23127.30652 + dps: 39115.8645 + tps: 23158.86466 } } dps_results: { key: "TestDestruction-AllItems-Sorrowsong-56400" value: { - dps: 39331.98795 - tps: 23212.15901 + dps: 39261.60778 + tps: 23244.02788 } } dps_results: { key: "TestDestruction-AllItems-Soul'sAnguish-66994" value: { - dps: 38056.96068 - tps: 22480.12565 + dps: 37971.62227 + tps: 22491.16784 } } dps_results: { key: "TestDestruction-AllItems-SoulCasket-58183" value: { - dps: 39914.136 - tps: 23462.98844 + dps: 39855.42013 + tps: 23537.22085 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77206" value: { - dps: 39203.57756 - tps: 23157.20078 + dps: 39133.25561 + tps: 23200.7355 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77970" value: { - dps: 39044.38839 - tps: 23068.14187 + dps: 38977.16524 + tps: 23109.11577 } } dps_results: { key: "TestDestruction-AllItems-SoulshifterVortex-77990" value: { - dps: 39302.06315 - tps: 23225.11304 + dps: 39240.9926 + tps: 23271.6341 } } dps_results: { key: "TestDestruction-AllItems-SpidersilkSpindle-68981" value: { - dps: 38672.76113 - tps: 22850.72203 + dps: 38598.7029 + tps: 22880.64776 } } dps_results: { key: "TestDestruction-AllItems-SpidersilkSpindle-69138" value: { - dps: 38749.41143 - tps: 22898.4262 + dps: 38675.25088 + tps: 22928.44309 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77202" value: { - dps: 39259.08482 - tps: 23127.76852 + dps: 39398.60009 + tps: 23345.88486 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77973" value: { - dps: 39198.39525 - tps: 23226.67518 + dps: 39060.22978 + tps: 23212.88718 } } dps_results: { key: "TestDestruction-AllItems-StarcatcherCompass-77993" value: { - dps: 39634.00527 - tps: 23556.80857 + dps: 39510.50111 + tps: 23405.40554 } } dps_results: { key: "TestDestruction-AllItems-StayofExecution-68996" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-Stonemother'sKiss-61411" value: { - dps: 39134.10005 - tps: 23078.27617 + dps: 39185.20217 + tps: 23203.65167 } } dps_results: { key: "TestDestruction-AllItems-StumpofTime-62465" value: { - dps: 39250.63373 - tps: 23142.71454 + dps: 39183.95406 + tps: 23178.79921 } } dps_results: { key: "TestDestruction-AllItems-StumpofTime-62470" value: { - dps: 39296.31281 - tps: 23146.77875 + dps: 39231.47803 + tps: 23185.26912 } } dps_results: { key: "TestDestruction-AllItems-SymbioticWorm-59332" value: { - dps: 38075.43545 - tps: 22474.04908 + dps: 38012.34534 + tps: 22515.06696 } } dps_results: { key: "TestDestruction-AllItems-SymbioticWorm-65048" value: { - dps: 38075.43545 - tps: 22474.11743 + dps: 38012.34534 + tps: 22515.13531 } } dps_results: { key: "TestDestruction-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 39257.7388 - tps: 23163.61869 + dps: 39180.17742 + tps: 23210.45963 } } dps_results: { key: "TestDestruction-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-TearofBlood-55819" value: { - dps: 38842.01459 - tps: 22912.72369 + dps: 38779.55819 + tps: 22983.02569 } } dps_results: { key: "TestDestruction-AllItems-TearofBlood-56351" value: { - dps: 39067.25557 - tps: 23060.57103 + dps: 39051.35007 + tps: 23131.86185 } } dps_results: { key: "TestDestruction-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 39141.07566 - tps: 23097.39792 + dps: 39069.2753 + tps: 23132.00031 } } dps_results: { key: "TestDestruction-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 39506.74886 - tps: 23296.8339 + dps: 39435.93153 + tps: 23329.23347 } } dps_results: { key: "TestDestruction-AllItems-TheHungerer-68927" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-TheHungerer-69112" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Theralion'sMirror-59519" value: { - dps: 39871.76622 - tps: 23548.78143 + dps: 39837.54164 + tps: 23615.69044 } } dps_results: { key: "TestDestruction-AllItems-Theralion'sMirror-65105" value: { - dps: 40119.43537 - tps: 23693.60933 + dps: 40085.54353 + tps: 23761.05063 } } dps_results: { key: "TestDestruction-AllItems-Throngus'sFinger-56121" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Throngus'sFinger-56449" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Tia'sGrace-55874" value: { - dps: 38471.93734 - tps: 22725.73711 + dps: 38398.14718 + tps: 22755.424 } } dps_results: { key: "TestDestruction-AllItems-Tia'sGrace-56394" value: { - dps: 38522.52654 - tps: 22757.22186 + dps: 38448.66885 + tps: 22786.96892 } } dps_results: { key: "TestDestruction-AllItems-TinyAbominationinaJar-50706" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 39077.7311 - tps: 23221.3099 + dps: 38906.72117 + tps: 23039.96595 } } dps_results: { key: "TestDestruction-AllItems-UnheededWarning-59520" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-UnquenchableFlame-67101" value: { - dps: 38030.3369 - tps: 22440.31337 + dps: 37975.68447 + tps: 22507.54771 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-62463" value: { - dps: 38522.13157 - tps: 22745.9571 + dps: 38466.57957 + tps: 22814.27788 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-62468" value: { - dps: 38522.13157 - tps: 22745.9571 + dps: 38466.57957 + tps: 22814.27788 } } dps_results: { key: "TestDestruction-AllItems-UnsolvableRiddle-68709" value: { - dps: 38522.13157 - tps: 22745.9571 + dps: 38466.57957 + tps: 22814.27788 } } dps_results: { key: "TestDestruction-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 39617.54961 - tps: 23403.77588 + dps: 39388.13751 + tps: 23335.38689 } } dps_results: { key: "TestDestruction-AllItems-Varo'then'sBrooch-72899" value: { - dps: 38482.50461 - tps: 22730.80173 + dps: 38397.34218 + tps: 22754.47369 } } dps_results: { key: "TestDestruction-AllItems-VeilofLies-72900" value: { - dps: 38060.75232 - tps: 22469.9597 + dps: 38012.34534 + tps: 22515.16949 } } dps_results: { key: "TestDestruction-AllItems-VesselofAcceleration-68995" value: { - dps: 38192.15127 - tps: 22532.6996 + dps: 38085.8308 + tps: 22573.86875 } } dps_results: { key: "TestDestruction-AllItems-VesselofAcceleration-69167" value: { - dps: 38192.97677 - tps: 22543.54291 + dps: 38086.48117 + tps: 22567.28087 } } dps_results: { key: "TestDestruction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 34450.35641 - tps: 20556.22987 + dps: 35168.19432 + tps: 20636.46217 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77207" value: { - dps: 38251.88031 - tps: 22654.84885 + dps: 38182.89937 + tps: 22687.90215 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77979" value: { - dps: 38234.9938 - tps: 22638.41666 + dps: 38153.11514 + tps: 22655.96503 } } dps_results: { key: "TestDestruction-AllItems-VialofShadows-77999" value: { - dps: 38259.53897 - tps: 22660.20697 + dps: 38184.99149 + tps: 22688.63259 } } dps_results: { key: "TestDestruction-AllItems-VialofStolenMemories-59515" value: { - dps: 38075.43545 - tps: 22474.04908 + dps: 38012.34534 + tps: 22515.06696 } } dps_results: { key: "TestDestruction-AllItems-VialofStolenMemories-65109" value: { - dps: 38075.43545 - tps: 22474.11743 + dps: 38012.34534 + tps: 22515.13531 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 39174.99192 - tps: 23028.83155 + dps: 39117.73218 + tps: 23100.86722 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 39309.78307 - tps: 23098.12607 + dps: 39252.2163 + tps: 23170.72809 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 38030.3369 - tps: 22440.37804 + dps: 37975.68447 + tps: 22507.6043 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 38085.61982 - tps: 22485.79398 + dps: 38012.34534 + tps: 22515.02143 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 38516.05541 - tps: 22688.72826 + dps: 38689.62307 + tps: 22888.6644 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 38667.43334 - tps: 22862.10971 + dps: 38499.43768 + tps: 22740.22468 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 38085.61982 - tps: 22485.79398 + dps: 38012.34534 + tps: 22515.02143 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 38606.84187 - tps: 22810.18232 + dps: 38532.87163 + tps: 22840.02966 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 38085.61982 - tps: 22485.79398 + dps: 38012.34534 + tps: 22515.02143 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 39097.26587 - tps: 23034.56211 + dps: 39013.93756 + tps: 23061.49154 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 39214.44538 - tps: 23114.21028 + dps: 39138.80249 + tps: 23140.4116 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77198" value: { - dps: 41193.06932 - tps: 24378.59446 + dps: 41088.35323 + tps: 24337.77154 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77975" value: { - dps: 40808.03319 - tps: 24134.34767 + dps: 40716.76206 + tps: 24111.05596 } } dps_results: { key: "TestDestruction-AllItems-WillofUnbinding-77995" value: { - dps: 41579.96031 - tps: 24589.65303 + dps: 41506.93081 + tps: 24572.56331 } } dps_results: { key: "TestDestruction-AllItems-WitchingHourglass-55787" value: { - dps: 39323.55037 - tps: 23310.88508 + dps: 39201.5547 + tps: 23180.39146 } } dps_results: { key: "TestDestruction-AllItems-WitchingHourglass-56320" value: { - dps: 39814.50066 - tps: 23657.16439 + dps: 39841.97794 + tps: 23707.76778 } } dps_results: { key: "TestDestruction-AllItems-World-QuellerFocus-63842" value: { - dps: 38365.86036 - tps: 22648.85721 + dps: 38310.59421 + tps: 22716.8302 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77197" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77974" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-WrathofUnchaining-77994" value: { - dps: 38085.61982 - tps: 22485.3081 + dps: 38012.34534 + tps: 22514.53555 } } dps_results: { key: "TestDestruction-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 38442.03304 - tps: 22711.61707 + dps: 38363.6237 + tps: 22718.30646 } } dps_results: { key: "TestDestruction-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 38442.03304 - tps: 22711.61707 + dps: 38363.6237 + tps: 22718.30646 } } dps_results: { key: "TestDestruction-Average-Default" value: { - dps: 41102.15307 - tps: 24277.07322 + dps: 41111.19848 + tps: 24289.79909 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 41887.3292 - tps: 42108.95123 + dps: 41802.26693 + tps: 42313.17909 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40065.49562 - tps: 23957.85969 + dps: 40079.62114 + tps: 24028.62833 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50358.54631 - tps: 28699.45202 + dps: 50657.95733 + tps: 28966.88087 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26173.10496 - tps: 30095.59884 + dps: 26032.18127 + tps: 29881.0243 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26173.10496 - tps: 15583.58327 + dps: 26032.18127 + tps: 15459.43191 } } dps_results: { key: "TestDestruction-Settings-Goblin-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28974.89075 - tps: 15957.0562 + dps: 28792.01484 + tps: 15868.25505 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 41818.04028 - tps: 41998.19953 + dps: 41710.38411 + tps: 42074.84233 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39813.38849 - tps: 23775.52685 + dps: 39926.11202 + tps: 23875.30217 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 50436.44479 - tps: 28536.55978 + dps: 50807.51416 + tps: 28832.69877 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26012.10024 - tps: 29766.97557 + dps: 25905.31371 + tps: 29667.11218 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26012.10024 - tps: 15389.86179 + dps: 25905.31371 + tps: 15344.41136 } } dps_results: { key: "TestDestruction-Settings-Human-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 28670.93254 - tps: 15690.18888 + dps: 28417.72007 + tps: 15437.79289 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 42470.34518 - tps: 42153.87461 + dps: 42364.42119 + tps: 42223.4028 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40467.75777 - tps: 23936.89419 + dps: 40581.30779 + tps: 24036.45451 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51721.83932 - tps: 28857.25364 + dps: 52102.90691 + tps: 29154.89079 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26480.62764 - tps: 29988.61876 + dps: 26366.30081 + tps: 29759.15083 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26480.62764 - tps: 15504.86759 + dps: 26366.30081 + tps: 15452.31958 } } dps_results: { key: "TestDestruction-Settings-Orc-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29484.16735 - tps: 15860.80471 + dps: 29236.47179 + tps: 15604.65691 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 42137.60147 - tps: 42416.05572 + dps: 42119.67466 + tps: 42250.33165 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40338.34307 - tps: 24187.62802 + dps: 40355.69861 + tps: 24215.02543 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51952.29594 - tps: 29501.14827 + dps: 51612.35402 + tps: 29184.03934 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 26245.98067 - tps: 30151.10363 + dps: 26085.9926 + tps: 30069.74331 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26245.98067 - tps: 15583.57174 + dps: 26085.9926 + tps: 15599.41586 } } dps_results: { key: "TestDestruction-Settings-Troll-p3-Destruction Warlock-default-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 29558.53842 - tps: 16379.02713 + dps: 29671.09025 + tps: 16495.3215 } } dps_results: { key: "TestDestruction-SwitchInFrontOfTarget-Default" value: { - dps: 40458.03657 - tps: 23936.89419 + dps: 40571.58659 + tps: 24036.45451 } } diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 700e02fd2f..7f5932a5b7 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -144,20 +144,16 @@ var ItemSetBalespidersBurningVestments = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() - core.MakePermanent(warlock.RegisterAura(core.Aura{ - Label: "Item - Warlock T12 2P Bonus", - ActionID: core.ActionID{SpellID: 99220}, - Icd: &core.Cooldown{ - Timer: warlock.NewTimer(), - Duration: 45 * time.Second, - }, - OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { - if aura.Icd.IsReady(sim) && sim.Proc(0.05, "Warlock 2pT12") { - warlock.FieryImp.EnableWithTimeout(sim, warlock.FieryImp, 15*time.Second) - aura.Icd.Use(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Item - Warlock T12 2P Bonus", + ActionID: core.ActionID{SpellID: 99220}, + ProcChance: 0.05, + ICD: 45 * time.Second, + Callback: core.CallbackOnPeriodicDamageDealt, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + warlock.FieryImp.EnableWithTimeout(sim, warlock.FieryImp, 15*time.Second) }, - })) + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() @@ -232,7 +228,13 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ TimeValue: -time.Minute * 4, ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, }) - setBonusAura.AttachBooleanToggle(warlock.Has2pcT13) + + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + warlock.Has2pcT13 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + warlock.Has2pcT13 = false + }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() @@ -250,18 +252,22 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ }, }) - core.MakePermanent(warlock.RegisterAura(core.Aura{ - Label: "Item - Warlock T13 4P Bonus", - ActionID: core.ActionID{SpellID: 105787}, - ActionIDForProc: aura.ActionID, - OnCastComplete: func(_ *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.Matches(WarlockSpellSoulBurn) { - aura.Activate(sim) - } + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Item - Warlock T13 4P Bonus", + ActionID: core.ActionID{SpellID: 105787}, + Callback: core.CallbackOnCastComplete, + ClassSpellMask: WarlockSpellShadowBurn, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) }, - })) + }) - setBonusAura.AttachBooleanToggle(warlock.Has4pcT13) + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + warlock.Has4pcT13 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + warlock.Has4pcT13 = false + }) }, }, }) From 2158a2b0d8cfb92e275e02e3b97769d29089d187 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 21 Dec 2024 22:46:55 +0100 Subject: [PATCH 051/127] Adjust item swap PPM handling --- sim/common/cata/damage_procs.go | 4 +- sim/common/cata/enchant_effects.go | 8 +- sim/common/shared/shared_utils.go | 11 +- sim/common/tbc/enchant_effects.go | 11 +- sim/common/wotlk/enchant_effects.go | 8 +- sim/core/item_swaps.go | 74 +++- sim/death_knight/runeforging.go | 8 +- sim/death_knight/talents_frost.go | 2 +- sim/death_knight/talents_unholy.go | 3 +- sim/shaman/weapon_imbues.go | 2 +- sim/warlock/demonology/TestDemonology.results | 384 +++++++++--------- ui/death_knight/frost/sim.ts | 2 +- 12 files changed, 286 insertions(+), 231 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index 5082e34c58..b442ef924e 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -17,6 +17,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -32,8 +33,9 @@ func init() { School: core.SpellSchoolNature, MinDmg: 5250, MaxDmg: 8750, - Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, + Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 2b558c3822..5a847b84fd 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -116,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -153,7 +153,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -238,7 +238,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -328,7 +328,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 83a067f2c4..4dc755d564 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -475,7 +475,7 @@ func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpel } if config.PPM != 0 { - character.ItemSwap.RegisterPPMEffect(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura) + character.ItemSwap.RegisterPPMEffect(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) } else { character.ItemSwap.RegisterEnchantProc(config.EnchantID, triggerAura, config.Slots) } @@ -535,6 +535,7 @@ const ( type ProcDamageEffect struct { ItemID int32 SpellID int32 + Slots []proto.ItemSlot Trigger core.ProcTrigger School core.SpellSchool @@ -596,7 +597,13 @@ func NewProcDamageEffect(config ProcDamageEffect) { triggerConfig.Handler = func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { damageSpell.Cast(sim, character.CurrentTarget) } - core.MakeProcTriggerAura(&character.Unit, triggerConfig) + triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) + + if config.Trigger.PPM != 0 { + character.ItemSwap.RegisterPPMItem(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + } else { + character.ItemSwap.RegisterEnchantProc(config.ItemID, triggerAura, config.Slots) + } }) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index 2e4dfe3da1..9cbf849982 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -90,7 +90,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -130,7 +130,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -173,7 +173,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -189,7 +189,8 @@ func init() { } else { label += "OH" } - ppmm := character.AutoAttacks.NewPPMManager(2.15, core.ProcMaskMelee) + procMask := core.ProcMaskMelee + ppmm := character.AutoAttacks.NewPPMManager(2.15, procMask) aura := character.GetOrRegisterAura(core.Aura{ Label: label, @@ -215,7 +216,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) } core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 5b4e3a0ee9..ec58ad806f 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -54,7 +54,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -95,7 +95,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -184,7 +184,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // TODO: These are stand-in values without any real reference. @@ -213,7 +213,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Enchant: 3790, Spell: 59630 - Black Magic diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index a29a6ddc7a..6c3530c135 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -91,30 +91,61 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } // Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura) { +func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { + swap.registerPPMInternal(0, effectID, ppm, ppmm, aura, slots) +} + +// Helper for handling Effects that use PPMManager to toggle the aura on/off +func (swap *ItemSwap) RegisterPPMItem(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { + swap.registerPPMInternal(itemID, 0, ppm, ppmm, aura, slots) +} + +func (swap *ItemSwap) registerPPMInternal(itemID int32, effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { - procMask := character.GetProcMaskForEnchant(effectID) - *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + item := swap.GetEquippedItemBySlot(slot) + + var hasItemEquipped bool + var procMask ProcMask + var isItemSlotMatch = false + + isItemPPM := itemID != 0 + isEffectPPM := effectID != 0 + + if isItemPPM { + hasItemEquipped = item.ID == itemID + isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, slots) == slot + procMask = character.GetProcMaskForItem(itemID) + } else if isEffectPPM { + hasItemEquipped = item.Enchant.EffectID == effectID || item.TempEnchant == effectID + isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(effectID, slots) == slot + procMask = character.GetProcMaskForEnchant(effectID) + } + if !isItemSlotMatch { + return + } - if ppmm.Chance(procMask) == 0 { - aura.Deactivate(sim) - } else { + if hasItemEquipped { aura.Activate(sim) + } else { + aura.Deactivate(sim) } + + *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) + } // Helper for handling procs that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager) { +func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) } @@ -147,12 +178,12 @@ func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []pr return } character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - procMask := character.GetProcMaskForEnchant(effectID) - - if procMask == ProcMaskUnknown { - aura.Deactivate(sim) - } else { + item := swap.GetEquippedItemBySlot(slot) + hasEffectID := item.Enchant.EffectID == effectID + if hasEffectID { aura.Activate(sim) + } else { + aura.Deactivate(sim) } }) } @@ -169,7 +200,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { return } hasItemEquipped := swap.HasItemEquipped(itemID) - itemSlot := swap.GetItemFromPossibleSlots(itemID, slots) + itemSlot := swap.GetItemFromPossibleSlotsByItemID(itemID, slots) if itemSlot == -1 { return } @@ -232,7 +263,7 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) GetItemFromPossibleSlots(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { +func (swap *ItemSwap) GetItemFromPossibleSlotsByItemID(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { for _, slot := range possibleSlots { if swap.swapEquip[slot].ID == itemID { return slot @@ -243,6 +274,17 @@ func (swap *ItemSwap) GetItemFromPossibleSlots(itemID int32, possibleSlots []pro return -1 } +func (swap *ItemSwap) GetItemFromPossibleSlotsByEffectID(effectID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { + for _, slot := range possibleSlots { + if swap.swapEquip[slot].Enchant.EffectID == effectID { + return slot + } else if swap.originalEquip[slot].Enchant.EffectID == effectID { + return slot + } + } + return -1 +} + func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { for _, item := range swap.swapEquip { if item.ID == itemID { diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 9691afedbf..202c17abca 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -101,7 +101,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Rune of Cinderglacier @@ -120,6 +120,8 @@ func init() { School: core.SpellSchoolShadow | core.SpellSchoolFrost, }) + procMask := character.GetProcMaskForEnchant(3369) + cinderAura := character.GetOrRegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 53386}, Label: "Cinderglacier", @@ -154,7 +156,7 @@ func init() { Name: "Rune of Cinderglacier", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, - ProcMask: character.GetProcMaskForEnchant(3369), + ProcMask: procMask, PPM: 1.0, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { cinderAura.Activate(sim) @@ -162,7 +164,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura) + character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) }) // Rune of Razorice diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index 69328bed3d..6f02acba95 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -231,7 +231,7 @@ func (dk *DeathKnight) applyKillingMachine() { }, }) - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) } func (dk *DeathKnight) applyMightOfTheFrozenWastes() { diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index c5dd7df0d6..58a4ff323a 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -4,6 +4,7 @@ import ( "time" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -325,7 +326,7 @@ func (dk *DeathKnight) applySuddenDoom() { }, }) - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) } func (dk *DeathKnight) applyShadowInfusion() *core.Aura { diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index a2036ca6ec..8ce105e22a 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -312,7 +312,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura) + shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 5d852cccad..76f90a005d 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1973,673 +1973,673 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54186.56656 - tps: 46385.30782 + dps: 56620.21358 + tps: 48010.07649 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38184.77703 - tps: 19586.24021 + dps: 40379.94179 + tps: 19776.70281 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52056.82905 - tps: 27227.23957 + dps: 59039.26079 + tps: 26628.15276 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46672.01837 - tps: 43177.78599 + dps: 48718.93274 + tps: 43866.08781 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26911.7799 - tps: 13963.68938 + dps: 28998.76577 + tps: 14259.14299 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33701.15948 - tps: 18009.71524 + dps: 39598.16278 + tps: 17982.72896 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54394.89453 - tps: 46310.42522 + dps: 56807.14743 + tps: 46460.1129 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38554.47655 - tps: 20664.40735 + dps: 40788.00678 + tps: 20962.7158 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53071.97863 - tps: 29262.67513 + dps: 60093.52187 + tps: 28973.58177 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46765.36979 - tps: 41301.90463 + dps: 48679.79859 + tps: 42408.84863 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27319.00319 - tps: 14765.96093 + dps: 29169.82333 + tps: 15029.41885 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33608.20211 - tps: 18939.06276 + dps: 39368.78417 + tps: 18907.36985 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54907.28608 - tps: 47265.03076 + dps: 57445.73035 + tps: 48744.34943 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38961.88816 - tps: 20110.5349 + dps: 41044.00369 + tps: 20291.08625 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53083.2899 - tps: 28128.92353 + dps: 59937.13326 + tps: 27370.6915 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47347.06964 - tps: 43736.06681 + dps: 49106.98436 + tps: 44359.5521 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27398.66483 - tps: 14326.54911 + dps: 29380.68397 + tps: 14654.705 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34067.77847 - tps: 18508.63861 + dps: 40181.783 + tps: 18442.24816 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48605.87769 - tps: 40234.76667 + dps: 51394.62944 + tps: 41592.44768 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34639.74204 - tps: 17787.7624 + dps: 37016.69222 + tps: 18049.37471 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49094.31198 - tps: 26427.98685 + dps: 56550.46018 + tps: 25838.93489 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42520.15348 - tps: 37781.41543 + dps: 44747.61759 + tps: 38707.32075 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25028.72024 - tps: 12747.12779 + dps: 26892.31616 + tps: 12938.92358 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31449.19399 - tps: 16723.76596 + dps: 37388.14801 + tps: 16734.98442 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54260.56906 - tps: 47165.1573 + dps: 56259.47587 + tps: 47260.28327 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37919.57299 - tps: 19557.08633 + dps: 40152.3054 + tps: 19867.9386 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51670.76344 - tps: 27173.18302 + dps: 59105.28728 + tps: 26993.77361 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46276.39112 - tps: 43143.86842 + dps: 47875.94895 + tps: 43032.33197 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26658.45835 - tps: 13824.48218 + dps: 28723.33074 + tps: 14140.85924 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33451.64654 - tps: 17956.8453 + dps: 39174.55687 + tps: 17639.82352 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54072.14017 - tps: 45611.28211 + dps: 56765.05849 + tps: 46870.30024 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38327.9197 - tps: 20591.07577 + dps: 41036.83658 + tps: 21100.47017 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52899.56106 - tps: 29357.49128 + dps: 60404.86698 + tps: 28842.45711 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46801.51319 - tps: 41292.29804 + dps: 48474.84394 + tps: 42266.54542 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27247.72858 - tps: 14643.97828 + dps: 28980.30993 + tps: 14850.94503 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33409.28806 - tps: 18834.21823 + dps: 39151.11652 + tps: 18681.20289 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54830.28995 - tps: 47564.45689 + dps: 56982.67726 + tps: 48122.63824 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38595.36021 - tps: 20102.1805 + dps: 40679.35675 + tps: 20350.9976 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52616.76939 - tps: 27962.0929 + dps: 59841.86802 + tps: 27627.72867 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46752.23678 - tps: 43319.96697 + dps: 48383.95886 + tps: 43369.03728 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27230.87097 - tps: 14242.35479 + dps: 29218.28119 + tps: 14542.34072 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34019.17201 - tps: 18381.73918 + dps: 39733.2196 + tps: 18092.32775 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 48763.84455 - tps: 40990.41573 + dps: 51098.85575 + tps: 41178.80341 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 34504.74309 - tps: 17809.61857 + dps: 37000.18362 + tps: 18015.12254 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 48437.0323 - tps: 26183.73645 + dps: 56028.33078 + tps: 25148.57283 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 42505.13136 - tps: 38138.71096 + dps: 44332.70799 + tps: 38092.65046 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 24906.52838 - tps: 12599.11473 + dps: 26813.63445 + tps: 12856.60644 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 31197.30321 - tps: 16606.61831 + dps: 37197.73059 + tps: 16694.29621 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55104.68399 - tps: 46984.85157 + dps: 57397.70277 + tps: 47290.79467 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38724.6181 - tps: 19723.06277 + dps: 41198.34735 + tps: 20059.18881 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 52945.99988 - tps: 27587.88931 + dps: 61016.53668 + tps: 27377.35749 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47371.46696 - tps: 43211.97912 + dps: 48911.86069 + tps: 43297.62709 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27320.07243 - tps: 13966.08488 + dps: 29556.39372 + tps: 14332.72254 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34390.64865 - tps: 18269.02055 + dps: 40638.66806 + tps: 17923.26789 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55054.78554 - tps: 45830.22517 + dps: 57892.55419 + tps: 47148.18139 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39163.05522 - tps: 20776.16548 + dps: 42046.3535 + tps: 21299.29608 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54200.53361 - tps: 29796.85847 + dps: 62354.20272 + tps: 29244.9657 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47800.80987 - tps: 41762.3523 + dps: 49685.00958 + tps: 42572.37422 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27863.51672 - tps: 14768.53166 + dps: 29786.16746 + tps: 15001.10351 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34382.38862 - tps: 19158.11378 + dps: 40635.99183 + tps: 18983.26652 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55720.89958 - tps: 47194.50536 + dps: 58266.33153 + tps: 48465.95868 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39391.32545 - tps: 20263.64289 + dps: 41603.66736 + tps: 20528.28899 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 53879.59191 - tps: 28367.29216 + dps: 61768.90029 + tps: 28024.45345 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47748.10998 - tps: 43501.97658 + dps: 49524.87594 + tps: 43774.00296 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27901.67238 - tps: 14420.32782 + dps: 30002.29739 + tps: 14669.01829 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 34965.66334 - tps: 18697.08575 + dps: 41203.70344 + tps: 18379.41517 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49722.96997 - tps: 41162.43341 + dps: 52394.50261 + tps: 41489.41341 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35287.50705 - tps: 17965.31874 + dps: 37997.92583 + tps: 18203.63534 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 49725.11357 - tps: 26654.60705 + dps: 57965.92676 + tps: 25546.03696 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 43511.51515 - tps: 38064.53395 + dps: 45518.56663 + tps: 38381.86978 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25517.96051 - tps: 12729.04846 + dps: 27606.50121 + tps: 13010.25689 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 32174.02152 - tps: 16921.20115 + dps: 38697.70291 + tps: 16981.12766 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 54933.30749 - tps: 47161.16738 + dps: 57134.20237 + tps: 47751.53988 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 38697.3125 - tps: 20004.99114 + dps: 40900.18214 + tps: 20159.94224 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54315.78253 - tps: 28226.79059 + dps: 60711.01953 + tps: 27256.04722 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 47638.8725 - tps: 44354.78561 + dps: 49542.5139 + tps: 45277.62225 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27291.99313 - tps: 14189.58605 + dps: 29147.73104 + tps: 14410.26182 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35086.42661 - tps: 19074.37707 + dps: 41491.81775 + tps: 19067.56145 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55051.45441 - tps: 46184.84949 + dps: 57598.04157 + tps: 46970.16824 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39221.3964 - tps: 21032.34852 + dps: 41397.27253 + tps: 21394.0452 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 54770.76674 - tps: 30031.74165 + dps: 61931.28053 + tps: 29651.12665 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48100.81925 - tps: 42582.19019 + dps: 50535.93015 + tps: 44322.28927 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 28036.76494 - tps: 15054.13883 + dps: 29594.31416 + tps: 15181.51802 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35984.36113 - tps: 20095.32468 + dps: 41115.38668 + tps: 19782.78292 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 55553.68677 - tps: 47806.39561 + dps: 57853.57026 + tps: 48496.71444 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 39309.10461 - tps: 20482.00469 + dps: 41536.23533 + tps: 20688.92152 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 55250.13252 - tps: 29109.42399 + dps: 61682.54589 + tps: 28203.90931 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 48514.51757 - tps: 44977.45736 + dps: 50455.0023 + tps: 45576.05636 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27767.25999 - tps: 14603.52479 + dps: 29778.48156 + tps: 14921.05866 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 35534.94718 - tps: 19454.65546 + dps: 41978.30937 + tps: 19442.85616 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 49344.54934 - tps: 40614.26367 + dps: 51700.65917 + tps: 41813.28505 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 35441.42856 - tps: 18161.52939 + dps: 37420.64104 + tps: 18315.70806 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 51424.63986 - tps: 27205.70813 + dps: 58423.31083 + tps: 26967.26312 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 43898.44641 - tps: 38388.30712 + dps: 45454.72131 + tps: 38836.18303 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 25176.74144 - tps: 12912.36091 + dps: 27028.44173 + tps: 13079.02579 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 33012.32449 - tps: 18025.45969 + dps: 38506.74544 + tps: 17487.45431 } } dps_results: { diff --git a/ui/death_knight/frost/sim.ts b/ui/death_knight/frost/sim.ts index f4389ec7c8..8d1d8818a3 100644 --- a/ui/death_knight/frost/sim.ts +++ b/ui/death_knight/frost/sim.ts @@ -141,7 +141,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFrostDeathKnight, { OtherInputs.DarkIntentUptime, ], }, - itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand], + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { showExecuteProportion: false, }, From b33a82eb5618f48344aa2896ea72f271ee0408cf Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 21 Dec 2024 22:58:16 +0100 Subject: [PATCH 052/127] Remove unused check --- sim/core/item_swaps.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 6c3530c135..885c593134 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -200,10 +200,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { return } hasItemEquipped := swap.HasItemEquipped(itemID) - itemSlot := swap.GetItemFromPossibleSlotsByItemID(itemID, slots) - if itemSlot == -1 { - return - } + spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { aura := character.GetAuraByID(spell.ActionID) From 9066f28cbd8fa052cc38ac6647886993b41e555c Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 21 Dec 2024 23:03:57 +0100 Subject: [PATCH 053/127] Rename default procmask functions --- sim/common/cata/enchant_effects.go | 8 ++++---- sim/common/cata/gurthalak.go | 2 +- sim/common/cata/other_effects.go | 4 ++-- sim/common/shared/shared_utils.go | 4 ++-- sim/common/tbc/enchant_effects.go | 8 ++++---- sim/common/tbc/melee_items.go | 10 +++++----- sim/common/wotlk/enchant_effects.go | 8 ++++---- sim/common/wotlk/other_effects.go | 2 +- sim/core/character.go | 21 +++++++++------------ sim/core/item_swaps.go | 16 ++++++++-------- sim/death_knight/runeforging.go | 6 +++--- 11 files changed, 43 insertions(+), 46 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 5a847b84fd..44edd8f3f4 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -68,7 +68,7 @@ func init() { }) // TODO: Verify PPM (currently based on elitist + simcraft) - procMask := character.GetProcMaskForEnchant(4067) + procMask := character.GetDefaultProcMaskForWeaponEnchant(4067) ppm := 5.0 ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) meleeIcd := &core.Cooldown{ @@ -140,7 +140,7 @@ func init() { // no verified PPM but silence effect + increased damage // will result in significant lower PPM // TODO: Verify PPM - procMask := character.GetProcMaskForEnchant(4074) + procMask := character.GetDefaultProcMaskForWeaponEnchant(4074) ppm := 2.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Elemental Slayer", @@ -173,7 +173,7 @@ func init() { ohAura := procBuilder("Hurricane Enchant OH", 2) spAura := procBuilder("Hurricane Enchant Spell", 3) - procMask := character.GetProcMaskForEnchant(4083) + procMask := character.GetDefaultProcMaskForWeaponEnchant(4083) ppm := 1.0 ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) @@ -311,7 +311,7 @@ func init() { time.Second*12, ) - procMask := character.GetProcMaskForEnchant(4099) + procMask := character.GetDefaultProcMaskForWeaponEnchant(4099) ppm := 1.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Landslide", diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 5d07d0ed34..6a675bf479 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -63,7 +63,7 @@ func init() { }, }) - procMask := character.GetProcMaskForItem(gurthalakItemID) + procMask := character.GetDefaultProcMaskForWeaponEffect(gurthalakItemID) aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Gurthalak Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: gurthalakItemID}, diff --git a/sim/common/cata/other_effects.go b/sim/common/cata/other_effects.go index b1ad12ed40..5d69204779 100644 --- a/sim/common/cata/other_effects.go +++ b/sim/common/cata/other_effects.go @@ -1126,7 +1126,7 @@ func init() { character := agent.GetCharacter() actionID := core.ActionID{SpellID: []int32{109828, 108022, 109831}[version]} hpModifier := []float64{0.013, 0.015, 0.017}[version] - procMask := character.GetProcMaskForItem(souldrinkerItemID) | core.ProcMaskMeleeProc + procMask := character.GetDefaultProcMaskForWeaponEffect(souldrinkerItemID) | core.ProcMaskMeleeProc var damageDealt float64 drainLifeHeal := character.RegisterSpell(core.SpellConfig{ @@ -1189,7 +1189,7 @@ func init() { core.NewItemEffect(nokaledItemID, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(nokaledItemID) | core.ProcMaskMeleeProc + procMask := character.GetDefaultProcMaskForWeaponEffect(nokaledItemID) | core.ProcMaskMeleeProc minDamage := []float64{6781, 7654, 8640}[version] maxDamage := []float64{10171, 11481, 12960}[version] diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 4dc755d564..f37699e051 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -430,7 +430,7 @@ func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpel procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) if config.PPM != 0 && config.ProcMask == core.ProcMaskUnknown { - config.ProcMask = character.GetProcMaskForEnchant(config.EnchantID) + config.ProcMask = character.GetDefaultProcMaskForWeaponEnchant(config.EnchantID) } var procSpell ExtraSpellInfo @@ -600,7 +600,7 @@ func NewProcDamageEffect(config ProcDamageEffect) { triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) if config.Trigger.PPM != 0 { - character.ItemSwap.RegisterPPMItem(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + character.ItemSwap.RegisterPPMWeaponEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) } else { character.ItemSwap.RegisterEnchantProc(config.ItemID, triggerAura, config.Slots) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index 9cbf849982..37e1ff94d5 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -61,7 +61,7 @@ func init() { core.NewEnchantEffect(1900, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(1900) + procMask := character.GetDefaultProcMaskForWeaponEnchant(1900) ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) // -4 str per level over 60 @@ -103,7 +103,7 @@ func init() { core.NewEnchantEffect(2673, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(2673) + procMask := character.GetDefaultProcMaskForWeaponEnchant(2673) ppmm := character.AutoAttacks.NewPPMManager(0.73, procMask) mhAura := character.NewTemporaryStatsAura("Lightning Speed MH", core.ActionID{SpellID: 28093, Tag: 1}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) @@ -151,7 +151,7 @@ func init() { core.NewEnchantEffect(3225, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3225) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3225) ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) procAura := character.NewTemporaryStatsAura("Executioner Proc", core.ActionID{SpellID: 42976}, stats.Stats{stats.CritRating: 120}, time.Second*15) @@ -221,7 +221,7 @@ func init() { core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3273) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3273) if procMask == core.ProcMaskUnknown { return } diff --git a/sim/common/tbc/melee_items.go b/sim/common/tbc/melee_items.go index 35cf51d1b9..affce9e5a7 100644 --- a/sim/common/tbc/melee_items.go +++ b/sim/common/tbc/melee_items.go @@ -22,7 +22,7 @@ func init() { core.NewItemEffect(19019, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(19019) + procMask := character.GetDefaultProcMaskForWeaponEffect(19019) ppmm := character.AutoAttacks.NewPPMManager(6.0, procMask) procActionID := core.ActionID{SpellID: 21992} @@ -174,7 +174,7 @@ func init() { core.NewItemEffect(29996, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(29996) + procMask := character.GetDefaultProcMaskForWeaponEffect(29996) pppm := character.AutoAttacks.NewPPMManager(1.0, procMask) actionID := core.ActionID{ItemID: 29996} @@ -214,7 +214,7 @@ func init() { core.NewItemEffect(31193, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(31193) + procMask := character.GetDefaultProcMaskForWeaponEffect(31193) procSpell := character.GetOrRegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 24585}, @@ -249,7 +249,7 @@ func init() { core.NewItemEffect(32262, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(32262) + procMask := character.GetDefaultProcMaskForWeaponEffect(32262) ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) procSpell := character.GetOrRegisterSpell(core.SpellConfig{ @@ -355,7 +355,7 @@ func init() { core.NewItemEffect(12590, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(12590) + procMask := character.GetDefaultProcMaskForWeaponEffect(12590) ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index ec58ad806f..4538ca3b2c 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -16,7 +16,7 @@ func init() { core.NewEnchantEffect(3251, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3251) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3251) ppmm := character.AutoAttacks.NewPPMManager(4.0, procMask) procSpell := character.RegisterSpell(core.SpellConfig{ @@ -61,7 +61,7 @@ func init() { core.NewEnchantEffect(3239, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3239) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3239) ppmm := character.AutoAttacks.NewPPMManager(4.0, procMask) procSpell := character.RegisterSpell(core.SpellConfig{ @@ -155,7 +155,7 @@ func init() { core.NewEnchantEffect(3789, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3789) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3789) ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) // Modify only gear armor, including from agility @@ -191,7 +191,7 @@ func init() { core.NewEnchantEffect(3241, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForEnchant(3241) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3241) ppmm := character.AutoAttacks.NewPPMManager(3.0, procMask) healthMetrics := character.NewHealthMetrics(core.ActionID{ItemID: 44494}) diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index ee5f85cbda..b20a7b36e7 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -911,7 +911,7 @@ func init() { core.NewItemEffect(itemID, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetProcMaskForItem(itemID) + procMask := character.GetDefaultProcMaskForWeaponEffect(itemID) ppmm := character.AutoAttacks.NewPPMManager(2.0, procMask) procActionID := core.ActionID{ItemID: itemID} diff --git a/sim/core/character.go b/sim/core/character.go index 351ea1c58e..6251583615 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -598,31 +598,31 @@ func (character *Character) HasRangedWeapon() bool { return character.GetRangedWeapon() != nil } -func (character *Character) GetProcMaskForEnchant(effectID int32) ProcMask { - return character.getProcMaskFor(func(item *Item) bool { - return item.Enchant.EffectID == effectID +func (character *Character) GetDefaultProcMaskForWeaponEnchant(effectID int32) ProcMask { + return character.getDefaultProcMaskFor(func(weapon *Item) bool { + return weapon.Enchant.EffectID == effectID }) } -func (character *Character) GetProcMaskForItem(itemID int32) ProcMask { - return character.getProcMaskFor(func(item *Item) bool { - return item.ID == itemID +func (character *Character) GetDefaultProcMaskForWeaponEffect(itemID int32) ProcMask { + return character.getDefaultProcMaskFor(func(weapon *Item) bool { + return weapon.ID == itemID }) } func (character *Character) GetProcMaskForTypes(weaponTypes ...proto.WeaponType) ProcMask { - return character.getProcMaskFor(func(weapon *Item) bool { + return character.getDefaultProcMaskFor(func(weapon *Item) bool { return weapon != nil && slices.Contains(weaponTypes, weapon.WeaponType) }) } func (character *Character) GetProcMaskForTypesAndHand(twohand bool, weaponTypes ...proto.WeaponType) ProcMask { - return character.getProcMaskFor(func(weapon *Item) bool { + return character.getDefaultProcMaskFor(func(weapon *Item) bool { return weapon != nil && (weapon.HandType == proto.HandType_HandTypeTwoHand) == twohand && slices.Contains(weaponTypes, weapon.WeaponType) }) } -func (character *Character) getProcMaskFor(pred func(item *Item) bool) ProcMask { +func (character *Character) getDefaultProcMaskFor(pred func(item *Item) bool) ProcMask { mask := ProcMaskUnknown if pred(character.MainHand()) { mask |= ProcMaskMeleeMH @@ -823,9 +823,6 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta }, }) - // If we use ItemSwap we need to be able to toggle the item specialization - // However due to dynamic stats only being able to be added after finalize() - // we need to maintain 2 stat dependencies to toggle the effect when swapping items if character.ItemSwap.IsEnabled() { character.RegisterItemSwapCallback([]proto.ItemSlot{ proto.ItemSlot_ItemSlotHead, diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 885c593134..fab2a8118c 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -96,11 +96,11 @@ func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMMa } // Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMItem(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterPPMWeaponEffect(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { swap.registerPPMInternal(itemID, 0, ppm, ppmm, aura, slots) } -func (swap *ItemSwap) registerPPMInternal(itemID int32, effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) registerPPMInternal(itemID int32, enchantEffectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return @@ -113,16 +113,16 @@ func (swap *ItemSwap) registerPPMInternal(itemID int32, effectID int32, ppm floa var isItemSlotMatch = false isItemPPM := itemID != 0 - isEffectPPM := effectID != 0 + isEnchantEffectPPM := enchantEffectID != 0 if isItemPPM { hasItemEquipped = item.ID == itemID isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, slots) == slot - procMask = character.GetProcMaskForItem(itemID) - } else if isEffectPPM { - hasItemEquipped = item.Enchant.EffectID == effectID || item.TempEnchant == effectID - isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(effectID, slots) == slot - procMask = character.GetProcMaskForEnchant(effectID) + procMask = character.GetDefaultProcMaskForWeaponEffect(itemID) + } else if isEnchantEffectPPM { + hasItemEquipped = item.Enchant.EffectID == enchantEffectID || item.TempEnchant == enchantEffectID + isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(enchantEffectID, slots) == slot + procMask = character.GetDefaultProcMaskForWeaponEnchant(enchantEffectID) } if !isItemSlotMatch { return diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 202c17abca..77be8a0d63 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -75,7 +75,7 @@ func init() { }, }) - procMask := character.GetProcMaskForEnchant(3368) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3368) rfcAura := character.NewTemporaryStatsAuraWrapped("Rune Of The Fallen Crusader Proc", core.ActionID{SpellID: 53365}, stats.Stats{}, time.Second*15, func(aura *core.Aura) { statDep := character.NewDynamicMultiplyStat(stats.Strength, 1.15) @@ -120,7 +120,7 @@ func init() { School: core.SpellSchoolShadow | core.SpellSchoolFrost, }) - procMask := character.GetProcMaskForEnchant(3369) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3369) cinderAura := character.GetOrRegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 53386}, @@ -235,7 +235,7 @@ func init() { }) }) - procMask := character.GetProcMaskForEnchant(3370) + procMask := character.GetDefaultProcMaskForWeaponEnchant(3370) mhRazoriceSpell := newRazoriceHitSpell(character, true) ohRazoriceSpell := newRazoriceHitSpell(character, false) From bcedbc8f295721aebbb0ec8d30cd09f82f4dbfb4 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 21 Dec 2024 23:04:52 +0100 Subject: [PATCH 054/127] Fix cast function matcher --- sim/core/cast.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sim/core/cast.go b/sim/core/cast.go index 2bbbd02a32..19f20d11e0 100644 --- a/sim/core/cast.go +++ b/sim/core/cast.go @@ -229,10 +229,8 @@ func (spell *Spell) makeCastFunc(config CastConfig) CastSuccessFunc { func (spell *Spell) makeCastFuncSimple() CastSuccessFunc { return func(sim *Simulation, target *Unit) bool { - if spell.Flags != 0 { - if spell.Flags.Matches(SpellFlagSwapped) { - return spell.castFailureHelper(sim, "spell belong to a swapped item") - } + if spell.Flags.Matches(SpellFlagSwapped) { + return spell.castFailureHelper(sim, "spell attached to an un-equipped item") } if spell.ExtraCastCondition != nil { From 277ced904251c5f0dab1c46fe50318e13405752d Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 23 Dec 2024 11:41:59 +0100 Subject: [PATCH 055/127] Refacor ppm effect helpers --- sim/core/item_swaps.go | 75 ++++++++++++++++++++++-------- sim/death_knight/talents_frost.go | 4 +- sim/death_knight/talents_unholy.go | 10 ++-- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index fab2a8118c..d911015c43 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -92,15 +92,55 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal // Helper for handling Effects that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { - swap.registerPPMInternal(0, effectID, ppm, ppmm, aura, slots) + swap.registerPPMInternal(ItemSwapPPMConfig{ + EnchantId: effectID, + PPM: ppm, + ppmm: ppmm, + aura: aura, + slots: slots, + }) } // Helper for handling Effects that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterPPMWeaponEffect(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { - swap.registerPPMInternal(itemID, 0, ppm, ppmm, aura, slots) + swap.registerPPMInternal(ItemSwapPPMConfig{ + EffectID: itemID, + PPM: ppm, + ppmm: ppmm, + aura: aura, + slots: slots, + }) +} + +// Helper for handling procs that use PPMManager to toggle the aura on/off +func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager, slots []proto.ItemSlot) { + swap.registerPPMInternal(ItemSwapPPMConfig{ + CustomProcMask: procMask, + PPM: ppm, + ppmm: ppmm, + slots: slots, + }) +} + +type ItemSwapPPMConfig struct { + EffectID int32 + EnchantId int32 + PPM float64 + CustomProcMask ProcMask + ppmm *PPMManager + aura *Aura + slots []proto.ItemSlot } -func (swap *ItemSwap) registerPPMInternal(itemID int32, enchantEffectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { + itemID := config.EffectID + enchantEffectID := config.EnchantId + ppm := config.PPM + ppmm := config.ppmm + aura := config.aura + slots := config.slots + customProcMask := config.CustomProcMask + character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return @@ -108,6 +148,11 @@ func (swap *ItemSwap) registerPPMInternal(itemID int32, enchantEffectID int32, p character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { item := swap.GetEquippedItemBySlot(slot) + if customProcMask != 0 { + *ppmm = character.AutoAttacks.NewPPMManager(ppm, customProcMask) + return + } + var hasItemEquipped bool var procMask ProcMask var isItemSlotMatch = false @@ -124,14 +169,17 @@ func (swap *ItemSwap) registerPPMInternal(itemID int32, enchantEffectID int32, p isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(enchantEffectID, slots) == slot procMask = character.GetDefaultProcMaskForWeaponEnchant(enchantEffectID) } + if !isItemSlotMatch { return } - if hasItemEquipped { - aura.Activate(sim) - } else { - aura.Deactivate(sim) + if aura != nil { + if hasItemEquipped { + aura.Activate(sim) + } else { + aura.Deactivate(sim) + } } *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) @@ -139,17 +187,6 @@ func (swap *ItemSwap) registerPPMInternal(itemID int32, enchantEffectID int32, p } -// Helper for handling procs that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager, slots []proto.ItemSlot) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) - }) -} - // Helper for handling Item Effects that use the itemID to toggle the aura on and off func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemSlot) { character := swap.character @@ -216,7 +253,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { return } - spell.CD.Set(sim.CurrentTime + time.Second*30) + spell.CD.Set(sim.CurrentTime + max(spell.CD.TimeToReady(sim), time.Second*30)) } }) } diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index 6f02acba95..b75bfc087d 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -198,7 +198,7 @@ func (dk *DeathKnight) applyKillingMachine() { kmMod.Deactivate() }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell.ClassSpellMask&(DeathKnightSpellObliterate|DeathKnightSpellFrostStrike) == 0 { + if !spell.Matches(DeathKnightSpellObliterate | DeathKnightSpellFrostStrike) { return } if !result.Landed() { @@ -231,7 +231,7 @@ func (dk *DeathKnight) applyKillingMachine() { }, }) - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) } func (dk *DeathKnight) applyMightOfTheFrozenWastes() { diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index 58a4ff323a..1e82bffcbf 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -221,7 +221,7 @@ func (dk *DeathKnight) applyUnholyBlight() { } func (dk *DeathKnight) ebonPlaguebringerDiseaseMultiplier(_ *core.Simulation, spell *core.Spell, _ *core.AttackTable) float64 { - return core.TernaryFloat64(spell.ClassSpellMask&DeathKnightSpellDisease > 0, 1.0+0.15*float64(dk.Talents.EbonPlaguebringer), 1.0) + return core.TernaryFloat64(spell.Matches(DeathKnightSpellDisease), 1.0+0.15*float64(dk.Talents.EbonPlaguebringer), 1.0) } func (dk *DeathKnight) applyEbonPlaguebringer() { @@ -249,7 +249,7 @@ func (dk *DeathKnight) applyEbonPlaguebringer() { core.MakePermanent(dk.GetOrRegisterAura(core.Aura{ Label: "Ebon Plague Triggers", OnApplyEffects: func(aura *core.Aura, sim *core.Simulation, target *core.Unit, spell *core.Spell) { - if spell.ClassSpellMask&DeathKnightSpellDisease == 0 { + if !spell.Matches(DeathKnightSpellDisease) { return } @@ -257,7 +257,7 @@ func (dk *DeathKnight) applyEbonPlaguebringer() { dk.EbonPlagueAura.Get(target).Activate(sim) }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask&DeathKnightSpellDisease == 0 { + if !spell.Matches(DeathKnightSpellDisease) { return } @@ -290,7 +290,7 @@ func (dk *DeathKnight) applySuddenDoom() { mod.Deactivate() }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask != DeathKnightSpellDeathCoil { + if !spell.Matches(DeathKnightSpellDeathCoil) { return } @@ -326,7 +326,7 @@ func (dk *DeathKnight) applySuddenDoom() { }, }) - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) } func (dk *DeathKnight) applyShadowInfusion() *core.Aura { From d15571f950c77422a7b140861fb83803b59b633c Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sat, 4 Jan 2025 16:27:45 +0100 Subject: [PATCH 056/127] Refactor EnchantProcStatBonus to use ProcStatBonus factory --- sim/common/cata/enchant_effects.go | 216 +++++++++++++-------------- sim/common/cata/stat_bonus_procs.go | 187 +++++++++++------------ sim/common/shared/shared_utils.go | 165 ++++++-------------- sim/common/wotlk/enchant_effects.go | 86 +++++------ sim/common/wotlk/stat_bonus_procs.go | 14 +- sim/core/item_swaps.go | 107 ++++++++----- 6 files changed, 353 insertions(+), 422 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 44edd8f3f4..9a2dcf07a8 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -242,55 +242,49 @@ func init() { }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4084, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Heartsong", - ID: 74224, - AuraID: 74224, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, - ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, - Outcome: core.OutcomeLanded, - ICD: time.Second * 20, - ProcChance: 0.25, - Bonus: stats.Stats{stats.Spirit: 200}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Heartsong", + EnchantID: 4084, + ItemID: 74224, + AuraID: 74224, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 20, + ProcChance: 0.25, + Bonus: stats.Stats{stats.Spirit: 200}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4097, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Power Torrent", - ID: 74241, - AuraID: 74241, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, - ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, - Outcome: core.OutcomeLanded, - ICD: time.Second * 45, - ProcChance: 1.0 / 3.0, - Bonus: stats.Stats{stats.Intellect: 500}, - Duration: time.Second * 12, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Power Torrent", + EnchantID: 4097, + ItemID: 74241, + AuraID: 74241, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 45, + ProcChance: 1.0 / 3.0, + Bonus: stats.Stats{stats.Intellect: 500}, + Duration: time.Second * 12, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Windwalk", EnchantID: 4098, + ItemID: 74243, + AuraID: 74243, + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + PPM: 1, // based on old Wowhead comments, TODO: measure in Classic + Bonus: stats.Stats{stats.DodgeRating: 600}, + Duration: time.Second * 10, Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Windwalk", - ID: 74243, - AuraID: 74243, - Callback: core.CallbackOnSpellHitDealt, - Outcome: core.OutcomeLanded, - PPM: 1, // based on old Wowhead comments, TODO: measure in Classic - Bonus: stats.Stats{stats.DodgeRating: 600}, - Duration: time.Second * 10, - }, }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -332,75 +326,67 @@ func init() { }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4115, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Lightweave Embroidery Cata", - ID: 75171, - AuraID: 75170, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, - ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, - Outcome: core.OutcomeLanded, - ICD: time.Second * 64, - ProcChance: 0.25, - Bonus: stats.Stats{stats.Intellect: 580}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Lightweave Embroidery Cata", + EnchantID: 4115, + ItemID: 75171, + AuraID: 75170, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 64, + ProcChance: 0.25, + Bonus: stats.Stats{stats.Intellect: 580}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4116, Spell: 75175 - Darkglow Embroidery - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4116, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Darkglow Embroidery Cata", - ID: 75174, - AuraID: 75173, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, - ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, - Outcome: core.OutcomeLanded, - ICD: time.Second * 57, - ProcChance: 0.30, - Bonus: stats.Stats{stats.Spirit: 580}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Darkglow Embroidery Cata", + EnchantID: 4116, + ItemID: 75174, + AuraID: 75173, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 57, + ProcChance: 0.30, + Bonus: stats.Stats{stats.Spirit: 580}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4118, Spell: 75178 - Swordguard Embroidery - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4118, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Swordguard Embroidery Cata", - ID: 75176, - AuraID: 75178, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, - ProcMask: core.ProcMaskMeleeOrRanged, - Outcome: core.OutcomeLanded, - ICD: time.Second * 55, - ProcChance: 0.15, - Bonus: stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Swordguard Embroidery Cata", + EnchantID: 4118, + ItemID: 75176, + AuraID: 75178, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskMeleeOrRanged, + Outcome: core.OutcomeLanded, + ICD: time.Second * 55, + ProcChance: 0.15, + Bonus: stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4175, Spell: 81932, Item: 59594 - Gnomish X-Ray Scope - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 4175, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Gnomish X-Ray Scope", - ID: 95712, - AuraID: 95712, - Callback: core.CallbackOnSpellHitDealt, - ProcMask: core.ProcMaskRanged, - Outcome: core.OutcomeLanded, - ICD: time.Second * 40, - ProcChance: 0.1, - Bonus: stats.Stats{stats.RangedAttackPower: 800}, - Duration: time.Second * 10, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Gnomish X-Ray Scope", + EnchantID: 4175, + ItemID: 95712, + AuraID: 95712, + Callback: core.CallbackOnSpellHitDealt, + ProcMask: core.ProcMaskRanged, + Outcome: core.OutcomeLanded, + ICD: time.Second * 40, + ProcChance: 0.1, + Bonus: stats.Stats{stats.RangedAttackPower: 800}, + Duration: time.Second * 10, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, }) // Enchant: 4176, Item: 59595 - R19 Threatfinder @@ -457,21 +443,19 @@ func init() { }) // Enchant: 4267, Spell: 99623, Item: 70139 - Flintlocke's Woodchucker - shared.NewEnchantProcStatBonusEffectWithDamageProc(shared.EnchantProcStatBonusEffect{ - EnchantID: 4267, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Flintlocke's Woodchucker", - ID: 99621, - AuraID: 99621, - Callback: core.CallbackOnSpellHitDealt, - ProcMask: core.ProcMaskRanged, - Outcome: core.OutcomeLanded, - ICD: time.Second * 40, - ProcChance: 0.1, - Bonus: stats.Stats{stats.Agility: 300}, - Duration: time.Second * 10, - }, + shared.NewProcStatBonusEffectWithDamageProc(shared.ProcStatBonusEffect{ + Name: "Flintlocke's Woodchucker", + EnchantID: 4267, + ItemID: 99621, + AuraID: 99621, + Callback: core.CallbackOnSpellHitDealt, + ProcMask: core.ProcMaskRanged, + Outcome: core.OutcomeLanded, + ICD: time.Second * 40, + ProcChance: 0.1, + Bonus: stats.Stats{stats.Agility: 300}, + Duration: time.Second * 10, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, }, shared.DamageEffect{ SpellID: 99621, diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 56e58591fb..b29165a78e 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -11,7 +11,7 @@ import ( func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Gear Detector", - ID: 61462, + ItemID: 61462, AuraID: 92055, Bonus: stats.Stats{stats.HasteRating: 1002}, Duration: time.Second * 20, @@ -24,7 +24,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Stonemother's Kiss", - ID: 61411, + ItemID: 61411, AuraID: 90895, Bonus: stats.Stats{stats.CritRating: 1164}, Duration: time.Second * 20, @@ -37,7 +37,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Witching Hourglass", - ID: 56320, + ItemID: 56320, AuraID: 90887, Bonus: stats.Stats{stats.HasteRating: 1710}, Duration: time.Second * 15, @@ -50,7 +50,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Witching Hourglass", - ID: 55787, + ItemID: 55787, AuraID: 90885, Bonus: stats.Stats{stats.HasteRating: 918}, Duration: time.Second * 15, @@ -63,7 +63,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Grace of the Herald", - ID: 55266, + ItemID: 55266, AuraID: 92052, Bonus: stats.Stats{stats.CritRating: 924}, Duration: time.Second * 10, @@ -76,7 +76,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Grace of the Herald (Heroic)", - ID: 56295, + ItemID: 56295, AuraID: 92087, Bonus: stats.Stats{stats.CritRating: 1710}, Duration: time.Second * 10, @@ -89,7 +89,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Porcelain Crab", - ID: 55237, + ItemID: 55237, AuraID: 92166, Bonus: stats.Stats{stats.MasteryRating: 918}, Duration: time.Second * 20, @@ -102,7 +102,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Porcelain Crab (Heroic)", - ID: 56280, + ItemID: 56280, AuraID: 92174, Bonus: stats.Stats{stats.MasteryRating: 1710}, Duration: time.Second * 20, @@ -115,7 +115,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Key to the Endless Chamber", - ID: 55795, + ItemID: 55795, AuraID: 92069, Bonus: stats.Stats{stats.Agility: 1290}, Duration: time.Second * 15, @@ -128,7 +128,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Key to the Endless Chamber (Heroic)", - ID: 56328, + ItemID: 56328, AuraID: 92091, Bonus: stats.Stats{stats.Agility: 1710}, Duration: time.Second * 15, @@ -141,7 +141,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Tendrils of Burrowing Dark", - ID: 55810, + ItemID: 55810, AuraID: 90896, Bonus: stats.Stats{stats.SpellPower: 1290}, Duration: time.Second * 15, @@ -154,7 +154,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Tendrils of Burrowing Dark (Heroic)", - ID: 56339, + ItemID: 56339, AuraID: 90898, Bonus: stats.Stats{stats.SpellPower: 1710}, Duration: time.Second * 15, @@ -167,7 +167,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Tear of Blood", - ID: 55819, + ItemID: 55819, AuraID: 91138, Bonus: stats.Stats{stats.Spirit: 1290}, Duration: time.Second * 15, @@ -180,7 +180,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Tear of Blood (Heroic)", - ID: 56351, + ItemID: 56351, AuraID: 91139, Bonus: stats.Stats{stats.Spirit: 1710}, Duration: time.Second * 15, @@ -193,7 +193,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Rainsong", - ID: 55854, + ItemID: 55854, AuraID: 91141, Bonus: stats.Stats{stats.HasteRating: 1290}, Duration: time.Second * 15, @@ -206,7 +206,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Rainsong (Heroic)", - ID: 56377, + ItemID: 56377, AuraID: 91143, Bonus: stats.Stats{stats.HasteRating: 1710}, Duration: time.Second * 15, @@ -219,7 +219,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Tank-Commander Insignia", - ID: 63841, + ItemID: 63841, AuraID: 91355, Bonus: stats.Stats{stats.HasteRating: 1314}, Duration: time.Second * 20, @@ -232,7 +232,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Shrine-Cleansing Purifier", - ID: 63838, + ItemID: 63838, AuraID: 91353, Bonus: stats.Stats{stats.HasteRating: 1314}, Duration: time.Second * 20, @@ -245,7 +245,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Talisman of Sinister Order", - ID: 65804, + ItemID: 65804, AuraID: 92166, Bonus: stats.Stats{stats.MasteryRating: 918}, Duration: time.Second * 20, @@ -258,7 +258,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Harrison's Insignia of Panache", - ID: 65803, + ItemID: 65803, AuraID: 92164, Bonus: stats.Stats{stats.MasteryRating: 918}, Duration: time.Second * 20, @@ -271,7 +271,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Harrison's Insignia of Panache", - ID: 65805, + ItemID: 65805, AuraID: 92164, Bonus: stats.Stats{stats.MasteryRating: 918}, Duration: time.Second * 20, @@ -284,7 +284,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heart of the Vile", - ID: 66969, + ItemID: 66969, AuraID: 92054, Bonus: stats.Stats{stats.CritRating: 924}, Duration: time.Second * 10, @@ -297,7 +297,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Anhuur's Hymnal", - ID: 55889, + ItemID: 55889, AuraID: 90989, Bonus: stats.Stats{stats.SpellPower: 1512}, Duration: time.Second * 10, @@ -310,7 +310,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Anhuur's Hymnal (Heroic)", - ID: 56407, + ItemID: 56407, AuraID: 90992, Bonus: stats.Stats{stats.SpellPower: 1710}, Duration: time.Second * 10, @@ -323,7 +323,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Sorrowsong", - ID: 55879, + ItemID: 55879, AuraID: 90990, Bonus: stats.Stats{stats.SpellPower: 1512}, Duration: time.Second * 10, @@ -340,7 +340,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Sorrowsong (Heroic)", - ID: 56400, + ItemID: 56400, AuraID: 91002, Bonus: stats.Stats{stats.SpellPower: 1710}, Duration: time.Second * 10, @@ -357,7 +357,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Right Eye of Rajh", - ID: 56100, + ItemID: 56100, AuraID: 91370, Bonus: stats.Stats{stats.Strength: 1512}, Duration: time.Second * 10, @@ -370,7 +370,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Right Eye of Rajh (Heroic)", - ID: 56431, + ItemID: 56431, AuraID: 91368, Bonus: stats.Stats{stats.Strength: 1710}, Duration: time.Second * 10, @@ -383,7 +383,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Blood of Isiset", - ID: 55995, + ItemID: 55995, AuraID: 91147, Bonus: stats.Stats{stats.Spirit: 1512}, Duration: time.Second * 20, @@ -396,7 +396,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Blood of Isiset (Heroic)", - ID: 56414, + ItemID: 56414, AuraID: 91149, Bonus: stats.Stats{stats.Spirit: 1710}, Duration: time.Second * 20, @@ -409,7 +409,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Throngus's Finger", - ID: 56121, + ItemID: 56121, AuraID: 92208, Bonus: stats.Stats{stats.ParryRating: 1512}, Duration: time.Second * 12, @@ -422,7 +422,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Throngus's Finger (Heroic)", - ID: 56449, + ItemID: 56449, AuraID: 92205, Bonus: stats.Stats{stats.ParryRating: 1710}, Duration: time.Second * 12, @@ -435,7 +435,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heart of Solace", - ID: 55868, + ItemID: 55868, AuraID: 91363, Bonus: stats.Stats{stats.Strength: 1512}, Duration: time.Second * 20, @@ -448,7 +448,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heart of Solace (Heroic)", - ID: 56393, + ItemID: 56393, AuraID: 91364, Bonus: stats.Stats{stats.Strength: 1710}, Duration: time.Second * 20, @@ -461,7 +461,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Left Eye of Rajh", - ID: 56102, + ItemID: 56102, AuraID: 92096, Bonus: stats.Stats{stats.Agility: 1512}, Duration: time.Second * 10, @@ -474,7 +474,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Left Eye of Rajh (Heroic)", - ID: 56427, + ItemID: 56427, AuraID: 92094, Bonus: stats.Stats{stats.Agility: 1710}, Duration: time.Second * 10, @@ -487,7 +487,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bloodthirsty Gladiator's Insignia of Dominance", - ID: 64762, + ItemID: 64762, AuraID: 92218, Bonus: stats.Stats{stats.SpellPower: 912}, Duration: time.Second * 20, @@ -500,7 +500,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bloodthirsty Gladiator's Insignia of Victory", - ID: 64763, + ItemID: 64763, AuraID: 92216, Bonus: stats.Stats{stats.Strength: 912}, Duration: time.Second * 20, @@ -513,7 +513,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bloodthirsty Gladiator's Insignia of Conquest", - ID: 64761, + ItemID: 64761, AuraID: 92220, Bonus: stats.Stats{stats.Agility: 912}, Duration: time.Second * 20, @@ -526,7 +526,7 @@ func init() { shared.NewProcStatBonusEffectWithDamageProc(shared.ProcStatBonusEffect{ Name: "Darkmoon Card: Volcano", - ID: 62047, + ItemID: 62047, AuraID: 89091, Bonus: stats.Stats{stats.Intellect: 1600}, Duration: time.Second * 12, @@ -542,11 +542,12 @@ func init() { MaxDmg: 1500, BonusCoefficient: 0.1, ProcMask: core.ProcMaskSpellDamageProc, + Outcome: shared.OutcomeSpellNoMissCanCrit, }) shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Stump of Time (Horde)", - ID: 62465, + ItemID: 62465, AuraID: 91047, Bonus: stats.Stats{stats.SpellPower: 1926}, Duration: time.Second * 15, @@ -559,7 +560,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Stump of Time (Aliance)", - ID: 62470, + ItemID: 62470, AuraID: 91047, Bonus: stats.Stats{stats.SpellPower: 1926}, Duration: time.Second * 15, @@ -572,7 +573,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Unheeded Warning", - ID: 59520, + ItemID: 59520, AuraID: 92108, Bonus: stats.Stats{stats.AttackPower: 1926, stats.RangedAttackPower: 1926}, Duration: time.Second * 10, @@ -585,7 +586,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heart of Rage", - ID: 59224, + ItemID: 59224, AuraID: 91816, Bonus: stats.Stats{stats.Strength: 1926}, Duration: time.Second * 20, @@ -598,7 +599,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heart of Rage (Heroic)", - ID: 65072, + ItemID: 65072, AuraID: 92345, Bonus: stats.Stats{stats.Strength: 2178}, Duration: time.Second * 20, @@ -611,7 +612,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Symbiotic Worm", - ID: 59332, + ItemID: 59332, AuraID: 92235, Bonus: stats.Stats{stats.MasteryRating: 963}, Duration: time.Second * 10, @@ -628,7 +629,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Symbiotic Worm (Heroic)", - ID: 65048, + ItemID: 65048, AuraID: 92355, Bonus: stats.Stats{stats.MasteryRating: 1089}, Duration: time.Second * 10, @@ -645,7 +646,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Mandala of Stirring Patterns (Horde)", - ID: 62467, + ItemID: 62467, AuraID: 91192, Bonus: stats.Stats{stats.Intellect: 1926}, Duration: time.Second * 10, @@ -658,7 +659,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Mandala of Stirring Patterns (Alliance)", - ID: 62472, + ItemID: 62472, AuraID: 91192, Bonus: stats.Stats{stats.Intellect: 1926}, Duration: time.Second * 10, @@ -671,7 +672,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Essence of the Cyclone", - ID: 59473, + ItemID: 59473, AuraID: 92126, Bonus: stats.Stats{stats.CritRating: 1926}, Duration: time.Second * 10, @@ -684,7 +685,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Essence of the Cyclone (Heroic)", - ID: 65140, + ItemID: 65140, AuraID: 92351, Bonus: stats.Stats{stats.CritRating: 2178}, Duration: time.Second * 10, @@ -697,7 +698,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Theralion's Mirror", - ID: 59519, + ItemID: 59519, AuraID: 91024, Bonus: stats.Stats{stats.MasteryRating: 1926}, Duration: time.Second * 20, @@ -710,7 +711,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Theralion's Mirror (Heroic)", - ID: 65105, + ItemID: 65105, AuraID: 92320, Bonus: stats.Stats{stats.MasteryRating: 2178}, Duration: time.Second * 20, @@ -723,7 +724,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Crushing Weight", - ID: 59506, + ItemID: 59506, AuraID: 91821, Bonus: stats.Stats{stats.HasteRating: 1926}, Duration: time.Second * 15, @@ -736,7 +737,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Crushing Weight (Heroic)", - ID: 65118, + ItemID: 65118, AuraID: 92342, Bonus: stats.Stats{stats.HasteRating: 2178}, Duration: time.Second * 15, @@ -749,7 +750,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bedrock Talisman", - ID: 58182, + ItemID: 58182, AuraID: 92233, Bonus: stats.Stats{stats.DodgeRating: 963}, Duration: time.Second * 10, @@ -766,7 +767,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Fall of Mortality", - ID: 59500, + ItemID: 59500, AuraID: 91821, Bonus: stats.Stats{stats.Spirit: 1962}, Duration: time.Second * 15, @@ -779,7 +780,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Fall of Mortality (Heroic)", - ID: 65124, + ItemID: 65124, AuraID: 92332, Bonus: stats.Stats{stats.Spirit: 2178}, Duration: time.Second * 15, @@ -792,7 +793,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bell of Enraging Resonance", - ID: 59326, + ItemID: 59326, AuraID: 91007, Bonus: stats.Stats{stats.SpellPower: 1926}, Duration: time.Second * 20, @@ -805,7 +806,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Bell of Enraging Resonance (Heroic)", - ID: 65053, + ItemID: 65053, AuraID: 92318, Bonus: stats.Stats{stats.SpellPower: 2178}, Duration: time.Second * 20, @@ -818,7 +819,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Prestor's Talisman of Machination", - ID: 59441, + ItemID: 59441, AuraID: 92124, Bonus: stats.Stats{stats.HasteRating: 1926}, Duration: time.Second * 15, @@ -831,7 +832,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Prestor's Talisman of Machination (Heroic)", - ID: 65026, + ItemID: 65026, AuraID: 92349, Bonus: stats.Stats{stats.HasteRating: 2178}, Duration: time.Second * 15, @@ -844,7 +845,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Dominance - 365", - ID: 61045, + ItemID: 61045, AuraID: 85027, Bonus: stats.Stats{stats.SpellPower: 963}, Duration: time.Second * 20, @@ -857,7 +858,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Dominance - 371", - ID: 70578, + ItemID: 70578, AuraID: 99719, Bonus: stats.Stats{stats.SpellPower: 1077}, Duration: time.Second * 20, @@ -870,7 +871,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Dominance - 384", - ID: 70402, + ItemID: 70402, AuraID: 99742, Bonus: stats.Stats{stats.SpellPower: 1218}, Duration: time.Second * 20, @@ -883,7 +884,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Dominance - 390", - ID: 72449, + ItemID: 72449, AuraID: 102435, Bonus: stats.Stats{stats.SpellPower: 1287}, Duration: time.Second * 20, @@ -896,7 +897,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Cataclysmic Gladiator's Insignia of Dominance", - ID: 73497, + ItemID: 73497, AuraID: 105137, Bonus: stats.Stats{stats.SpellPower: 1452}, Duration: time.Second * 20, @@ -909,7 +910,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Victory - 365", - ID: 61046, + ItemID: 61046, AuraID: 85032, Bonus: stats.Stats{stats.Strength: 963}, Duration: time.Second * 20, @@ -922,7 +923,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Victory - 371", - ID: 70579, + ItemID: 70579, AuraID: 99721, Bonus: stats.Stats{stats.Strength: 1077}, Duration: time.Second * 20, @@ -935,7 +936,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Victory - 384", - ID: 70403, + ItemID: 70403, AuraID: 99746, Bonus: stats.Stats{stats.Strength: 1218}, Duration: time.Second * 20, @@ -948,7 +949,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Victory - 390", - ID: 72455, + ItemID: 72455, AuraID: 102432, Bonus: stats.Stats{stats.Strength: 1287}, Duration: time.Second * 20, @@ -961,7 +962,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Cataclysmic Gladiator's Insignia of Victory", - ID: 73491, + ItemID: 73491, AuraID: 105139, Bonus: stats.Stats{stats.Strength: 1452}, Duration: time.Second * 20, @@ -974,7 +975,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Conquest - 365", - ID: 61047, + ItemID: 61047, AuraID: 85022, Bonus: stats.Stats{stats.Agility: 963}, Duration: time.Second * 20, @@ -987,7 +988,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Vicious Gladiator's Insignia of Conquest - 371", - ID: 70577, + ItemID: 70577, AuraID: 99717, Bonus: stats.Stats{stats.Agility: 1077}, Duration: time.Second * 20, @@ -1000,7 +1001,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Conquest - 384", - ID: 70404, + ItemID: 70404, AuraID: 99748, Bonus: stats.Stats{stats.Agility: 1218}, Duration: time.Second * 20, @@ -1013,7 +1014,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ruthless Gladiator's Insignia of Conquest - 390", - ID: 72309, + ItemID: 72309, AuraID: 102439, Bonus: stats.Stats{stats.Agility: 1287}, Duration: time.Second * 20, @@ -1026,7 +1027,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Cataclysmic Gladiator's Insignia of Conquest", - ID: 73643, + ItemID: 73643, AuraID: 105135, Bonus: stats.Stats{stats.Agility: 1452}, Duration: time.Second * 20, @@ -1039,7 +1040,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Dwyer's Caber", - ID: 70141, + ItemID: 70141, AuraID: 100322, Bonus: stats.Stats{stats.CritRating: 1020}, Duration: time.Second * 20, @@ -1052,7 +1053,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Coren's Chilled Chromium Coaster", - ID: 232012, + ItemID: 232012, AuraID: 469349, Bonus: stats.Stats{stats.AttackPower: 3576, stats.RangedAttackPower: 3576}, Duration: time.Second * 10, @@ -1065,7 +1066,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Petrified Pickled Egg", - ID: 232014, + ItemID: 232014, AuraID: 469355, Bonus: stats.Stats{stats.HasteRating: 1824}, Duration: time.Second * 10, @@ -1078,7 +1079,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Mithril Stopwatch", - ID: 232013, + ItemID: 232013, AuraID: 469352, Bonus: stats.Stats{stats.SpellPower: 1824}, Duration: time.Second * 10, @@ -1091,7 +1092,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "The Hungerer", - ID: 68927, + ItemID: 68927, AuraID: 96911, Bonus: stats.Stats{stats.HasteRating: 1532}, Duration: time.Second * 15, @@ -1104,7 +1105,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "The Hungerer Heroic", - ID: 69112, + ItemID: 69112, AuraID: 97125, Bonus: stats.Stats{stats.HasteRating: 1730}, Duration: time.Second * 15, @@ -1120,7 +1121,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Creche of the Final Dragon" + labelSuffix, - ID: []int32{77972, 77205, 77992}[version], + ItemID: []int32{77972, 77205, 77992}[version], AuraID: []int32{109742, 107988, 109744}[version], Bonus: stats.Stats{stats.CritRating: []float64{2573, 2904, 3278}[version]}, Duration: time.Second * 20, @@ -1133,7 +1134,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Insignia of the Corrupted Mind" + labelSuffix, - ID: []int32{77971, 77203, 77991}[version], + ItemID: []int32{77971, 77203, 77991}[version], AuraID: []int32{109787, 107982, 109789}[version], Bonus: stats.Stats{stats.HasteRating: []float64{2573, 2904, 3278}[version]}, Duration: time.Second * 20, @@ -1146,7 +1147,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Soulshifter Vortex" + labelSuffix, - ID: []int32{77970, 77206, 77990}[version], + ItemID: []int32{77970, 77206, 77990}[version], AuraID: []int32{109774, 107986, 109776}[version], Bonus: stats.Stats{stats.MasteryRating: []float64{2573, 2904, 3278}[version]}, Duration: time.Second * 20, @@ -1159,7 +1160,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Starcatcher Compass" + labelSuffix, - ID: []int32{77973, 77202, 77993}[version], + ItemID: []int32{77973, 77202, 77993}[version], AuraID: []int32{109709, 107982, 109711}[version], Bonus: stats.Stats{stats.HasteRating: []float64{2573, 2904, 3278}[version]}, Duration: time.Second * 20, @@ -1181,7 +1182,7 @@ func init() { // Could be annoying with 3 different versions, uptime etc. shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Ti'tahk, the Steps of Time" + labelSuffix, - ID: []int32{78486, 77190, 78477}[version], + ItemID: []int32{78486, 77190, 78477}[version], AuraID: []int32{109842, 107804, 109844}[version], Bonus: stats.Stats{stats.HasteRating: []float64{1366 + 342, 1542 + 386, 1741 + 435}[version]}, Duration: time.Second * 10, @@ -1195,7 +1196,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Veil of Lies", - ID: 72900, + ItemID: 72900, AuraID: 102667, Bonus: stats.Stats{stats.DodgeRating: 1149}, Duration: time.Second * 20, @@ -1208,7 +1209,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Foul Gift of the Demon Lord", - ID: 72898, + ItemID: 72898, AuraID: 102662, Bonus: stats.Stats{stats.MasteryRating: 1149}, Duration: time.Second * 20, @@ -1221,7 +1222,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Arrow of Time", - ID: 72897, + ItemID: 72897, AuraID: 102659, Bonus: stats.Stats{stats.HasteRating: 1149}, Duration: time.Second * 20, @@ -1234,7 +1235,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Rosary of Light", - ID: 72901, + ItemID: 72901, AuraID: 102660, Bonus: stats.Stats{stats.CritRating: 1149}, Duration: time.Second * 20, @@ -1247,7 +1248,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Varo'then's Brooch", - ID: 72899, + ItemID: 72899, AuraID: 102664, Bonus: stats.Stats{stats.MasteryRating: 1149}, Duration: time.Second * 20, diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index f37699e051..eb93b87171 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -11,7 +11,8 @@ import ( type ProcStatBonusEffect struct { Name string - ID int32 + ItemID int32 + EnchantID int32 AuraID int32 Bonus stats.Stats Duration time.Duration @@ -28,6 +29,10 @@ type ProcStatBonusEffect struct { // Any other custom proc conditions not covered by the above fields. CustomProcCondition core.CustomStatBuffProcCondition + + // Used to register for Item Swapping when the effect is not an equippable Item by itself. + // For example a Weapon or Back enchant. + Slots []proto.ItemSlot } type DamageEffect struct { @@ -56,18 +61,20 @@ func NewProcStatBonusEffectWithDamageProc(config ProcStatBonusEffect, damage Dam factory_StatBonusEffect(config, func(agent core.Agent) ExtraSpellInfo { character := agent.GetCharacter() + critMultiplier := core.TernaryFloat64(damage.IsMelee, character.DefaultMeleeCritMultiplier(), character.DefaultSpellCritMultiplier()) + procSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: damage.SpellID}, SpellSchool: damage.School, ProcMask: procMask, Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagPassiveSpell, DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), + CritMultiplier: critMultiplier, DamageMultiplierAdditive: 1, ThreatMultiplier: 1, BonusCoefficient: damage.BonusCoefficient, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, sim.Roll(damage.MinDmg, damage.MaxDmg), spell.OutcomeMagicCrit) + spell.CalcAndDealDamage(sim, target, sim.Roll(damage.MinDmg, damage.MaxDmg), GetOutcome(spell, damage.Outcome)) }, }) @@ -81,19 +88,38 @@ func NewProcStatBonusEffectWithDamageProc(config ProcStatBonusEffect, damage Dam } func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent core.Agent) ExtraSpellInfo) { - core.NewItemEffect(config.ID, func(agent core.Agent) { + isEnchant := config.EnchantID != 0 + var effectFn func(id int32, effect core.ApplyEffect) + var effectID int32 + var triggerActionID core.ActionID + + if isEnchant { + effectID = config.EnchantID + effectFn = core.NewEnchantEffect + triggerActionID = core.ActionID{SpellID: effectID} + } else { + effectID = config.ItemID + effectFn = core.NewItemEffect + triggerActionID = core.ActionID{ItemID: effectID} + } + + effectFn(effectID, func(agent core.Agent) { character := agent.GetCharacter() procID := core.ActionID{SpellID: config.AuraID} if procID.IsEmptyAction() { - procID = core.ActionID{ItemID: config.ID} + procID = core.ActionID{ItemID: config.ItemID} } procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) + if isEnchant && config.PPM != 0 && config.ProcMask == core.ProcMaskUnknown { + config.ProcMask = character.GetDefaultProcMaskForWeaponEnchant(config.EnchantID) + } + var itemSwapProcCondition core.CustomStatBuffProcCondition - if character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(config.ID) { + if isEnchant && character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(effectID) { itemSwapProcCondition = func(_ *core.Simulation, aura *core.Aura) bool { - return character.ItemSwap.HasItemEquipped(config.ID) + return character.ItemSwap.HasItemEquipped(effectID) } } @@ -157,7 +183,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - ActionID: core.ActionID{ItemID: config.ID}, + ActionID: triggerActionID, Name: config.Name, Callback: config.Callback, ProcMask: config.ProcMask, @@ -173,12 +199,19 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c procAura.Icd = triggerAura.Icd } - eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(config.ID), false) - if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { - character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + if isEnchant { + if config.PPM != 0 { + character.ItemSwap.RegisterPPMEffect(effectID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + } else { + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + } + } else { + eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(effectID), false) + if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { + character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + } + character.ItemSwap.RegisterProc(effectID, triggerAura, eligibleSlotsForItem) } - - character.ItemSwap.RegisterProc(config.ID, triggerAura, eligibleSlotsForItem) }) } @@ -413,112 +446,6 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { }) } -type EnchantProcStatBonusEffect struct { - EnchantID int32 - Slots []proto.ItemSlot - ProcStatBonusEffect -} - -func factory_EnchantStatBonusEffect(config EnchantProcStatBonusEffect, extraSpell func(agent core.Agent) ExtraSpellInfo) { - core.NewEnchantEffect(config.EnchantID, func(agent core.Agent) { - character := agent.GetCharacter() - - procID := core.ActionID{SpellID: config.AuraID} - if procID.IsEmptyAction() { - procID = core.ActionID{ItemID: config.ID} - } - procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) - - if config.PPM != 0 && config.ProcMask == core.ProcMaskUnknown { - config.ProcMask = character.GetDefaultProcMaskForWeaponEnchant(config.EnchantID) - } - - var procSpell ExtraSpellInfo - if extraSpell != nil { - procSpell = extraSpell(agent) - } - - handler := func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procAura.Activate(sim) - if procSpell.Spell != nil { - procSpell.Trigger(sim, spell, result) - } - } - - if len(config.IgnoreSpellIDs) > 0 { - ignoreSpellIDs := config.IgnoreSpellIDs - handler = func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - isAllowedSpell := !slices.ContainsFunc(ignoreSpellIDs, func(spellID int32) bool { - return spell.IsSpellAction(spellID) - }) - if isAllowedSpell { - handler(sim, spell, result) - } - } - } - - triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - ActionID: core.ActionID{SpellID: config.ID}, - Name: config.Name, - Callback: config.Callback, - ProcMask: config.ProcMask, - Outcome: config.Outcome, - Harmful: config.Harmful, - ProcChance: config.ProcChance, - PPM: config.PPM, - ICD: config.ICD, - Handler: handler, - }) - - if config.ICD != 0 { - procAura.Icd = triggerAura.Icd - } - - if config.PPM != 0 { - character.ItemSwap.RegisterPPMEffect(config.EnchantID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) - } else { - character.ItemSwap.RegisterEnchantProc(config.EnchantID, triggerAura, config.Slots) - } - }) -} - -func NewEnchantProcStatBonusEffect(config EnchantProcStatBonusEffect) { - factory_EnchantStatBonusEffect(config, nil) -} - -func NewEnchantProcStatBonusEffectWithDamageProc(config EnchantProcStatBonusEffect, damage DamageEffect) { - procMask := core.ProcMaskEmpty - if damage.ProcMask != core.ProcMaskUnknown { - procMask = damage.ProcMask - } - - factory_EnchantStatBonusEffect(config, func(agent core.Agent) ExtraSpellInfo { - character := agent.GetCharacter() - critMultiplier := core.TernaryFloat64(damage.IsMelee, character.DefaultMeleeCritMultiplier(), character.DefaultSpellCritMultiplier()) - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: damage.SpellID}, - SpellSchool: damage.School, - ProcMask: procMask, - DamageMultiplier: 1, - CritMultiplier: critMultiplier, - DamageMultiplierAdditive: 1, - ThreatMultiplier: 1, - BonusCoefficient: damage.BonusCoefficient, - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, sim.Roll(damage.MinDmg, damage.MaxDmg), GetOutcome(spell, damage.Outcome)) - }, - }) - - return ExtraSpellInfo{ - Spell: procSpell, - Trigger: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - procSpell.Cast(sim, result.Target) - }, - } - }) -} - type OutcomeType uint64 const ( diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 4538ca3b2c..72df0d62cb 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -217,22 +217,20 @@ func init() { }) // Enchant: 3790, Spell: 59630 - Black Magic - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 3790, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Black Magic", - ID: 59630, - AuraID: 59626, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, - ProcMask: core.ProcMaskSpellOrSpellProc, - Outcome: core.OutcomeLanded, - ICD: time.Second * 35, - ProcChance: 0.35, - Bonus: stats.Stats{stats.HasteRating: 250}, - Duration: time.Second * 10, - IgnoreSpellIDs: []int32{47465, 12867}, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Black Magic", + EnchantID: 3790, + ItemID: 59630, + AuraID: 59626, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, + ProcMask: core.ProcMaskSpellOrSpellProc, + Outcome: core.OutcomeLanded, + ICD: time.Second * 35, + ProcChance: 0.35, + Bonus: stats.Stats{stats.HasteRating: 250}, + Duration: time.Second * 10, + IgnoreSpellIDs: []int32{47465, 12867}, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, }) // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope @@ -318,21 +316,19 @@ func init() { //}) // Enchant: 3722, Spell: 55642 - Lightweave Embroidery - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 3722, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Lightweave Embroidery", - ID: 55642, - AuraID: 55637, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, - ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, - Outcome: core.OutcomeLanded, - ICD: time.Second * 60, - ProcChance: 0.35, - Bonus: stats.Stats{stats.SpellPower: 295}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Lightweave Embroidery", + EnchantID: 3722, + ItemID: 55642, + AuraID: 55637, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, + Outcome: core.OutcomeLanded, + ICD: time.Second * 60, + ProcChance: 0.35, + Bonus: stats.Stats{stats.SpellPower: 295}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 3728, Spell: 55769 - Darkglow Embroidery @@ -368,21 +364,19 @@ func init() { }) // Enchant: 3730, Spell: 55777 - Swordguard Embroidery - shared.NewEnchantProcStatBonusEffect(shared.EnchantProcStatBonusEffect{ - EnchantID: 3730, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, - ProcStatBonusEffect: shared.ProcStatBonusEffect{ - Name: "Swordguard Embroidery", - ID: 55777, - AuraID: 55775, - Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, - ProcMask: core.ProcMaskMeleeOrRanged, - Outcome: core.OutcomeLanded, - ICD: time.Second * 55, - ProcChance: 0.2, - Bonus: stats.Stats{stats.AttackPower: 400, stats.RangedAttackPower: 400}, - Duration: time.Second * 15, - }, + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Swordguard Embroidery", + EnchantID: 3730, + ItemID: 55777, + AuraID: 55775, + Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, + ProcMask: core.ProcMaskMeleeOrRanged, + Outcome: core.OutcomeLanded, + ICD: time.Second * 55, + ProcChance: 0.2, + Bonus: stats.Stats{stats.AttackPower: 400, stats.RangedAttackPower: 400}, + Duration: time.Second * 15, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 3870, Spell: 64568 - Blood Draining diff --git a/sim/common/wotlk/stat_bonus_procs.go b/sim/common/wotlk/stat_bonus_procs.go index 7576550699..0cfb860f81 100644 --- a/sim/common/wotlk/stat_bonus_procs.go +++ b/sim/common/wotlk/stat_bonus_procs.go @@ -496,7 +496,7 @@ func init() { // }) shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Phylactery of the Nameless Lich H", - ID: 50365, + ItemID: 50365, AuraID: 71636, Bonus: stats.Stats{stats.SpellPower: 1207}, Duration: time.Second * 20, @@ -524,7 +524,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ // Ashen Band of Endless Destruction Name: "Frostforged Sage", - ID: 50398, + ItemID: 50398, AuraID: 72416, Bonus: stats.Stats{stats.SpellPower: 285}, Duration: time.Second * 10, @@ -550,7 +550,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ // Ashen Band of Endless Vengeance Name: "Frostforged Champion", - ID: 50402, + ItemID: 50402, AuraID: 72412, Bonus: stats.Stats{stats.AttackPower: 480, stats.RangedAttackPower: 480}, Duration: time.Second * 10, @@ -576,7 +576,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ // Ashen Band of Endless Courage Name: "Frostforged Defender", - ID: 50404, + ItemID: 50404, AuraID: 72414, Bonus: stats.Stats{stats.Armor: 2400}, Duration: time.Second * 10, @@ -602,7 +602,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ // Ashen Band of Endless Might Name: "Frostforged Champion", - ID: 52572, + ItemID: 52572, AuraID: 72412, Bonus: stats.Stats{stats.AttackPower: 480, stats.RangedAttackPower: 480}, Duration: time.Second * 10, @@ -626,7 +626,7 @@ func init() { // }) shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Sharpened Twilight Scale H", - ID: 54590, + ItemID: 54590, AuraID: 75456, Bonus: stats.Stats{stats.AttackPower: 1472, stats.RangedAttackPower: 1472}, Duration: time.Second * 15, @@ -649,7 +649,7 @@ func init() { // }) shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Charred Twilight Scale H", - ID: 54588, + ItemID: 54588, AuraID: 75473, Bonus: stats.Stats{stats.SpellPower: 861}, Duration: time.Second * 15, diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index d911015c43..75254fcfb0 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -95,9 +95,9 @@ func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMMa swap.registerPPMInternal(ItemSwapPPMConfig{ EnchantId: effectID, PPM: ppm, - ppmm: ppmm, - aura: aura, - slots: slots, + Ppmm: ppmm, + Aura: aura, + Slots: slots, }) } @@ -106,9 +106,9 @@ func (swap *ItemSwap) RegisterPPMWeaponEffect(itemID int32, ppm float64, ppmm *P swap.registerPPMInternal(ItemSwapPPMConfig{ EffectID: itemID, PPM: ppm, - ppmm: ppmm, - aura: aura, - slots: slots, + Ppmm: ppmm, + Aura: aura, + Slots: slots, }) } @@ -117,8 +117,8 @@ func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm swap.registerPPMInternal(ItemSwapPPMConfig{ CustomProcMask: procMask, PPM: ppm, - ppmm: ppmm, - slots: slots, + Ppmm: ppmm, + Slots: slots, }) } @@ -127,24 +127,28 @@ type ItemSwapPPMConfig struct { EnchantId int32 PPM float64 CustomProcMask ProcMask - ppmm *PPMManager - aura *Aura - slots []proto.ItemSlot + Ppmm *PPMManager + Aura *Aura + Slots []proto.ItemSlot } func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { + character := swap.character + if character == nil || !character.ItemSwap.IsEnabled() { + return + } + itemID := config.EffectID enchantEffectID := config.EnchantId ppm := config.PPM - ppmm := config.ppmm - aura := config.aura - slots := config.slots + ppmm := config.Ppmm + aura := config.Aura + slots := config.Slots customProcMask := config.CustomProcMask - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } + isItemPPM := itemID != 0 + isEnchantEffectPPM := enchantEffectID != 0 + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { item := swap.GetEquippedItemBySlot(slot) @@ -157,9 +161,6 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { var procMask ProcMask var isItemSlotMatch = false - isItemPPM := itemID != 0 - isEnchantEffectPPM := enchantEffectID != 0 - if isItemPPM { hasItemEquipped = item.ID == itemID isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, slots) == slot @@ -184,41 +185,65 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) }) - } // Helper for handling Item Effects that use the itemID to toggle the aura on and off func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemSlot) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - hasItemEquipped := swap.HasItemEquipped(itemID) - if hasItemEquipped { - if !aura.IsActive() { - aura.Activate(sim) - if aura.Icd != nil { - aura.Icd.Use(sim) - } - } - } else { - aura.Deactivate(sim) - } + swap.registerProcInternal(ItemSwapProcConfig{ + ItemID: itemID, + Aura: aura, + Slots: slots, }) } // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []proto.ItemSlot) { + swap.registerProcInternal(ItemSwapProcConfig{ + EnchantId: effectID, + Aura: aura, + Slots: slots, + }) +} + +type ItemSwapProcConfig struct { + ItemID int32 + EnchantId int32 + Aura *Aura + Slots []proto.ItemSlot +} + +func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } + + itemID := config.ItemID + enchantEffectID := config.EnchantId + aura := config.Aura + slots := config.Slots + + isItemProc := itemID != 0 + isEnchantEffectProc := enchantEffectID != 0 + character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { item := swap.GetEquippedItemBySlot(slot) - hasEffectID := item.Enchant.EffectID == effectID - if hasEffectID { - aura.Activate(sim) + var hasItemEquipped bool + + if isItemProc { + hasItemEquipped = swap.HasItemEquipped(itemID) + } else if isEnchantEffectProc { + hasItemEquipped = item.Enchant.EffectID == enchantEffectID + } + + if hasItemEquipped { + if !aura.IsActive() { + aura.Activate(sim) + // Enchant effects such as Weapon/Back do not trigger an ICD + if isItemProc && aura.Icd != nil { + aura.Icd.Use(sim) + } + } } else { aura.Deactivate(sim) } From 5df4292590d220fad31ba6efb8704184c9ca1396 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 08:57:51 +0100 Subject: [PATCH 057/127] PR Feedback --- sim/common/cata/damage_procs.go | 9 +- sim/common/cata/enchant_effects.go | 85 ++- sim/common/cata/gurthalak.go | 4 +- sim/common/cata/stat_bonus_procs.go | 24 +- sim/common/shared/shared_utils.go | 85 ++- sim/common/tbc/enchant_effects.go | 9 +- sim/common/wotlk/enchant_effects.go | 43 +- sim/common/wotlk/other_effects.go | 3 +- sim/core/item_sets.go | 19 +- sim/death_knight/runeforging.go | 8 +- sim/hunter/beast_mastery/TestBM.results | 4 +- sim/hunter/cata_items.go | 1 - sim/hunter/marksmanship/TestMM.results | 4 +- sim/hunter/survival/TestSV.results | 4 +- sim/paladin/items.go | 1 - sim/rogue/combat/TestCombat.results | 4 +- sim/rogue/rogue.go | 3 +- sim/shaman/_items_wotlk.go | 512 +++++++++--------- .../enhancement/TestEnhancement.results | 4 +- sim/shaman/enhancement/enhancement.go | 3 +- sim/shaman/weapon_imbues.go | 5 +- sim/warrior/fury/TestFury.results | 4 +- .../protection/TestProtectionWarrior.results | 4 +- 23 files changed, 398 insertions(+), 444 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index b442ef924e..0751551c02 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -5,7 +5,6 @@ import ( "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" ) func init() { @@ -17,7 +16,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}, + Slots: shared.TrinketSlots, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -35,7 +34,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}, + Slots: shared.TrinketSlots, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -96,7 +95,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(68925, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}) + character.ItemSwap.RegisterProc(68925, aura, shared.TrinketSlots) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -148,7 +147,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(69110, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2}) + character.ItemSwap.RegisterProc(69110, aura, shared.TrinketSlots) }) } diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 9a2dcf07a8..19d38e5132 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -45,7 +45,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4066, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + character.ItemSwap.RegisterEnchantProc(4066, aura, shared.WeaponSlots) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -116,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -153,7 +153,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura, shared.WeaponSlots) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -238,14 +238,13 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Heartsong", EnchantID: 4084, - ItemID: 74224, AuraID: 74224, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, @@ -254,14 +253,13 @@ func init() { ProcChance: 0.25, Bonus: stats.Stats{stats.Spirit: 200}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + Slots: shared.WeaponSlots, }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Power Torrent", EnchantID: 4097, - ItemID: 74241, AuraID: 74241, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, @@ -270,21 +268,20 @@ func init() { ProcChance: 1.0 / 3.0, Bonus: stats.Stats{stats.Intellect: 500}, Duration: time.Second * 12, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + Slots: shared.WeaponSlots, }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Windwalk", EnchantID: 4098, - ItemID: 74243, AuraID: 74243, Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, PPM: 1, // based on old Wowhead comments, TODO: measure in Classic Bonus: stats.Stats{stats.DodgeRating: 600}, Duration: time.Second * 10, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}, + Slots: shared.WeaponSlots, }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -322,14 +319,13 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura, shared.WeaponSlots) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Lightweave Embroidery Cata", EnchantID: 4115, - ItemID: 75171, AuraID: 75170, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, @@ -345,7 +341,6 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Darkglow Embroidery Cata", EnchantID: 4116, - ItemID: 75174, AuraID: 75173, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskSpellDamage | core.ProcMaskSpellHealing, @@ -361,7 +356,6 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Swordguard Embroidery Cata", EnchantID: 4118, - ItemID: 75176, AuraID: 75178, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt | core.CallbackOnHealDealt, ProcMask: core.ProcMaskMeleeOrRanged, @@ -377,7 +371,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Gnomish X-Ray Scope", EnchantID: 4175, - ItemID: 95712, + ItemID: 59594, AuraID: 95712, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskRanged, @@ -404,49 +398,46 @@ func init() { }) // Enchant: 4215, Spell: 92433, Item: 55055 - Elementium Shield Spike - shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + shared.NewProcDamageEffect(shared.ProcDamageEffect{ EnchantID: 4215, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, - ProcDamageEffect: shared.ProcDamageEffect{ - SpellID: 92432, - Trigger: core.ProcTrigger{ - Name: "Elementium Shield Spike", - Callback: core.CallbackOnSpellHitTaken, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeBlock, - }, - School: core.SpellSchoolPhysical, - MinDmg: 90, - MaxDmg: 133, - Outcome: shared.OutcomeMeleeCanCrit, - IsMelee: true, - }}) + SpellID: 92432, + Trigger: core.ProcTrigger{ + Name: "Elementium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, + }, + School: core.SpellSchoolPhysical, + MinDmg: 90, + MaxDmg: 133, + Outcome: shared.OutcomeMeleeCanCrit, + IsMelee: true, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, + }) // Enchant: 4216, Spell: 92437, Item: 55056 - Pyrium Shield Spike - shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + shared.NewProcDamageEffect(shared.ProcDamageEffect{ EnchantID: 4216, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, - ProcDamageEffect: shared.ProcDamageEffect{ - SpellID: 92436, - Trigger: core.ProcTrigger{ - Name: "Pyrium Shield Spike", - Callback: core.CallbackOnSpellHitTaken, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeBlock, - }, - School: core.SpellSchoolPhysical, - Outcome: shared.OutcomeMeleeCanCrit, - MinDmg: 210, - MaxDmg: 350, - IsMelee: true, + SpellID: 92436, + Trigger: core.ProcTrigger{ + Name: "Pyrium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, }, + School: core.SpellSchoolPhysical, + Outcome: shared.OutcomeMeleeCanCrit, + MinDmg: 210, + MaxDmg: 350, + IsMelee: true, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, }) // Enchant: 4267, Spell: 99623, Item: 70139 - Flintlocke's Woodchucker shared.NewProcStatBonusEffectWithDamageProc(shared.ProcStatBonusEffect{ Name: "Flintlocke's Woodchucker", EnchantID: 4267, - ItemID: 99621, + ItemID: 70139, AuraID: 99621, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskRanged, diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 6a675bf479..6ea5d98e09 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -3,8 +3,8 @@ package cata import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -88,7 +88,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(gurthalakItemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterProc(gurthalakItemID, aura, shared.WeaponSlots) }) } } diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index b29165a78e..c05f2b1499 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -1273,23 +1273,15 @@ var ItemSetAgonyAndTorment = core.NewItemSet(core.ItemSet{ time.Second*10, ) - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 45, - } - procAura.Icd = &icd - - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Agony and Torment Trigger", - Callback: core.CallbackOnSpellHitDealt, - ProcMask: core.ProcMaskMeleeOrRanged, - ActionID: core.ActionID{SpellID: 95763}, + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Agony and Torment Trigger", + ActionID: core.ActionID{SpellID: 95763}, + ProcMask: core.ProcMaskMeleeOrRanged, + Callback: core.CallbackOnSpellHitDealt, + ICD: time.Second * 45, + ProcChance: 0.1, Handler: func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { - // This set uses raw chance, NOT PPM - if icd.IsReady(sim) && sim.Proc(.10, "Agony and Torment Proc") { - icd.Use(sim) - procAura.Activate(sim) - } + procAura.Activate(sim) }, }) }, diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index eb93b87171..25ad14126f 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -9,6 +9,9 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) +var WeaponSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand} +var TrinketSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2} + type ProcStatBonusEffect struct { Name string ItemID int32 @@ -117,7 +120,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } var itemSwapProcCondition core.CustomStatBuffProcCondition - if isEnchant && character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(effectID) { + if !isEnchant && character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(effectID) { itemSwapProcCondition = func(_ *core.Simulation, aura *core.Aura) bool { return character.ItemSwap.HasItemEquipped(effectID) } @@ -168,6 +171,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c if len(config.IgnoreSpellIDs) > 0 { ignoreSpellIDs := config.IgnoreSpellIDs + oldHandler := handler handler = func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { isAllowedSpell := !slices.ContainsFunc(ignoreSpellIDs, func(spellID int32) bool { return spell.IsSpellAction(spellID) @@ -176,7 +180,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c if customHandler != nil { customHandler(sim, procAura) } else { - handler(sim, spell, result) + oldHandler(sim, spell, result) } } } @@ -460,10 +464,11 @@ const ( ) type ProcDamageEffect struct { - ItemID int32 - SpellID int32 - Slots []proto.ItemSlot - Trigger core.ProcTrigger + ItemID int32 + SpellID int32 + EnchantID int32 + Slots []proto.ItemSlot + Trigger core.ProcTrigger School core.SpellSchool MinDmg float64 @@ -495,53 +500,23 @@ func GetOutcome(spell *core.Spell, outcome OutcomeType) core.OutcomeApplier { } func NewProcDamageEffect(config ProcDamageEffect) { - core.NewItemEffect(config.ItemID, func(agent core.Agent) { - character := agent.GetCharacter() - - minDmg := config.MinDmg - maxDmg := config.MaxDmg - - if core.ActionID.IsEmptyAction(config.Trigger.ActionID) { - config.Trigger.ActionID = core.ActionID{ItemID: config.ItemID} - } - - damageSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: config.SpellID}, - SpellSchool: config.School, - ProcMask: core.ProcMaskEmpty, - Flags: config.Flags, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, sim.Roll(minDmg, maxDmg), GetOutcome(spell, config.Outcome)) - }, - }) - - triggerConfig := config.Trigger - triggerConfig.Handler = func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { - damageSpell.Cast(sim, character.CurrentTarget) - } - triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) + isEnchant := config.EnchantID != 0 - if config.Trigger.PPM != 0 { - character.ItemSwap.RegisterPPMWeaponEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) - } else { - character.ItemSwap.RegisterEnchantProc(config.ItemID, triggerAura, config.Slots) - } - }) -} + var effectFn func(id int32, effect core.ApplyEffect) + var effectID int32 + var triggerActionID core.ActionID -type EnchantProcDamageEffect struct { - ProcDamageEffect - EnchantID int32 - Slots []proto.ItemSlot -} + if isEnchant { + effectID = config.EnchantID + effectFn = core.NewEnchantEffect + triggerActionID = core.ActionID{SpellID: config.SpellID} + } else { + effectID = config.ItemID + effectFn = core.NewItemEffect + triggerActionID = core.ActionID{ItemID: config.ItemID} + } -func NewEnchantProcDamageEffect(config EnchantProcDamageEffect) { - core.NewEnchantEffect(config.EnchantID, func(agent core.Agent) { + effectFn(effectID, func(agent core.Agent) { character := agent.GetCharacter() critMultiplier := core.TernaryFloat64(config.IsMelee, character.DefaultMeleeCritMultiplier(), character.DefaultSpellCritMultiplier()) @@ -550,7 +525,7 @@ func NewEnchantProcDamageEffect(config EnchantProcDamageEffect) { maxDmg := config.MaxDmg if core.ActionID.IsEmptyAction(config.Trigger.ActionID) { - config.Trigger.ActionID = core.ActionID{SpellID: config.SpellID} + config.Trigger.ActionID = triggerActionID } damageSpell := character.RegisterSpell(core.SpellConfig{ @@ -572,8 +547,12 @@ func NewEnchantProcDamageEffect(config EnchantProcDamageEffect) { triggerConfig.Handler = func(sim *core.Simulation, _ *core.Spell, _ *core.SpellResult) { damageSpell.Cast(sim, character.CurrentTarget) } - aura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) + triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) - character.ItemSwap.RegisterEnchantProc(config.EnchantID, aura, config.Slots) + if config.Trigger.PPM != 0 { + character.ItemSwap.RegisterPPMWeaponEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + } else { + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + } }) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index 37e1ff94d5..c09cffa9a7 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -3,6 +3,7 @@ package tbc import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -90,7 +91,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura, shared.WeaponSlots) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -130,7 +131,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura, shared.WeaponSlots) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -173,7 +174,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura, shared.WeaponSlots) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -216,7 +217,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura, shared.WeaponSlots) } core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 72df0d62cb..8f7eceef94 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -54,7 +54,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -95,7 +95,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -113,23 +113,22 @@ func init() { }) // Enchant: 3748, Spell: 56353, Item: 42500 - Titanium Shield Spike - shared.NewEnchantProcDamageEffect(shared.EnchantProcDamageEffect{ + shared.NewProcDamageEffect(shared.ProcDamageEffect{ EnchantID: 3748, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, - ProcDamageEffect: shared.ProcDamageEffect{ - SpellID: 56353, - Trigger: core.ProcTrigger{ - Name: "Titanium Shield Spike", - Callback: core.CallbackOnSpellHitTaken, - ProcMask: core.ProcMaskMelee, - Outcome: core.OutcomeBlock, - }, - School: core.SpellSchoolPhysical, - MinDmg: 45, - MaxDmg: 67, - Outcome: shared.OutcomeMeleeCanCrit, - IsMelee: true, - }}) + SpellID: 56353, + Trigger: core.ProcTrigger{ + Name: "Titanium Shield Spike", + Callback: core.CallbackOnSpellHitTaken, + ProcMask: core.ProcMaskMelee, + Outcome: core.OutcomeBlock, + }, + School: core.SpellSchoolPhysical, + MinDmg: 45, + MaxDmg: 67, + Outcome: shared.OutcomeMeleeCanCrit, + IsMelee: true, + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, + }) // Enchant: 3247, Spell: 44595 - Scourgebane core.NewEnchantEffect(3247, func(agent core.Agent) { @@ -184,7 +183,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura, shared.WeaponSlots) }) // TODO: These are stand-in values without any real reference. @@ -213,7 +212,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3790, Spell: 59630 - Black Magic @@ -230,7 +229,7 @@ func init() { Bonus: stats.Stats{stats.HasteRating: 250}, Duration: time.Second * 10, IgnoreSpellIDs: []int32{47465, 12867}, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, + Slots: shared.WeaponSlots, }) // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope @@ -416,6 +415,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3870, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterEnchantProc(3870, aura, shared.WeaponSlots) }) } diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index b20a7b36e7..92a31173d6 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -4,6 +4,7 @@ import ( "math" "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -999,7 +1000,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(itemID, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) + character.ItemSwap.RegisterProc(itemID, aura, shared.WeaponSlots) }) }) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index bd1b554f8b..715210ebb9 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -195,7 +195,7 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { }) for _, unequippedSetBonus := range unequippedSetBonuses { - setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, true) + setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, false) unequippedSetBonus.BonusEffect(agent, setBonusAura) } } @@ -242,16 +242,13 @@ func (setBonusTracker *Aura) ExposeToAPL(spellID int32) { } // Creates a new ProcTriggerAura that is dependent on the set bonus being active +// This should only be used if the dependent Aura is: +// 1. On the a different Unit than the setBonus is registered to (usually the Character) +// 2. You need to register multiple dependent Aura's for the same Unit func (setBonusTracker *Aura) MakeDependentProcTriggerAura(unit *Unit, config ProcTrigger) *Aura { - customCastCondition := config.ExtraCondition - if customCastCondition != nil { - config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { - return setBonusTracker.IsActive() && customCastCondition(sim, spell, result) - } - } else { - config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { - return setBonusTracker.IsActive() - } + oldExtraCondition := config.ExtraCondition + config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { + return setBonusTracker.IsActive() && ((oldExtraCondition == nil) || oldExtraCondition(sim, spell, result)) } aura := MakeProcTriggerAura(unit, config) @@ -260,6 +257,8 @@ func (setBonusTracker *Aura) MakeDependentProcTriggerAura(unit *Unit, config Pro } // Attaches a ProcTrigger to the set bonus +// Preffered use-case. +// For non standard use-cases see: MakeDependentProcTriggerAura func (setBonusTracker *Aura) AttachProcTrigger(config ProcTrigger) { ApplyProcTriggerCallback(setBonusTracker.Unit, setBonusTracker, config) } diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 77be8a0d63..c97e4d274b 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -3,8 +3,8 @@ package death_knight import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -101,7 +101,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura, shared.WeaponSlots) }) // Rune of Cinderglacier @@ -164,7 +164,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura, shared.WeaponSlots) }) // Rune of Razorice @@ -258,6 +258,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3370, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + character.ItemSwap.RegisterEnchantProc(3370, aura, shared.WeaponSlots) }) } diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index 4b16c46d0b..84ede31642 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-AgonyandTorment" value: { - dps: 24729.17074 - tps: 15561.62994 + dps: 24774.58485 + tps: 15652.29344 } } dps_results: { diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 978018eb48..771875b30a 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -211,7 +211,6 @@ func (hunter *Hunter) addBloodthirstyGloves() { switch hunter.Hands().ID { case 64991, 64709, 60424, 65544, 70534, 70260, 70441, 72369, 73717, 73583: spellMod.Activate() - return default: spellMod.Deactivate() } diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index 976e9314b1..c37f614df4 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-AgonyandTorment" value: { - dps: 23626.3959 - tps: 21256.05288 + dps: 23590.04647 + tps: 21226.66864 } } dps_results: { diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 8f9a292768..8aa7204019 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestSV-AllItems-AgonyandTorment" value: { - dps: 29812.78554 - tps: 27030.37542 + dps: 29716.12085 + tps: 26966.36301 } } dps_results: { diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 2cdfcf6766..194127d2aa 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -203,7 +203,6 @@ func (paladin *Paladin) addBloodthirstyGloves() { switch paladin.Hands().ID { case 64844, 70649, 60414, 65591, 72379, 70250, 70488, 73707, 73570: spellMod.Activate() - return default: spellMod.Deactivate() } diff --git a/sim/rogue/combat/TestCombat.results b/sim/rogue/combat/TestCombat.results index c08dba76b7..4e21dea032 100644 --- a/sim/rogue/combat/TestCombat.results +++ b/sim/rogue/combat/TestCombat.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestCombat-AllItems-AgonyandTorment" value: { - dps: 25786.14755 - tps: 18308.16476 + dps: 25949.79241 + tps: 18424.35261 } } dps_results: { diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 80d7023fe9..a6df59daaf 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -3,6 +3,7 @@ package rogue import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -207,7 +208,7 @@ func (rogue *Rogue) Initialize() { rogue.T12ToTLastBuff = 3 // re-configure poisons when performing an item swap - rogue.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { + rogue.RegisterItemSwapCallback(shared.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { if !rogue.Options.ApplyPoisonsManually { if rogue.MainHand() == nil || rogue.OffHand() == nil { return diff --git a/sim/shaman/_items_wotlk.go b/sim/shaman/_items_wotlk.go index 30f6e98665..a5e578de62 100644 --- a/sim/shaman/_items_wotlk.go +++ b/sim/shaman/_items_wotlk.go @@ -1,278 +1,270 @@ package shaman -import ( - "math" - "time" +// var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ +// Name: "Thrall's Regalia", +// AlternativeName: "Nobundo's Regalia", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // shocks.go +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // lavaburst.go +// }, +// }, +// }) - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) +// var ItemSetEarthShatterGarb = core.NewItemSet(core.ItemSet{ +// Name: "Earthshatter Garb", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // Reduces LB cost by 5% +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // lavaburst crit strike dmg +10% +// }, +// }, +// }) +// var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ +// Name: "Worldbreaker Garb", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // shocks.go +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // lightning_bolt.go +// }, +// }, +// }) -var ItemSetThrallsRegalia = core.NewItemSet(core.ItemSet{ - Name: "Thrall's Regalia", - AlternativeName: "Nobundo's Regalia", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // shocks.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // lavaburst.go - }, - }, -}) +// var ItemSetFrostWitchRegalia = core.NewItemSet(core.ItemSet{ +// Name: "Frost Witch's Regalia", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // This is implemented in talents.go so that the aura has easy access to the elemental mastery MCD. +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// shaman := agent.(ShamanAgent).GetShaman() +// shaman.RegisterAura(core.Aura{ +// Label: "Shaman T10 Elemental 4P Bonus", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { +// fsDot := shaman.FlameShock.Dot(shaman.CurrentTarget) +// if spell == shaman.LavaBurst && fsDot.IsActive() { // Doesn't have to hit from tooltip +// // 4p t10 immediately updates the tickPeriod based on current haste +// fsDot.RescheduleNextTick(sim) -var ItemSetEarthShatterGarb = core.NewItemSet(core.ItemSet{ - Name: "Earthshatter Garb", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Reduces LB cost by 5% - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // lavaburst crit strike dmg +10% - }, - }, -}) -var ItemSetWorldbreakerGarb = core.NewItemSet(core.ItemSet{ - Name: "Worldbreaker Garb", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // shocks.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // lightning_bolt.go - }, - }, -}) +// // Find the number of ticks whose duration is closest to 6s. +// // "our testing confirms that the 4pc t10 setbonus adds to FS the closest number of ticks to 6 seconds always" +// // https://web.archive.org/web/20100808192139/http://elitistjerks.com/f79/t76510-elemental_patch_3_3_now_more_fire_nova/p25/ +// tickPeriod := fsDot.TickPeriod() +// numTicks := int32(math.Round(float64(time.Second) * 6 / float64(tickPeriod))) +// fsDot.NumberOfTicks += numTicks -var ItemSetFrostWitchRegalia = core.NewItemSet(core.ItemSet{ - Name: "Frost Witch's Regalia", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // This is implemented in talents.go so that the aura has easy access to the elemental mastery MCD. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - shaman.RegisterAura(core.Aura{ - Label: "Shaman T10 Elemental 4P Bonus", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - fsDot := shaman.FlameShock.Dot(shaman.CurrentTarget) - if spell == shaman.LavaBurst && fsDot.IsActive() { // Doesn't have to hit from tooltip - // 4p t10 immediately updates the tickPeriod based on current haste - fsDot.RescheduleNextTick(sim) +// // Set duration to remaining ticks, minus the elapsed time since last tick +// fsDot.Aura.Duration = time.Duration(fsDot.MaxTicksRemaining())*tickPeriod - (tickPeriod - (fsDot.NextTickAt() - sim.CurrentTime)) +// fsDot.Aura.Refresh(sim) // update aura's duration +// } +// }, +// }) +// }, +// }, +// }) - // Find the number of ticks whose duration is closest to 6s. - // "our testing confirms that the 4pc t10 setbonus adds to FS the closest number of ticks to 6 seconds always" - // https://web.archive.org/web/20100808192139/http://elitistjerks.com/f79/t76510-elemental_patch_3_3_now_more_fire_nova/p25/ - tickPeriod := fsDot.TickPeriod() - numTicks := int32(math.Round(float64(time.Second) * 6 / float64(tickPeriod))) - fsDot.NumberOfTicks += numTicks +// func init() { +// core.NewItemEffect(40708, func(agent core.Agent) { +// shaman := agent.(ShamanAgent).GetShaman() +// procAura := shaman.NewTemporaryStatsAura("Totem of the Elemental Plane Proc", core.ActionID{SpellID: 60771}, stats.Stats{stats.SpellHaste: 196, stats.MeleeHaste: 196}, time.Second*10) - // Set duration to remaining ticks, minus the elapsed time since last tick - fsDot.Aura.Duration = time.Duration(fsDot.MaxTicksRemaining())*tickPeriod - (tickPeriod - (fsDot.NextTickAt() - sim.CurrentTime)) - fsDot.Aura.Refresh(sim) // update aura's duration - } - }, - }) - }, - }, -}) +// icd := core.Cooldown{ +// Timer: shaman.NewTimer(), +// Duration: time.Second * 30, +// } +// procAura.Icd = &icd +// shaman.RegisterAura(core.Aura{ +// Label: "Totem of the Elemental Plane", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { +// if !icd.IsReady(sim) { +// return +// } +// if spell.ActionID.SpellID == 49238 && sim.RandomFloat("totem of elemental plane") < 0.15 { +// procAura.Activate(sim) +// icd.Use(sim) +// } +// }, +// }) +// }) -func init() { - core.NewItemEffect(40708, func(agent core.Agent) { - shaman := agent.(ShamanAgent).GetShaman() - procAura := shaman.NewTemporaryStatsAura("Totem of the Elemental Plane Proc", core.ActionID{SpellID: 60771}, stats.Stats{stats.SpellHaste: 196, stats.MeleeHaste: 196}, time.Second*10) +// core.NewItemEffect(47666, func(agent core.Agent) { +// shaman := agent.(ShamanAgent).GetShaman() +// procAura := shaman.NewTemporaryStatsAura("ToEW - Energized", core.ActionID{SpellID: 67385}, stats.Stats{stats.SpellHaste: 200, stats.MeleeHaste: 200}, time.Second*12) - icd := core.Cooldown{ - Timer: shaman.NewTimer(), - Duration: time.Second * 30, - } - procAura.Icd = &icd - shaman.RegisterAura(core.Aura{ - Label: "Totem of the Elemental Plane", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if !icd.IsReady(sim) { - return - } - if spell.ActionID.SpellID == 49238 && sim.RandomFloat("totem of elemental plane") < 0.15 { - procAura.Activate(sim) - icd.Use(sim) - } - }, - }) - }) +// icd := core.Cooldown{ +// Timer: shaman.NewTimer(), +// Duration: time.Second * 6, +// } +// procAura.Icd = &icd +// shaman.RegisterAura(core.Aura{ +// Label: "Totem of Electrifying Wind", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { +// if !icd.IsReady(sim) { +// return +// } +// if spell.ActionID.SpellID == 49238 && sim.RandomFloat("totem of elemental plane") < 0.7 { +// procAura.Activate(sim) +// icd.Use(sim) // put on CD +// } +// }, +// }) +// }) - core.NewItemEffect(47666, func(agent core.Agent) { - shaman := agent.(ShamanAgent).GetShaman() - procAura := shaman.NewTemporaryStatsAura("ToEW - Energized", core.ActionID{SpellID: 67385}, stats.Stats{stats.SpellHaste: 200, stats.MeleeHaste: 200}, time.Second*12) +// core.NewItemEffect(50463, func(agent core.Agent) { +// shaman := agent.(ShamanAgent).GetShaman() +// procAura := shaman.RegisterAura(core.Aura{ +// Label: "Enraged", +// ActionID: core.ActionID{SpellID: 71216}, +// Duration: time.Second * 15, +// MaxStacks: 3, +// OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { +// shaman.AddStatDynamic(sim, stats.AttackPower, -146*float64(oldStacks)) +// shaman.AddStatDynamic(sim, stats.AttackPower, 146*float64(newStacks)) +// }, +// }) +// shaman.RegisterAura(core.Aura{ +// Label: "Totem of the Avalanche", +// 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() { //TODO: verify it needs to land +// return +// } +// if spell == shaman.Stormstrike { +// procAura.Activate(sim) +// procAura.AddStack(sim) +// } +// }, +// }) +// }) - icd := core.Cooldown{ - Timer: shaman.NewTimer(), - Duration: time.Second * 6, - } - procAura.Icd = &icd - shaman.RegisterAura(core.Aura{ - Label: "Totem of Electrifying Wind", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if !icd.IsReady(sim) { - return - } - if spell.ActionID.SpellID == 49238 && sim.RandomFloat("totem of elemental plane") < 0.7 { - procAura.Activate(sim) - icd.Use(sim) // put on CD - } - }, - }) - }) +// // Bizuri's Totem of Shattered Ice +// core.NewItemEffect(50458, func(agent core.Agent) { +// shaman := agent.(ShamanAgent).GetShaman() +// procAura := shaman.RegisterAura(core.Aura{ +// Label: "Furious", +// ActionID: core.ActionID{SpellID: 71199}, +// Duration: time.Second * 30, +// MaxStacks: 5, +// OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { +// shaman.AddStatsDynamic(sim, stats.Stats{ +// stats.SpellHaste: 44 * float64(newStacks-oldStacks), +// stats.MeleeHaste: 44 * float64(newStacks-oldStacks), +// }) +// }, +// }) +// shaman.RegisterAura(core.Aura{ +// Label: "Bizuri's Totem of Shattered Ice Aura", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if spell == shaman.FlameShock { +// procAura.Activate(sim) +// procAura.AddStack(sim) +// } +// }, +// }) +// }) +// } - core.NewItemEffect(50463, func(agent core.Agent) { - shaman := agent.(ShamanAgent).GetShaman() - procAura := shaman.RegisterAura(core.Aura{ - Label: "Enraged", - ActionID: core.ActionID{SpellID: 71216}, - Duration: time.Second * 15, - MaxStacks: 3, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { - shaman.AddStatDynamic(sim, stats.AttackPower, -146*float64(oldStacks)) - shaman.AddStatDynamic(sim, stats.AttackPower, 146*float64(newStacks)) - }, - }) - shaman.RegisterAura(core.Aura{ - Label: "Totem of the Avalanche", - 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() { //TODO: verify it needs to land - return - } - if spell == shaman.Stormstrike { - procAura.Activate(sim) - procAura.AddStack(sim) - } - }, - }) - }) +// var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ +// Name: "Earthshatter Battlegear", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // 10% damage to lightning shield. implemented in lightning_shield.go +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // +5% to flurry. implemented in talents.go +// }, +// }, +// }) - // Bizuri's Totem of Shattered Ice - core.NewItemEffect(50458, func(agent core.Agent) { - shaman := agent.(ShamanAgent).GetShaman() - procAura := shaman.RegisterAura(core.Aura{ - Label: "Furious", - ActionID: core.ActionID{SpellID: 71199}, - Duration: time.Second * 30, - MaxStacks: 5, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { - shaman.AddStatsDynamic(sim, stats.Stats{ - stats.SpellHaste: 44 * float64(newStacks-oldStacks), - stats.MeleeHaste: 44 * float64(newStacks-oldStacks), - }) - }, - }) - shaman.RegisterAura(core.Aura{ - Label: "Bizuri's Totem of Shattered Ice Aura", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell == shaman.FlameShock { - procAura.Activate(sim) - procAura.AddStack(sim) - } - }, - }) - }) -} +// var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ +// Name: "Worldbreaker Battlegear", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// //20% damage to stormstrike and lava lash +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// //20% increase to maelstrom proc rate +// }, +// }, +// }) -var ItemSetEarthshatterBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Earthshatter Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // 10% damage to lightning shield. implemented in lightning_shield.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // +5% to flurry. implemented in talents.go - }, - }, -}) +// var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ +// Name: "Thrall's Battlegear", +// AlternativeName: "Nobundo's Battlegear", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // +3% increase to static shock proc rate +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // +25% shock damage +// }, +// }, +// }) -var ItemSetWorldbreakerBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Worldbreaker Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - //20% damage to stormstrike and lava lash - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - //20% increase to maelstrom proc rate - }, - }, -}) +// var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ +// Name: "Frost Witch's Battlegear", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// // TODO: add 12% damage buff to shamanistic rage +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// // TODO: at 5 maelstrom stacks, 15% chance to gain +20% attack power for 10s +// }, +// }, +// }) -var ItemSetThrallsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Thrall's Battlegear", - AlternativeName: "Nobundo's Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // +3% increase to static shock proc rate - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // +25% shock damage - }, - }, -}) +// var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ +// Name: "Gladiator's Earthshaker", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// shaman := agent.(ShamanAgent).GetShaman() +// shaman.AddStat(stats.AttackPower, 50) +// shaman.AddStat(stats.Resilience, 100) +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// shaman := agent.(ShamanAgent).GetShaman() +// shaman.AddStat(stats.AttackPower, 150) +// // also -2s on stormstrike CD +// }, +// }, +// }) -var ItemSetFrostWitchBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Frost Witch's Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // TODO: add 12% damage buff to shamanistic rage - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // TODO: at 5 maelstrom stacks, 15% chance to gain +20% attack power for 10s - }, - }, -}) - -var ItemSetGladiatorsEarthshaker = core.NewItemSet(core.ItemSet{ - Name: "Gladiator's Earthshaker", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - shaman.AddStat(stats.AttackPower, 50) - shaman.AddStat(stats.Resilience, 100) - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - shaman.AddStat(stats.AttackPower, 150) - // also -2s on stormstrike CD - }, - }, -}) - -var ItemSetGladiatorsWartide = core.NewItemSet(core.ItemSet{ - Name: "Gladiator's Wartide", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - shaman.AddStat(stats.SpellPower, 29) - shaman.AddStat(stats.Resilience, 100) - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - shaman.AddStat(stats.SpellPower, 88) - }, - }, -}) +// var ItemSetGladiatorsWartide = core.NewItemSet(core.ItemSet{ +// Name: "Gladiator's Wartide", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// shaman := agent.(ShamanAgent).GetShaman() +// shaman.AddStat(stats.SpellPower, 29) +// shaman.AddStat(stats.Resilience, 100) +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// shaman := agent.(ShamanAgent).GetShaman() +// shaman.AddStat(stats.SpellPower, 88) +// }, +// }, +// }) diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 15cb46bfe9..80350b15a9 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestEnhancement-AllItems-AgonyandTorment" value: { - dps: 33538.77211 - tps: 20884.4791 + dps: 33472.42626 + tps: 20892.75414 } } dps_results: { diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index e1794ecedf..318359a4d8 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -3,6 +3,7 @@ package enhancement import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -103,7 +104,7 @@ func (enh *EnhancementShaman) Initialize() { if enh.ItemSwap.IsEnabled() { enh.ApplyFlametongueImbueSwap(enh.getImbueProcMask(proto.ShamanImbue_FlametongueWeapon)) - enh.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(_ *core.Simulation, slot proto.ItemSlot) { + enh.RegisterItemSwapCallback(shared.WeaponSlots, func(_ *core.Simulation, slot proto.ItemSlot) { enh.ApplySyncType(proto.ShamanSyncType_Auto) }) } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 8ce105e22a..0d05cc0fcf 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -3,13 +3,14 @@ package shaman import ( "time" + "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) func (shaman *Shaman) RegisterOnItemSwapWithImbue(effectID int32, procMask *core.ProcMask, aura *core.Aura) { - shaman.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, func(sim *core.Simulation, slot proto.ItemSlot) { + shaman.RegisterItemSwapCallback(shared.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { mask := core.ProcMaskUnknown if shaman.MainHand().TempEnchant == effectID { mask |= core.ProcMaskMeleeMH @@ -312,7 +313,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}) + shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura, shared.WeaponSlots) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 456748d0c0..0f82721d1b 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestFury-AllItems-AgonyandTorment" value: { - dps: 33191.88547 - tps: 27428.58305 + dps: 33374.04431 + tps: 27649.71729 } } dps_results: { diff --git a/sim/warrior/protection/TestProtectionWarrior.results b/sim/warrior/protection/TestProtectionWarrior.results index e159d05802..8281c4789c 100644 --- a/sim/warrior/protection/TestProtectionWarrior.results +++ b/sim/warrior/protection/TestProtectionWarrior.results @@ -45,8 +45,8 @@ dps_results: { dps_results: { key: "TestProtectionWarrior-AllItems-AgonyandTorment" value: { - dps: 3962.47949 - tps: 23461.20537 + dps: 3972.65632 + tps: 23497.12073 } } dps_results: { From 0b97123062b34bb77b7b3ff3530819c615d077c0 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 14:13:58 +0100 Subject: [PATCH 058/127] Change stat bonus helpers to aura helpers --- sim/core/aura_helpers.go | 53 +++++++++++++++++++++++++++++++++++++++ sim/core/item_sets.go | 54 ---------------------------------------- sim/core/item_swaps.go | 31 ++++++++++------------- 3 files changed, 66 insertions(+), 72 deletions(-) diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index 2622243af3..1129ac5701 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -329,6 +329,59 @@ func (character *Character) NewTemporaryStatsAuraWrapped(auraLabel string, actio } } +// Creates a new ProcTriggerAura that is dependent on a parent Aura being active +// This should only be used if the dependent Aura is: +// 1. On the a different Unit than parent Aura is registered to (usually the Character) +// 2. You need to register multiple dependent Aura's for the same Unit +func (parentAura *Aura) MakeDependentProcTriggerAura(unit *Unit, config ProcTrigger) *Aura { + oldExtraCondition := config.ExtraCondition + config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { + return parentAura.IsActive() && ((oldExtraCondition == nil) || oldExtraCondition(sim, spell, result)) + } + + aura := MakeProcTriggerAura(unit, config) + + return aura +} + +// Attaches a ProcTrigger to a parent Aura +// Preffered use-case. +// For non standard use-cases see: MakeDependentProcTriggerAura +func (parentAura *Aura) AttachProcTrigger(config ProcTrigger) { + ApplyProcTriggerCallback(parentAura.Unit, parentAura, config) +} + +// Attaches a SpellMod to a parent Aura +func (parentAura *Aura) AttachSpellMod(spellModConfig SpellModConfig) { + parentAuraDep := parentAura.Unit.AddDynamicMod(spellModConfig) + + parentAura.ApplyOnGain(func(_ *Aura, _ *Simulation) { + parentAuraDep.Activate() + }) + + parentAura.ApplyOnExpire(func(_ *Aura, _ *Simulation) { + parentAuraDep.Deactivate() + }) +} + +// Adds Stats to a parent Aura +func (parentAura *Aura) AttachStatsBuff(stats stats.Stats) { + parentAura.ApplyOnGain(func(aura *Aura, sim *Simulation) { + aura.Unit.AddStatsDynamic(sim, stats) + }) + + parentAura.ApplyOnExpire(func(aura *Aura, sim *Simulation) { + aura.Unit.AddStatsDynamic(sim, stats.Invert()) + }) +} + +// Adds a Stat to a parent Aura +func (parentAura *Aura) AttachStatBuff(stat stats.Stat, value float64) { + statsToAdd := stats.Stats{} + statsToAdd[stat] = value + parentAura.AttachStatsBuff(statsToAdd) +} + type ShieldStrengthCalculator func(unit *Unit) float64 type DamageAbsorptionAura struct { diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 715210ebb9..5047045bff 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -5,7 +5,6 @@ import ( "slices" "github.com/wowsims/cata/sim/core/proto" - "github.com/wowsims/cata/sim/core/stats" ) type ApplySetBonus func(agent Agent, setBonusAura *Aura) @@ -240,56 +239,3 @@ func (character *Character) GetActiveSetBonusNames() []string { func (setBonusTracker *Aura) ExposeToAPL(spellID int32) { setBonusTracker.ActionID = ActionID{SpellID: spellID} } - -// Creates a new ProcTriggerAura that is dependent on the set bonus being active -// This should only be used if the dependent Aura is: -// 1. On the a different Unit than the setBonus is registered to (usually the Character) -// 2. You need to register multiple dependent Aura's for the same Unit -func (setBonusTracker *Aura) MakeDependentProcTriggerAura(unit *Unit, config ProcTrigger) *Aura { - oldExtraCondition := config.ExtraCondition - config.ExtraCondition = func(sim *Simulation, spell *Spell, result *SpellResult) bool { - return setBonusTracker.IsActive() && ((oldExtraCondition == nil) || oldExtraCondition(sim, spell, result)) - } - - aura := MakeProcTriggerAura(unit, config) - - return aura -} - -// Attaches a ProcTrigger to the set bonus -// Preffered use-case. -// For non standard use-cases see: MakeDependentProcTriggerAura -func (setBonusTracker *Aura) AttachProcTrigger(config ProcTrigger) { - ApplyProcTriggerCallback(setBonusTracker.Unit, setBonusTracker, config) -} - -// Attaches a SpellMod to the set bonus -func (setBonusTracker *Aura) AttachSpellMod(spellModConfig SpellModConfig) { - setBonusDep := setBonusTracker.Unit.AddDynamicMod(spellModConfig) - - setBonusTracker.ApplyOnGain(func(_ *Aura, _ *Simulation) { - setBonusDep.Activate() - }) - - setBonusTracker.ApplyOnExpire(func(_ *Aura, _ *Simulation) { - setBonusDep.Deactivate() - }) -} - -// Adds Stats to the set bonus -func (setBonusTracker *Aura) AttachStatsBuff(stats stats.Stats) { - setBonusTracker.ApplyOnGain(func(aura *Aura, sim *Simulation) { - aura.Unit.AddStatsDynamic(sim, stats) - }) - - setBonusTracker.ApplyOnExpire(func(aura *Aura, sim *Simulation) { - aura.Unit.AddStatsDynamic(sim, stats.Invert()) - }) -} - -// Adds a Stat to the set bonus -func (setBonusTracker *Aura) AttachStatBuff(stat stats.Stat, value float64) { - statsToAdd := stats.Stats{} - statsToAdd[stat] = value - setBonusTracker.AttachStatsBuff(statsToAdd) -} diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 75254fcfb0..39936c6033 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -140,20 +140,15 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { itemID := config.EffectID enchantEffectID := config.EnchantId - ppm := config.PPM - ppmm := config.Ppmm - aura := config.Aura - slots := config.Slots - customProcMask := config.CustomProcMask isItemPPM := itemID != 0 isEnchantEffectPPM := enchantEffectID != 0 - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { item := swap.GetEquippedItemBySlot(slot) - if customProcMask != 0 { - *ppmm = character.AutoAttacks.NewPPMManager(ppm, customProcMask) + if config.CustomProcMask != 0 { + *config.Ppmm = character.AutoAttacks.NewPPMManager(config.PPM, config.CustomProcMask) return } @@ -163,11 +158,11 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { if isItemPPM { hasItemEquipped = item.ID == itemID - isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, slots) == slot + isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, config.Slots) == slot procMask = character.GetDefaultProcMaskForWeaponEffect(itemID) } else if isEnchantEffectPPM { hasItemEquipped = item.Enchant.EffectID == enchantEffectID || item.TempEnchant == enchantEffectID - isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(enchantEffectID, slots) == slot + isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(enchantEffectID, config.Slots) == slot procMask = character.GetDefaultProcMaskForWeaponEnchant(enchantEffectID) } @@ -175,15 +170,15 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { return } - if aura != nil { + if config.Aura != nil { if hasItemEquipped { - aura.Activate(sim) + config.Aura.Activate(sim) } else { - aura.Deactivate(sim) + config.Aura.Deactivate(sim) } } - *ppmm = character.AutoAttacks.NewPPMManager(ppm, procMask) + *config.Ppmm = character.AutoAttacks.NewPPMManager(config.PPM, procMask) }) } @@ -231,7 +226,7 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { var hasItemEquipped bool if isItemProc { - hasItemEquipped = swap.HasItemEquipped(itemID) + hasItemEquipped = character.HasItemEquipped(itemID) } else if isEnchantEffectProc { hasItemEquipped = item.Enchant.EffectID == enchantEffectID } @@ -261,7 +256,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { if !isSwapItem { return } - hasItemEquipped := swap.HasItemEquipped(itemID) + hasItemEquipped := character.HasItemEquipped(itemID) spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { @@ -305,8 +300,8 @@ func (swap *ItemSwap) IsSwapped() bool { return swap.swapSet == proto.APLActionItemSwap_Swap1 } -func (swap *ItemSwap) HasItemEquipped(itemID int32) bool { - for _, item := range swap.character.Equipment { +func (character *Character) HasItemEquipped(itemID int32) bool { + for _, item := range character.Equipment { if item.ID == itemID { return true } From 77052201796b7b7aa5ecf7ddb2eaaab912c7a599 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 15:30:06 +0100 Subject: [PATCH 059/127] Add swap helper for PVP gloves --- sim/core/item_sets.go | 21 +++++++++++++++++++++ sim/hunter/cata_items.go | 28 ++++++---------------------- sim/paladin/items.go | 28 ++++++---------------------- 3 files changed, 33 insertions(+), 44 deletions(-) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 5047045bff..2a4076ec6b 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -239,3 +239,24 @@ func (character *Character) GetActiveSetBonusNames() []string { func (setBonusTracker *Aura) ExposeToAPL(spellID int32) { setBonusTracker.ActionID = ActionID{SpellID: spellID} } + +// Adds a Spellmod to PVP GLoves +func (character *Character) RegisterPvPGloveMod(itemIDs []int32, config SpellModConfig) { + spellMod := character.AddDynamicMod(config) + + checkGloves := func() { + if slices.Contains(itemIDs, character.Hands().ID) { + spellMod.Activate() + } else { + spellMod.Deactivate() + } + } + + if character.ItemSwap.IsEnabled() { + character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *Simulation, _ proto.ItemSlot) { + checkGloves() + }) + } else { + checkGloves() + } +} diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 771875b30a..369df0cda1 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -4,7 +4,6 @@ import ( "time" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -201,26 +200,11 @@ var ItemSetGladiatorsPursuit = core.NewItemSet(core.ItemSet{ }) func (hunter *Hunter) addBloodthirstyGloves() { - spellMod := hunter.AddDynamicMod(core.SpellModConfig{ - ClassMask: HunterSpellExplosiveTrap | HunterSpellBlackArrow, - Kind: core.SpellMod_Cooldown_Flat, - TimeValue: -time.Second * 2, - }) - - checkGloves := func() { - switch hunter.Hands().ID { - case 64991, 64709, 60424, 65544, 70534, 70260, 70441, 72369, 73717, 73583: - spellMod.Activate() - default: - spellMod.Deactivate() - } - } - - if hunter.ItemSwap.IsEnabled() { - hunter.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *core.Simulation, _ proto.ItemSlot) { - checkGloves() + hunter.RegisterPvPGloveMod( + []int32{64991, 64709, 60424, 65544, 70534, 70260, 70441, 72369, 73717, 73583}, + core.SpellModConfig{ + ClassMask: HunterSpellExplosiveTrap | HunterSpellBlackArrow, + Kind: core.SpellMod_Cooldown_Flat, + TimeValue: -time.Second * 2, }) - } else { - checkGloves() - } } diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 194127d2aa..6e0f841b64 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -5,7 +5,6 @@ import ( "github.com/wowsims/cata/sim/common/cata" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -193,28 +192,13 @@ var ItemSetGladiatorsVindication = core.NewItemSet(core.ItemSet{ }) func (paladin *Paladin) addBloodthirstyGloves() { - spellMod := paladin.AddDynamicMod(core.SpellModConfig{ - Kind: core.SpellMod_DamageDone_Flat, - ClassMask: SpellMaskCrusaderStrike, - FloatValue: 0.05, - }) - - checkGloves := func() { - switch paladin.Hands().ID { - case 64844, 70649, 60414, 65591, 72379, 70250, 70488, 73707, 73570: - spellMod.Activate() - default: - spellMod.Deactivate() - } - } - - if paladin.ItemSwap.IsEnabled() { - paladin.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *core.Simulation, _ proto.ItemSlot) { - checkGloves() + paladin.RegisterPvPGloveMod( + []int32{64844, 70649, 60414, 65591, 72379, 70250, 70488, 73707, 73570}, + core.SpellModConfig{ + Kind: core.SpellMod_DamageDone_Flat, + ClassMask: SpellMaskCrusaderStrike, + FloatValue: 0.05, }) - } else { - checkGloves() - } } // Tier 11 prot From 0b2e184fcb65364729384f57c1704125443bae7a Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 15:36:18 +0100 Subject: [PATCH 060/127] PR feedback - Redundant code --- sim/common/shared/shared_utils.go | 2 +- sim/warlock/items.go | 2 +- sim/warrior/items.go | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 25ad14126f..980e46b33f 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -122,7 +122,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c var itemSwapProcCondition core.CustomStatBuffProcCondition if !isEnchant && character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(effectID) { itemSwapProcCondition = func(_ *core.Simulation, aura *core.Aura) bool { - return character.ItemSwap.HasItemEquipped(effectID) + return character.HasItemEquipped(effectID) } } diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 7f5932a5b7..006723e7f2 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -223,7 +223,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { warlock := agent.(WarlockAgent).GetWarlock() - warlock.AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_Cooldown_Flat, TimeValue: -time.Minute * 4, ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, diff --git a/sim/warrior/items.go b/sim/warrior/items.go index c6836c11c9..4a259e8e55 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -284,9 +284,6 @@ var ItemSetColossalDragonplateBattlegear = core.NewItemSet(core.ItemSet{ ProcChance: config.ProcChance, ActionID: actionID, Callback: core.CallbackOnSpellHitDealt, - ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { - return setBonusAura.IsActive() - }, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procCS.Cast(sim, result.Target) }, From 9466cf353af15ccdd936209ec190be0745ca6966 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 16:03:28 +0100 Subject: [PATCH 061/127] Remove old TBC unsued code --- sim/common/tbc/_melee_sets.go | 159 ++++++++++++++++++ sim/common/tbc/melee_sets.go | 167 ------------------- sim/common/wotlk/_item_sets.go | 284 ++++++++++++++++---------------- sim/core/item_swaps.go | 8 +- sim/warrior/_bloodthirst.go | 54 ------ sim/warrior/_concussion_blow.go | 48 ------ sim/warrior/_devastate.go | 73 -------- sim/warrior/_items.go | 280 ------------------------------- sim/warrior/_shockwave.go | 50 ------ 9 files changed, 301 insertions(+), 822 deletions(-) create mode 100644 sim/common/tbc/_melee_sets.go delete mode 100644 sim/common/tbc/melee_sets.go delete mode 100644 sim/warrior/_bloodthirst.go delete mode 100644 sim/warrior/_concussion_blow.go delete mode 100644 sim/warrior/_devastate.go delete mode 100644 sim/warrior/_items.go delete mode 100644 sim/warrior/_shockwave.go diff --git a/sim/common/tbc/_melee_sets.go b/sim/common/tbc/_melee_sets.go new file mode 100644 index 0000000000..ce89a9afbf --- /dev/null +++ b/sim/common/tbc/_melee_sets.go @@ -0,0 +1,159 @@ +package tbc + +// Keep these in alphabetical order. + +// var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ +// Name: "The Fists of Fury", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// character := agent.GetCharacter() + +// procSpell := character.RegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 41989}, +// SpellSchool: core.SpellSchoolFire, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: character.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 1, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// spell.CalcAndDealDamage(sim, target, sim.Roll(100, 150), spell.OutcomeMagicHitAndCrit) +// }, +// }) + +// ppmm := character.AutoAttacks.NewPPMManager(2.0, core.ProcMaskMelee) + +// character.RegisterAura(core.Aura{ +// Label: "Fists of Fury", +// 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() { +// return +// } + +// if ppmm.Proc(sim, spell.ProcMask, "The Fists of Fury") { +// procSpell.Cast(sim, result.Target) +// } +// }, +// }) +// }, +// }, +// }) + +// var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ +// Name: "Stormshroud Armor", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(a core.Agent, _ *core.Aura) { +// char := a.GetCharacter() +// proc := char.RegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 18980}, +// SpellSchool: core.SpellSchoolNature, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: char.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 1, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// spell.CalcAndDealDamage(sim, target, sim.Roll(15, 25), spell.OutcomeMagicHitAndCrit) +// }, +// }) +// char.RegisterAura(core.Aura{ +// Label: "Stormshround Armor 2pc", +// ActionID: core.ActionID{SpellID: 18979}, +// 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(core.ProcMaskMelee) { +// return +// } +// if sim.RandomFloat("Stormshroud Armor 2pc") < 0.05 { +// proc.Cast(sim, result.Target) +// } +// }, +// }) +// }, +// 3: func(a core.Agent, _ *core.Aura) { +// char := a.GetCharacter() +// if !char.HasEnergyBar() { +// return +// } +// metrics := char.NewEnergyMetrics(core.ActionID{SpellID: 23863}) +// proc := char.RegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 23864}, +// SpellSchool: core.SpellSchoolNature, +// ApplyEffects: func(sim *core.Simulation, u *core.Unit, spell *core.Spell) { +// char.AddEnergy(sim, 30, metrics) +// }, +// }) +// char.RegisterAura(core.Aura{ +// Label: "Stormshround Armor 3pc", +// ActionID: core.ActionID{SpellID: 18979}, +// 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(core.ProcMaskMelee) { +// return +// } +// if sim.RandomFloat("Stormshroud Armor 3pc") < 0.02 { +// proc.Cast(sim, result.Target) +// } +// }, +// }) + +// }, +// 4: func(a core.Agent, _ *core.Aura) { +// a.GetCharacter().AddStat(stats.AttackPower, 14) +// }, +// }, +// }) + +// var ItemSetTwinBladesOfAzzinoth = core.NewItemSet(core.ItemSet{ +// Name: "The Twin Blades of Azzinoth", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// character := agent.GetCharacter() + +// if character.CurrentTarget.MobType == proto.MobType_MobTypeDemon { +// character.PseudoStats.MobTypeAttackPower += 200 +// } +// procAura := character.NewTemporaryStatsAura("Twin Blade of Azzinoth Proc", core.ActionID{SpellID: 41435}, stats.Stats{stats.HasteRating: 450}, time.Second*10) + +// ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMelee) +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 45, +// } + +// character.RegisterAura(core.Aura{ +// Label: "Twin Blades of Azzinoth", +// 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() { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// if ppmm.Proc(sim, spell.ProcMask, "Twin Blades of Azzinoth") { +// icd.Use(sim) +// procAura.Activate(sim) +// } +// }, +// }) +// }, +// }, +// }) diff --git a/sim/common/tbc/melee_sets.go b/sim/common/tbc/melee_sets.go deleted file mode 100644 index 643c326e08..0000000000 --- a/sim/common/tbc/melee_sets.go +++ /dev/null @@ -1,167 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" - "github.com/wowsims/cata/sim/core/stats" -) - -// Keep these in alphabetical order. - -var ItemSetFistsOfFury = core.NewItemSet(core.ItemSet{ - Name: "The Fists of Fury", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - character := agent.GetCharacter() - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 41989}, - SpellSchool: core.SpellSchoolFire, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, sim.Roll(100, 150), spell.OutcomeMagicHitAndCrit) - }, - }) - - ppmm := character.AutoAttacks.NewPPMManager(2.0, core.ProcMaskMelee) - - character.RegisterAura(core.Aura{ - Label: "Fists of Fury", - 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() { - return - } - - if ppmm.Proc(sim, spell.ProcMask, "The Fists of Fury") { - procSpell.Cast(sim, result.Target) - } - }, - }) - }, - }, -}) - -var ItemSetStormshroud = core.NewItemSet(core.ItemSet{ - Name: "Stormshroud Armor", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(a core.Agent, _ *core.Aura) { - char := a.GetCharacter() - proc := char.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 18980}, - SpellSchool: core.SpellSchoolNature, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: char.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, sim.Roll(15, 25), spell.OutcomeMagicHitAndCrit) - }, - }) - char.RegisterAura(core.Aura{ - Label: "Stormshround Armor 2pc", - ActionID: core.ActionID{SpellID: 18979}, - 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(core.ProcMaskMelee) { - return - } - if sim.RandomFloat("Stormshroud Armor 2pc") < 0.05 { - proc.Cast(sim, result.Target) - } - }, - }) - }, - 3: func(a core.Agent, _ *core.Aura) { - char := a.GetCharacter() - if !char.HasEnergyBar() { - return - } - metrics := char.NewEnergyMetrics(core.ActionID{SpellID: 23863}) - proc := char.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 23864}, - SpellSchool: core.SpellSchoolNature, - ApplyEffects: func(sim *core.Simulation, u *core.Unit, spell *core.Spell) { - char.AddEnergy(sim, 30, metrics) - }, - }) - char.RegisterAura(core.Aura{ - Label: "Stormshround Armor 3pc", - ActionID: core.ActionID{SpellID: 18979}, - 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(core.ProcMaskMelee) { - return - } - if sim.RandomFloat("Stormshroud Armor 3pc") < 0.02 { - proc.Cast(sim, result.Target) - } - }, - }) - - }, - 4: func(a core.Agent, _ *core.Aura) { - a.GetCharacter().AddStat(stats.AttackPower, 14) - }, - }, -}) - -var ItemSetTwinBladesOfAzzinoth = core.NewItemSet(core.ItemSet{ - Name: "The Twin Blades of Azzinoth", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - character := agent.GetCharacter() - - if character.CurrentTarget.MobType == proto.MobType_MobTypeDemon { - character.PseudoStats.MobTypeAttackPower += 200 - } - procAura := character.NewTemporaryStatsAura("Twin Blade of Azzinoth Proc", core.ActionID{SpellID: 41435}, stats.Stats{stats.HasteRating: 450}, time.Second*10) - - ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMelee) - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 45, - } - - character.RegisterAura(core.Aura{ - Label: "Twin Blades of Azzinoth", - 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() { - return - } - - if !icd.IsReady(sim) { - return - } - - if ppmm.Proc(sim, spell.ProcMask, "Twin Blades of Azzinoth") { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - }, - }, -}) diff --git a/sim/common/wotlk/_item_sets.go b/sim/common/wotlk/_item_sets.go index 7f2bdd54b4..25b9761c00 100644 --- a/sim/common/wotlk/_item_sets.go +++ b/sim/common/wotlk/_item_sets.go @@ -1,150 +1,142 @@ package wotlk -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" - "github.com/wowsims/cata/sim/core/stats" -) - // Keep these in alphabetical order. -var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ - Name: "Purified Shard of the Gods", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 222}) - applyShardOfTheGodsDamageProc(agent.GetCharacter(), false) - applyShardOfTheGodsHealingProc(agent.GetCharacter(), false) - }, - }, -}) - -var ItemSetShinyShardOfTheGods = core.NewItemSet(core.ItemSet{ - Name: "Shiny Shard of the Gods", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 250}) - applyShardOfTheGodsDamageProc(agent.GetCharacter(), true) - applyShardOfTheGodsHealingProc(agent.GetCharacter(), true) - }, - }, -}) - -func applyShardOfTheGodsDamageProc(character *core.Character, isHeroic bool) { - name := "Searing Flames" - actionID := core.ActionID{SpellID: 69729} - tickAmount := 477.0 - if isHeroic { - name += " H" - actionID = core.ActionID{SpellID: 69730} - tickAmount = 532.0 - } - - dotSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolFire, - ProcMask: core.ProcMaskSpellDamage, - - DamageMultiplier: 1, - ThreatMultiplier: 1, - - Dot: core.DotConfig{ - Aura: core.Aura{ - Label: name, - }, - NumberOfTicks: 6, - TickLength: time.Second * 2, - OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, isRollover bool) { - dot.SnapshotBaseDamage = tickAmount - dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(dot.Spell.Unit.AttackTables[target.UnitIndex], true) - }, - OnTick: func(sim *core.Simulation, target *core.Unit, dot *core.Dot) { - dot.CalcAndDealPeriodicSnapshotDamage(sim, target, dot.OutcomeTick) - }, - }, - }) - - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: name + " Trigger", - Callback: core.CallbackOnSpellHitDealt, - ProcMask: core.ProcMaskSpellDamage, - Outcome: core.OutcomeLanded, - ProcChance: 0.25, - ICD: time.Second * 50, - Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - dotSpell.Dot(result.Target).Apply(sim) - }, - }) -} - -func applyShardOfTheGodsHealingProc(character *core.Character, isHeroic bool) { - name := "Cauterizing Heal" - actionID := core.ActionID{SpellID: 69733} - minHeal := 2269.0 - maxHeal := 2773.0 - if isHeroic { - name += " H" - actionID = core.ActionID{SpellID: 69734} - minHeal = 2530.0 - maxHeal = 3092.0 - } - - spell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolHoly, - ProcMask: core.ProcMaskSpellHealing, - Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagHelpful, - - DamageMultiplier: 1, - ThreatMultiplier: 1, - CritMultiplier: character.DefaultHealingCritMultiplier(), - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseHealing := sim.Roll(minHeal, maxHeal) - spell.CalcAndDealHealing(sim, target, baseHealing, spell.OutcomeHealingCrit) - }, - }) - - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: name + " Trigger", - Callback: core.CallbackOnHealDealt, - ProcChance: 0.25, - ICD: time.Second * 50, - Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - spell.Cast(sim, result.Target) - }, - }) -} - -func makeUndeadSet(setName string) *core.ItemSet { - return core.NewItemSet(core.ItemSet{ - Name: setName, - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - character := agent.GetCharacter() - if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { - character.PseudoStats.DamageDealtMultiplier *= 1.01 - } - }, - 3: func(agent core.Agent) { - character := agent.GetCharacter() - if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { - character.PseudoStats.DamageDealtMultiplier *= 1.02 / 1.01 - } - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - character := agent.GetCharacter() - if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { - character.PseudoStats.DamageDealtMultiplier *= 1.03 / 1.02 - } - }, - }, - }) -} - -var ItemSetBlessedBattlegearOfUndeadSlaying = makeUndeadSet("Blessed Battlegear of Undead Slaying") -var ItemSetBlessedRegaliaOfUndeadCleansing = makeUndeadSet("Blessed Regalia of Undead Cleansing") -var ItemSetBlessedGarbOfTheUndeadSlayer = makeUndeadSet("Blessed Garb of the Undead Slayer") -var ItemSetUndeadSlayersBlessedArmor = makeUndeadSet("Undead Slayer's Blessed Armor") +// var ItemSetPurifiedShardOfTheGods = core.NewItemSet(core.ItemSet{ +// Name: "Purified Shard of the Gods", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 222}) +// applyShardOfTheGodsDamageProc(agent.GetCharacter(), false) +// applyShardOfTheGodsHealingProc(agent.GetCharacter(), false) +// }, +// }, +// }) + +// var ItemSetShinyShardOfTheGods = core.NewItemSet(core.ItemSet{ +// Name: "Shiny Shard of the Gods", +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// agent.GetCharacter().AddStats(stats.Stats{stats.SpellPower: 250}) +// applyShardOfTheGodsDamageProc(agent.GetCharacter(), true) +// applyShardOfTheGodsHealingProc(agent.GetCharacter(), true) +// }, +// }, +// }) + +// func applyShardOfTheGodsDamageProc(character *core.Character, isHeroic bool) { +// name := "Searing Flames" +// actionID := core.ActionID{SpellID: 69729} +// tickAmount := 477.0 +// if isHeroic { +// name += " H" +// actionID = core.ActionID{SpellID: 69730} +// tickAmount = 532.0 +// } + +// dotSpell := character.RegisterSpell(core.SpellConfig{ +// ActionID: actionID, +// SpellSchool: core.SpellSchoolFire, +// ProcMask: core.ProcMaskSpellDamage, + +// DamageMultiplier: 1, +// ThreatMultiplier: 1, + +// Dot: core.DotConfig{ +// Aura: core.Aura{ +// Label: name, +// }, +// NumberOfTicks: 6, +// TickLength: time.Second * 2, +// OnSnapshot: func(sim *core.Simulation, target *core.Unit, dot *core.Dot, isRollover bool) { +// dot.SnapshotBaseDamage = tickAmount +// dot.SnapshotAttackerMultiplier = dot.Spell.AttackerDamageMultiplier(dot.Spell.Unit.AttackTables[target.UnitIndex], true) +// }, +// OnTick: func(sim *core.Simulation, target *core.Unit, dot *core.Dot) { +// dot.CalcAndDealPeriodicSnapshotDamage(sim, target, dot.OutcomeTick) +// }, +// }, +// }) + +// core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ +// Name: name + " Trigger", +// Callback: core.CallbackOnSpellHitDealt, +// ProcMask: core.ProcMaskSpellDamage, +// Outcome: core.OutcomeLanded, +// ProcChance: 0.25, +// ICD: time.Second * 50, +// Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { +// dotSpell.Dot(result.Target).Apply(sim) +// }, +// }) +// } + +// func applyShardOfTheGodsHealingProc(character *core.Character, isHeroic bool) { +// name := "Cauterizing Heal" +// actionID := core.ActionID{SpellID: 69733} +// minHeal := 2269.0 +// maxHeal := 2773.0 +// if isHeroic { +// name += " H" +// actionID = core.ActionID{SpellID: 69734} +// minHeal = 2530.0 +// maxHeal = 3092.0 +// } + +// spell := character.RegisterSpell(core.SpellConfig{ +// ActionID: actionID, +// SpellSchool: core.SpellSchoolHoly, +// ProcMask: core.ProcMaskSpellHealing, +// Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagHelpful, + +// DamageMultiplier: 1, +// ThreatMultiplier: 1, +// CritMultiplier: character.DefaultHealingCritMultiplier(), + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// baseHealing := sim.Roll(minHeal, maxHeal) +// spell.CalcAndDealHealing(sim, target, baseHealing, spell.OutcomeHealingCrit) +// }, +// }) + +// core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ +// Name: name + " Trigger", +// Callback: core.CallbackOnHealDealt, +// ProcChance: 0.25, +// ICD: time.Second * 50, +// Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { +// spell.Cast(sim, result.Target) +// }, +// }) +// } + +// func makeUndeadSet(setName string) *core.ItemSet { +// return core.NewItemSet(core.ItemSet{ +// Name: setName, +// Bonuses: map[int32]core.ApplySetBonus{ +// 2: func(agent core.Agent, setBonusAura *core.Aura) { +// character := agent.GetCharacter() +// if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { +// character.PseudoStats.DamageDealtMultiplier *= 1.01 +// } +// }, +// 3: func(agent core.Agent) { +// character := agent.GetCharacter() +// if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { +// character.PseudoStats.DamageDealtMultiplier *= 1.02 / 1.01 +// } +// }, +// 4: func(agent core.Agent, setBonusAura *core.Aura) { +// character := agent.GetCharacter() +// if character.CurrentTarget.MobType == proto.MobType_MobTypeUndead { +// character.PseudoStats.DamageDealtMultiplier *= 1.03 / 1.02 +// } +// }, +// }, +// }) +// } + +// var ItemSetBlessedBattlegearOfUndeadSlaying = makeUndeadSet("Blessed Battlegear of Undead Slaying") +// var ItemSetBlessedRegaliaOfUndeadCleansing = makeUndeadSet("Blessed Regalia of Undead Cleansing") +// var ItemSetBlessedGarbOfTheUndeadSlayer = makeUndeadSet("Blessed Garb of the Undead Slayer") +// var ItemSetUndeadSlayersBlessedArmor = makeUndeadSet("Undead Slayer's Blessed Armor") diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 39936c6033..0e7fce96d9 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -158,11 +158,11 @@ func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { if isItemPPM { hasItemEquipped = item.ID == itemID - isItemSlotMatch = swap.GetItemFromPossibleSlotsByItemID(itemID, config.Slots) == slot + isItemSlotMatch = swap.FindSlotForItem(itemID, config.Slots) == slot procMask = character.GetDefaultProcMaskForWeaponEffect(itemID) } else if isEnchantEffectPPM { hasItemEquipped = item.Enchant.EffectID == enchantEffectID || item.TempEnchant == enchantEffectID - isItemSlotMatch = swap.GetItemFromPossibleSlotsByEffectID(enchantEffectID, config.Slots) == slot + isItemSlotMatch = swap.FindSlotForEnchant(enchantEffectID, config.Slots) == slot procMask = character.GetDefaultProcMaskForWeaponEnchant(enchantEffectID) } @@ -317,7 +317,7 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) GetItemFromPossibleSlotsByItemID(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { +func (swap *ItemSwap) FindSlotForItem(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { for _, slot := range possibleSlots { if swap.swapEquip[slot].ID == itemID { return slot @@ -328,7 +328,7 @@ func (swap *ItemSwap) GetItemFromPossibleSlotsByItemID(itemID int32, possibleSlo return -1 } -func (swap *ItemSwap) GetItemFromPossibleSlotsByEffectID(effectID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { +func (swap *ItemSwap) FindSlotForEnchant(effectID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { for _, slot := range possibleSlots { if swap.swapEquip[slot].Enchant.EffectID == effectID { return slot diff --git a/sim/warrior/_bloodthirst.go b/sim/warrior/_bloodthirst.go deleted file mode 100644 index f35b49eff2..0000000000 --- a/sim/warrior/_bloodthirst.go +++ /dev/null @@ -1,54 +0,0 @@ -package warrior - -import ( - "time" - - "github.com/wowsims/cata/sim/core" -) - -func (warrior *Warrior) registerBloodthirstSpell(cdTimer *core.Timer) { - if !warrior.Talents.Bloodthirst { - return - } - - warrior.Bloodthirst = warrior.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 23881}, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskMeleeMHSpecial, - Flags: core.SpellFlagMeleeMetrics | core.SpellFlagIncludeTargetBonusDamage | SpellFlagBloodsurge | core.SpellFlagAPL, - - RageCost: core.RageCostOptions{ - Cost: 20, - Refund: 0.8, - }, - Cast: core.CastConfig{ - DefaultCast: core.Cast{ - GCD: core.GCDDefault, - }, - IgnoreHaste: true, - CD: core.Cooldown{ - Timer: cdTimer, - Duration: time.Second * 4, - }, - }, - - BonusCritRating: core.TernaryFloat64(warrior.HasSetBonus(ItemSetSiegebreakerBattlegear, 4), 10, 0) * core.CritRatingPerCritChance, - DamageMultiplier: 1 + 0.02*float64(warrior.Talents.UnendingFury) + core.TernaryFloat64(warrior.HasSetBonus(ItemSetOnslaughtBattlegear, 4), 0.05, 0), - CritMultiplier: warrior.critMultiplier(mh), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := 0.5 * spell.MeleeAttackPower() - result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - if !result.Landed() { - spell.IssueRefund(sim) - } - core.StartDelayedAction(sim, core.DelayedActionOptions{ - DoAt: sim.CurrentTime + warrior.Bloodthirst.CD.Duration, - OnAction: func(_ *core.Simulation) { - warrior.Rotation.DoNextAction(sim) - }, - }) - }, - }) -} diff --git a/sim/warrior/_concussion_blow.go b/sim/warrior/_concussion_blow.go deleted file mode 100644 index 7588b0734a..0000000000 --- a/sim/warrior/_concussion_blow.go +++ /dev/null @@ -1,48 +0,0 @@ -package warrior - -import ( - "time" - - "github.com/wowsims/cata/sim/core" -) - -func (warrior *Warrior) registerConcussionBlowSpell() { - if !warrior.Talents.ConcussionBlow { - return - } - - warrior.ConcussionBlow = warrior.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 12809}, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskMeleeMHSpecial, - Flags: core.SpellFlagMeleeMetrics | core.SpellFlagIncludeTargetBonusDamage | core.SpellFlagAPL, - - RageCost: core.RageCostOptions{ - Cost: 15 - float64(warrior.Talents.FocusedRage), - Refund: 0.8, - }, - Cast: core.CastConfig{ - DefaultCast: core.Cast{ - GCD: core.GCDDefault, - }, - IgnoreHaste: true, - CD: core.Cooldown{ - Timer: warrior.NewTimer(), - Duration: time.Second * 30, - }, - }, - - DamageMultiplier: 1, - CritMultiplier: warrior.critMultiplier(mh), - ThreatMultiplier: 2, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := 0.38 * spell.MeleeAttackPower() - result := spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - - if !result.Landed() { - spell.IssueRefund(sim) - } - }, - }) -} diff --git a/sim/warrior/_devastate.go b/sim/warrior/_devastate.go deleted file mode 100644 index 9446543b43..0000000000 --- a/sim/warrior/_devastate.go +++ /dev/null @@ -1,73 +0,0 @@ -package warrior - -import ( - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" -) - -func (warrior *Warrior) registerDevastateSpell() { - if !warrior.Talents.Devastate { - return - } - - hasGlyph := warrior.HasMajorGlyph(proto.WarriorMajorGlyph_GlyphOfDevastate) - flatThreatBonus := core.TernaryFloat64(hasGlyph, 630, 315) - dynaThreatBonus := core.TernaryFloat64(hasGlyph, 0.1, 0.05) - - weaponMulti := 1.2 - overallMulti := core.TernaryFloat64(warrior.HasSetBonus(ItemSetWrynnsPlate, 2), 1.05, 1.00) - - warrior.Devastate = warrior.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 47498}, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskMeleeMHSpecial, - Flags: core.SpellFlagMeleeMetrics | core.SpellFlagAPL, - - RageCost: core.RageCostOptions{ - Cost: 15 - float64(warrior.Talents.FocusedRage) - float64(warrior.Talents.Puncture), - Refund: 0.8, - }, - Cast: core.CastConfig{ - DefaultCast: core.Cast{ - GCD: core.GCDDefault, - }, - IgnoreHaste: true, - }, - ExtraCastCondition: func(sim *core.Simulation, target *core.Unit) bool { - return warrior.CanApplySunderAura(target) - }, - - BonusCritRating: 5*core.CritRatingPerCritChance*float64(warrior.Talents.SwordAndBoard) + - core.TernaryFloat64(warrior.HasSetBonus(ItemSetSiegebreakerPlate, 2), 10*core.CritRatingPerCritChance, 0), - - DamageMultiplier: overallMulti, - CritMultiplier: warrior.critMultiplier(mh), - ThreatMultiplier: 1, - FlatThreatBonus: flatThreatBonus, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - // Bonus 242 damage / stack of sunder. Counts stacks AFTER cast but only if stacks > 0. - sunderBonus := 0.0 - saStacks := warrior.SunderArmorAuras.Get(target).GetStacks() - if saStacks != 0 { - sunderBonus = 242 * float64(min(saStacks+1, 5)) - } - - baseDamage := (weaponMulti * spell.Unit.MHNormalizedWeaponDamage(sim, spell.MeleeAttackPower())) + sunderBonus - - result := spell.CalcDamage(sim, target, baseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit) - result.Threat = spell.ThreatFromDamage(result.Outcome, result.Damage+dynaThreatBonus*spell.MeleeAttackPower()) - spell.DealDamage(sim, result) - - if result.Landed() { - if warrior.CanApplySunderAura(target) { - warrior.SunderArmorDevastate.Cast(sim, target) - } - } else { - spell.IssueRefund(sim) - } - }, - - RelatedAuras: []core.AuraArray{warrior.SunderArmorAuras}, - }) -} diff --git a/sim/warrior/_items.go b/sim/warrior/_items.go deleted file mode 100644 index 17e2965a84..0000000000 --- a/sim/warrior/_items.go +++ /dev/null @@ -1,280 +0,0 @@ -package warrior - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -///////////////////////////////////////////////////////////////// -// TBC Item set -///////////////////////////////////////////////////////////////// - -var ItemSetOnslaughtArmor = core.NewItemSet(core.ItemSet{ - Name: "Onslaught Armor", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the health bonus from your Commanding Shout ability by 170. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the damage of your Shield Slam ability by 10%. - // Handled in shield_slam.go. - }, - }, -}) - -var ItemSetOnslaughtBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Onslaught Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Reduces the rage cost of your Execute ability by 3. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the damage of your Mortal Strike and Bloodthirst abilities by 5%. - // Handled in bloodthirst.go and mortal_strike.go. - }, - }, -}) - -///////////////////////////////////////////////////////////////// -// Wrath Item set -///////////////////////////////////////////////////////////////// - -var ItemSetGladiatorsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Gladiator's Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases attack power by 50. - // +100 resilience rating. - agent.GetCharacter().AddStat(stats.Resilience, 100) - agent.GetCharacter().AddStat(stats.AttackPower, 50) - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Reduces the cooldown of your Intercept ability by 5 sec. - // Increases attack power by 150. - agent.GetCharacter().AddStat(stats.AttackPower, 150) - }, - }, -}) - -var ItemSetDreadnaughtPlate = core.NewItemSet(core.ItemSet{ - Name: "Dreadnaught Plate", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the damage of your Shield Slam ability by 10%. - // Handled in shield_slam.go. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the duration of Shield Wall by 3 seconds. - // NYI - }, - }, -}) - -var ItemSetSiegebreakerPlate = core.NewItemSet(core.ItemSet{ - Name: "Siegebreaker Plate", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the critical strike chance of Devastate by 10%. - // Handled in devastate.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Shield Block grants 10% magic DR - // NYI - }, - }, -}) - -var ItemSetWrynnsPlate = core.NewItemSet(core.ItemSet{ - Name: "Wrynn's Plate", - AlternativeName: "Hellscream's Plate", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Decreases the cooldown on Taunt by 2sec - // NYI - - // Increases damage done by Devastate by 5% - // Handled in devastate.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Decreases the cooldown of Shield Block by 10 sec - // NYI - }, - }, -}) - -var ItemSetYmirjarLordsPlate = core.NewItemSet(core.ItemSet{ - Name: "Ymirjar Lord's Plate", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Shield Slam and Shockwave deal 20% increased damage - // Handled in shield_slam.go and shockwave.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Bloodrage no longer costs health to use, and now causes you to absorb damage equal to 20% max HP - // NYI - }, - }, -}) - -var ItemSetDreadnaughtBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Dreadnaught Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the damage of your Slam by 10%. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Your Bleed periodic effects have a chance to make your next ability cost 5 less rage. - warrior := agent.(WarriorAgent).GetWarrior() - rageMetrics := warrior.NewRageMetrics(core.ActionID{SpellID: 61571}) - - procAura := warrior.RegisterAura(core.Aura{ - Label: "Dreadnaught Battlegear 4pc Proc", - ActionID: core.ActionID{SpellID: 61571}, - Duration: time.Second * 30, - OnGain: func(_ *core.Aura, sim *core.Simulation) { - warrior.PseudoStats.CostReduction += 5 - }, - OnExpire: func(_ *core.Aura, sim *core.Simulation) { - warrior.PseudoStats.CostReduction -= 5 - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, _ *core.SpellResult) { - if !spell.ProcMask.Matches(core.ProcMaskMeleeSpecial) { - return - } - - // one-shot cost reductions cannot be reliably reset, since both OnCastComplete and OnSpellHit - // are too late (e.g. there might be a proc after Slam cast, but before either callback), - // or happen to often (e.g. internal 0-cost casts like Mutilate, or multiple Whirlwind hits, in case of OnSpellHit) - - // doesn't handle multiple dynamic cost reductions at once, or 0-cost default casts - if actualGain := spell.DefaultCast.Cost - spell.CurCast.Cost; actualGain > 0 { - rageMetrics.AddEvent(5, actualGain) - aura.Deactivate(sim) - } - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Dreadnaught Battlegear 4pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(_ *core.Aura, sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - if result.Landed() && sim.RandomFloat("Dreadnaught Battlegear 4pc") < 0.1 { - procAura.Activate(sim) - } - }, - }) - }, - }, -}) - -var ItemSetSiegebreakerBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Siegebreaker Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Heroic Strike and Slam critical strikes have a chance to grant you 150 haste rating for 5 sec. - warrior := agent.(WarriorAgent).GetWarrior() - procAura := warrior.RegisterAura(core.Aura{ - Label: "Siegebreaker Battlegear 2pc Proc", - ActionID: core.ActionID{SpellID: 64937}, - Duration: time.Second * 5, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - warrior.AddStatDynamic(sim, stats.MeleeHaste, 150) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - warrior.AddStatDynamic(sim, stats.MeleeHaste, -150) - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Siegebreaker Battlegear 2pc", - 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 spell.ActionID.SpellID != 47450 && spell != warrior.Slam { - return - } - if !result.Outcome.Matches(core.OutcomeCrit) { - return - } - if result.Landed() && sim.RandomFloat("Siegebreaker Battlegear 2pc") < 0.4 { - procAura.Activate(sim) - } - }, - }) - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the critical strike chance of Mortal Strike and Bloodthirst by 10%. - // Handled in bloodthirst.go and mortal_strike.go. - }, - }, -}) - -var ItemSetWrynnsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Wrynn's Battlegear", - AlternativeName: "Hellscream's Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // Berserker Stance grants an additional 2% critical strike chance, and Battle Stance grants an additional 6% armor penetration. - // Handled in stances.go. - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Increases the critical strike chance of your Slam and Heroic Strike abilities by 5%. - // Handled in slam.go and heroic_strike_cleave.go. - }, - }, -}) - -var ItemSetYmirjarLordsBattlegear = core.NewItemSet(core.ItemSet{ - Name: "Ymirjar Lord's Battlegear", - Bonuses: map[int32]core.ApplySetBonus{ - 2: func(agent core.Agent, setBonusAura *core.Aura) { - // When your Deep Wounds ability deals damage you have a 3% chance to gain 16% attack power for 10 sec. - warrior := agent.(WarriorAgent).GetWarrior() - var bonusAP float64 - procAura := warrior.RegisterAura(core.Aura{ - Label: "Ymirjar Lord's Battlegear 2pc Proc", - ActionID: core.ActionID{SpellID: 70855}, - Duration: time.Second * 10, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - bonusAP = warrior.GetStat(stats.AttackPower) * 0.16 - aura.Unit.AddStatDynamic(sim, stats.AttackPower, bonusAP) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - aura.Unit.AddStatDynamic(sim, stats.AttackPower, -bonusAP) - }, - }) - - warrior.RegisterAura(core.Aura{ - Label: "Ymirjar Lord's Battlegear 2pc", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnPeriodicDamageDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell != warrior.DeepWounds { - return - } - if result.Landed() && sim.RandomFloat("Ymirjar 2pc") < 0.03 { - procAura.Activate(sim) - } - }, - }) - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { - // You have a 20% chance for your Bloodsurge and Sudden Death talents to grant 2 charges of their effect instead of 1, - // reduce the global cooldown on Execute or Slam by 0.5 sec, and for the duration of the effect to be increased by 100%. - - // handled with specialized Auras for either Bloodsurge or Sudden Death - }, - }, -}) - -func init() { -} diff --git a/sim/warrior/_shockwave.go b/sim/warrior/_shockwave.go deleted file mode 100644 index 62fb86fc93..0000000000 --- a/sim/warrior/_shockwave.go +++ /dev/null @@ -1,50 +0,0 @@ -package warrior - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" -) - -func (warrior *Warrior) registerShockwaveSpell() { - if !warrior.Talents.Shockwave { - return - } - - warrior.Shockwave = warrior.RegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 46968}, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskRangedSpecial, - Flags: core.SpellFlagMeleeMetrics | core.SpellFlagIncludeTargetBonusDamage | core.SpellFlagAPL, - - RageCost: core.RageCostOptions{ - Cost: 15 - float64(warrior.Talents.FocusedRage), - }, - Cast: core.CastConfig{ - DefaultCast: core.Cast{ - GCD: core.GCDDefault, - }, - IgnoreHaste: true, - CD: core.Cooldown{ - Timer: warrior.NewTimer(), - Duration: 20*time.Second - core.TernaryDuration(warrior.HasMajorGlyph(proto.WarriorMajorGlyph_GlyphOfShockwave), 3*time.Second, 0), - }, - }, - ExtraCastCondition: func(sim *core.Simulation, target *core.Unit) bool { - return warrior.StanceMatches(DefensiveStance) - }, - - DamageMultiplier: 1 + core.TernaryFloat64(warrior.HasSetBonus(ItemSetYmirjarLordsPlate, 2), .20, 0), - CritMultiplier: warrior.critMultiplier(none), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := 0.75 * spell.MeleeAttackPower() - baseDamage *= sim.Encounter.AOECapMultiplier() - for _, aoeTarget := range sim.Encounter.TargetUnits { - spell.CalcAndDealDamage(sim, aoeTarget, baseDamage, spell.OutcomeMeleeSpecialHitAndCrit) - } - }, - }) -} From ddd615119df99c30fe5e2c559f558b1c09f97500 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 16:33:15 +0100 Subject: [PATCH 062/127] PR Feedback - Add default itemset slots override --- sim/common/cata/stat_bonus_procs.go | 4 +++- sim/core/item_sets.go | 23 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index c05f2b1499..703733ffef 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -5,6 +5,7 @@ import ( "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -1261,7 +1262,8 @@ func init() { } var ItemSetAgonyAndTorment = core.NewItemSet(core.ItemSet{ - Name: "Agony and Torment", + Name: "Agony and Torment", + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 2a4076ec6b..e85605a47a 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -19,9 +19,13 @@ type ItemSet struct { // // The function should apply any benefits provided by the set bonus. Bonuses map[int32]ApplySetBonus + + // Optional field to override the DefaultItemSetSlots + // For Example: The set contains of 2 weapons + Slots []proto.ItemSlot } -var ItemSetSlots = []proto.ItemSlot{ +var DefaultItemSetSlots = []proto.ItemSlot{ proto.ItemSlot_ItemSlotHead, proto.ItemSlot_ItemSlotShoulder, proto.ItemSlot_ItemSlotChest, @@ -53,6 +57,11 @@ func NewItemSet(set ItemSet) *ItemSet { foundID := set.ID == 0 foundName := false foundAlternativeName := set.AlternativeName == "" + + if set.Slots == nil { + set.Slots = DefaultItemSetSlots + } + for _, item := range ItemsByID { if item.SetName == "" { continue @@ -115,6 +124,10 @@ type SetBonus struct { // Function for applying the effects of this set bonus. BonusEffect ApplySetBonus + + // Optional field to override the DefaultItemSetSlots + // For Example: The set contains of 2 weapons + Slots []proto.ItemSlot } // Returns a list describing all active set bonuses. @@ -184,7 +197,7 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { activeSetBonuses := character.GetActiveSetBonuses() for _, activeSetBonus := range activeSetBonuses { - setBonusAura := character.makeSetBonusStatusAura(activeSetBonus.Name, activeSetBonus.NumPieces, true) + setBonusAura := character.makeSetBonusStatusAura(activeSetBonus.Name, activeSetBonus.NumPieces, activeSetBonus.Slots, true) activeSetBonus.BonusEffect(agent, setBonusAura) } @@ -194,13 +207,13 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { }) for _, unequippedSetBonus := range unequippedSetBonuses { - setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, false) + setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, unequippedSetBonus.Slots, false) unequippedSetBonus.BonusEffect(agent, setBonusAura) } } } -func (character *Character) makeSetBonusStatusAura(setName string, numPieces int32, activeAtStart bool) *Aura { +func (character *Character) makeSetBonusStatusAura(setName string, numPieces int32, slots []proto.ItemSlot, activeAtStart bool) *Aura { statusAura := character.GetOrRegisterAura(Aura{ Label: fmt.Sprintf("%s %dP", setName, numPieces), BuildPhase: Ternary(activeAtStart, CharacterBuildPhaseGear, CharacterBuildPhaseNone), @@ -212,7 +225,7 @@ func (character *Character) makeSetBonusStatusAura(setName string, numPieces int } if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback(ItemSetSlots, func(sim *Simulation, _ proto.ItemSlot) { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { if character.HasActiveSetBonus(setName, numPieces) { statusAura.Activate(sim) } else { From 2d42959d51be8e86f3cc1fa6500b513425c83a9e Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 16:48:50 +0100 Subject: [PATCH 063/127] Fix itemset slots check --- sim/core/item_sets.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index e85605a47a..efad0941e1 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -58,7 +58,7 @@ func NewItemSet(set ItemSet) *ItemSet { foundName := false foundAlternativeName := set.AlternativeName == "" - if set.Slots == nil { + if len(set.Slots) == 0 { set.Slots = DefaultItemSetSlots } @@ -172,6 +172,7 @@ func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { Name: foundSet.Name, NumPieces: setItemCount[foundSet], BonusEffect: bonusEffect, + Slots: foundSet.Slots, }) } } From f47fbb86d2f538e63c3aff899d1c0c73dee19dad Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 16:54:32 +0100 Subject: [PATCH 064/127] Fix Hunter T11 bonus --- sim/hunter/cata_items.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 369df0cda1..75f20a8b6a 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -169,7 +169,7 @@ var ItemSetLightningChargedBattleGear = core.NewItemSet(core.ItemSet{ }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Flat, - ClassMask: HunterSpellCobraShot, + ClassMask: HunterSpellSteadyShot, TimeValue: -200 * time.Millisecond, }) }, From 4bf6e14bef6fb5561511e2babeb307f8b9b76f01 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 16:58:02 +0100 Subject: [PATCH 065/127] Fix old hunter set bonus callback --- sim/hunter/wotlk_items.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/hunter/wotlk_items.go b/sim/hunter/wotlk_items.go index 97784f5ec1..99cc68c75d 100644 --- a/sim/hunter/wotlk_items.go +++ b/sim/hunter/wotlk_items.go @@ -62,7 +62,7 @@ var ItemSetAhnKaharBloodHuntersBattlegear = core.NewItemSet(core.ItemSet{ Name: "AhnKahar 4pc", ProcChance: 0.05, ClassSpellMask: HunterSpellSerpentSting, - Callback: core.CallbackOnSpellHitDealt, + Callback: core.CallbackOnPeriodicDamageDealt, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procAura.Activate(sim) }, From 0eedf47d267f9a6ab3397307cb12b32a0c939666 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 17:01:12 +0100 Subject: [PATCH 066/127] Update Hunter tests --- sim/hunter/beast_mastery/TestBM.results | 8 +- sim/hunter/marksmanship/TestMM.results | 8 +- sim/hunter/survival/TestSV.results | 1324 +++++++++++------------ 3 files changed, 670 insertions(+), 670 deletions(-) diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index 84ede31642..7e6ba17ed9 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -52,8 +52,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 21498.78092 - tps: 13858.47028 + dps: 21867.14021 + tps: 14079.13569 } } dps_results: { @@ -1061,8 +1061,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Lightning-ChargedBattlegear" value: { - dps: 25159.77352 - tps: 16110.14663 + dps: 24565.79227 + tps: 15458.02105 } } dps_results: { diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index c37f614df4..e3c2e0bd83 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -52,8 +52,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 20290.45794 - tps: 18285.35959 + dps: 20508.13111 + tps: 18476.67766 } } dps_results: { @@ -1061,8 +1061,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-Lightning-ChargedBattlegear" value: { - dps: 22739.57703 - tps: 20442.36869 + dps: 23388.24481 + tps: 21100.25418 } } dps_results: { diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 8aa7204019..1671770f6a 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -38,590 +38,590 @@ character_stats_results: { dps_results: { key: "TestSV-AllItems-AgileShadowspiritDiamond" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-AllItems-AgonyandTorment" value: { - dps: 29716.12085 - tps: 26966.36301 + dps: 28920.01029 + tps: 26141.33582 } } dps_results: { key: "TestSV-AllItems-Ahn'KaharBloodHunter'sBattlegear" value: { - dps: 23912.27406 - tps: 21587.67586 + dps: 24234.83973 + tps: 21873.86403 } } dps_results: { key: "TestSV-AllItems-Althor'sAbacus-50366" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Anhuur'sHymnal-55889" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Anhuur'sHymnal-56407" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 29289.2474 - tps: 26570.36339 + dps: 28322.91589 + tps: 25596.91293 } } dps_results: { key: "TestSV-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 29292.43247 - tps: 26573.54846 + dps: 28324.75938 + tps: 25598.49443 } } dps_results: { key: "TestSV-AllItems-ArrowofTime-72897" value: { - dps: 31107.66898 - tps: 28205.67165 + dps: 30402.09306 + tps: 27516.24191 } } dps_results: { key: "TestSV-AllItems-AustereShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-BaubleofTrueBlood-50726" value: { - dps: 29271.48671 - tps: 26554.06532 - hps: 96.48307 + dps: 28306.55768 + tps: 25582.83366 + hps: 96.72062 } } dps_results: { key: "TestSV-AllItems-BedrockTalisman-58182" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BellofEnragingResonance-59326" value: { - dps: 29688.86932 - tps: 26941.85166 + dps: 28702.3661 + tps: 25939.89014 } } dps_results: { key: "TestSV-AllItems-BellofEnragingResonance-65053" value: { - dps: 29747.17299 - tps: 26996.20844 + dps: 28753.96771 + tps: 25987.60202 } } dps_results: { key: "TestSV-AllItems-BindingPromise-67037" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BlackBruise-50692" value: { - dps: 28750.84411 - tps: 26083.60861 + dps: 27833.78553 + tps: 25158.25894 } } dps_results: { key: "TestSV-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 30219.86513 - tps: 27439.85662 + dps: 29224.08843 + tps: 26430.43225 } } dps_results: { key: "TestSV-AllItems-BloodofIsiset-55995" value: { - dps: 29539.2853 - tps: 26821.46684 + dps: 28563.57749 + tps: 25839.0001 } } dps_results: { key: "TestSV-AllItems-BloodofIsiset-56414" value: { - dps: 29574.43031 - tps: 26856.5517 + dps: 28597.39879 + tps: 25872.76129 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 30545.15966 - tps: 27699.54078 + dps: 29553.24685 + tps: 26703.90739 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 29659.53087 - tps: 26914.79531 + dps: 28681.81983 + tps: 25921.36928 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 30564.96312 - tps: 27712.64271 + dps: 29581.0567 + tps: 26718.87229 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-77210" value: { - dps: 30122.37199 - tps: 27427.00236 + dps: 29285.81727 + tps: 26568.26497 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-77982" value: { - dps: 30044.73603 - tps: 27344.3701 + dps: 29159.60099 + tps: 26440.32064 } } dps_results: { key: "TestSV-AllItems-Bone-LinkFetish-78002" value: { - dps: 30270.19217 - tps: 27568.19726 + dps: 29379.34984 + tps: 26661.08529 } } dps_results: { key: "TestSV-AllItems-BottledLightning-66879" value: { - dps: 29409.06857 - tps: 26680.81566 + dps: 28415.13542 + tps: 25681.86136 } } dps_results: { key: "TestSV-AllItems-BottledWishes-77114" value: { - dps: 29671.53341 - tps: 26899.3939 + dps: 28865.91307 + tps: 26103.80521 } } dps_results: { key: "TestSV-AllItems-BracingShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 26916.77381 + dps: 29360.04017 + tps: 25936.94658 } } dps_results: { key: "TestSV-AllItems-Brawler'sTrophy-232015" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 31175.85667 - tps: 28278.09077 + dps: 30154.79748 + tps: 27238.14381 } } dps_results: { key: "TestSV-AllItems-BurningShadowspiritDiamond" value: { - dps: 30957.31926 - tps: 28080.62411 + dps: 29959.78982 + tps: 27064.62497 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 31230.06246 - tps: 28341.18126 + dps: 30199.32497 + tps: 27295.1034 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 31301.99311 - tps: 28377.50416 + dps: 30320.03489 + tps: 27381.14582 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 31043.58113 - tps: 28160.22959 + dps: 30018.73895 + tps: 27117.64611 } } dps_results: { key: "TestSV-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 30257.77809 - tps: 27452.43053 + dps: 29260.35449 + tps: 26437.57015 } } dps_results: { key: "TestSV-AllItems-CoreofRipeness-58184" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-CorpseTongueCoin-50349" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 30105.71396 - tps: 27306.53078 + dps: 29141.55204 + tps: 26332.99428 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 30029.30663 - tps: 27234.69438 + dps: 29089.18228 + tps: 26282.84702 } } dps_results: { key: "TestSV-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 30231.37266 - tps: 27425.28023 + dps: 29239.47487 + tps: 26415.56204 } } dps_results: { key: "TestSV-AllItems-CrushingWeight-59506" value: { - dps: 29316.5092 - tps: 26596.90315 + dps: 28304.10872 + tps: 25585.94077 } } dps_results: { key: "TestSV-AllItems-CrushingWeight-65118" value: { - dps: 29258.58745 - tps: 26546.69003 + dps: 28273.71284 + tps: 25549.87055 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-77208" value: { - dps: 29736.71468 - tps: 27019.56076 + dps: 28769.68268 + tps: 26045.83716 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-77980" value: { - dps: 29662.82295 - tps: 26945.42301 + dps: 28698.75125 + tps: 25975.05209 } } dps_results: { key: "TestSV-AllItems-CunningoftheCruel-78000" value: { - dps: 29789.87115 - tps: 27072.61001 + dps: 28829.69149 + tps: 26105.7891 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 29700.3612 - tps: 26982.62295 + dps: 28709.57414 + tps: 25997.83197 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 30931.26497 - tps: 28096.95553 + dps: 29908.15963 + tps: 27075.35281 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 29618.41869 - tps: 26900.22729 + dps: 28641.57175 + tps: 25917.17539 } } dps_results: { key: "TestSV-AllItems-Deathbringer'sWill-50363" value: { - dps: 30041.78055 - tps: 27253.05784 + dps: 29020.40565 + tps: 26217.0812 } } dps_results: { key: "TestSV-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 30422.41503 - tps: 27540.4602 + dps: 29415.26681 + tps: 26515.57067 } } dps_results: { key: "TestSV-AllItems-DislodgedForeignObject-50348" value: { - dps: 29380.28162 - tps: 26659.41529 + dps: 28395.16782 + tps: 25652.6573 } } dps_results: { key: "TestSV-AllItems-Dragonwrath,Tarecgosa'sRest-71086" value: { - dps: 31445.8873 - tps: 28520.26899 + dps: 30365.11524 + tps: 27438.7442 } } dps_results: { key: "TestSV-AllItems-Dwyer'sCaber-70141" value: { - dps: 29790.68362 - tps: 27026.97523 + dps: 28772.80458 + tps: 26005.40423 } } dps_results: { key: "TestSV-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-EmberShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 30422.41503 - tps: 27540.4602 + dps: 29415.26681 + tps: 26515.57067 } } dps_results: { key: "TestSV-AllItems-EssenceoftheCyclone-59473" value: { - dps: 31004.14077 - tps: 28119.75295 + dps: 29978.65625 + tps: 27084.5377 } } dps_results: { key: "TestSV-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 29678.80034 - tps: 26960.74311 + dps: 28697.83781 + tps: 25973.02179 } } dps_results: { key: "TestSV-AllItems-EternalShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77200" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77977" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-EyeofUnmaking-77997" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-FallofMortality-59500" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-FallofMortality-65124" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-FieryQuintessence-69000" value: { - dps: 29274.86108 - tps: 26557.47601 + dps: 28318.00484 + tps: 25595.66057 } } dps_results: { key: "TestSV-AllItems-Figurine-DemonPanther-52199" value: { - dps: 30423.9358 - tps: 27608.28962 + dps: 29413.73412 + tps: 26588.21254 } } dps_results: { key: "TestSV-AllItems-Figurine-DreamOwl-52354" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Figurine-KingofBoars-52351" value: { - dps: 29574.43031 - tps: 26856.5517 + dps: 28597.39879 + tps: 25872.76129 } } dps_results: { key: "TestSV-AllItems-FireoftheDeep-77117" value: { - dps: 29758.67536 - tps: 27040.48142 + dps: 28774.70441 + tps: 26049.75177 } } dps_results: { @@ -634,57 +634,57 @@ dps_results: { dps_results: { key: "TestSV-AllItems-FleetShadowspiritDiamond" value: { - dps: 30400.85265 - tps: 27525.45194 + dps: 29417.33007 + tps: 26523.45973 } } dps_results: { key: "TestSV-AllItems-FluidDeath-58181" value: { - dps: 30717.14436 - tps: 27862.80998 + dps: 29710.62469 + tps: 26841.24587 } } dps_results: { key: "TestSV-AllItems-ForlornShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 29679.00809 - tps: 26961.03449 + dps: 28704.9107 + tps: 25980.1779 } } dps_results: { key: "TestSV-AllItems-FuryofAngerforge-59461" value: { - dps: 29688.86932 - tps: 26941.85166 + dps: 28702.3661 + tps: 25939.89014 } } dps_results: { key: "TestSV-AllItems-GaleofShadows-56138" value: { - dps: 29492.3533 - tps: 26773.72271 + dps: 28584.54849 + tps: 25836.86087 } } dps_results: { key: "TestSV-AllItems-GaleofShadows-56462" value: { - dps: 29536.3307 - tps: 26791.301 + dps: 28581.80224 + tps: 25838.76645 } } dps_results: { key: "TestSV-AllItems-GearDetector-61462" value: { - dps: 30175.93643 - tps: 27382.97355 + dps: 29101.22617 + tps: 26298.05634 } } dps_results: { @@ -697,1462 +697,1462 @@ dps_results: { dps_results: { key: "TestSV-AllItems-GlowingTwilightScale-54589" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-GraceoftheHerald-55266" value: { - dps: 30190.14689 - tps: 27386.59892 + dps: 29165.98924 + tps: 26347.32033 } } dps_results: { key: "TestSV-AllItems-GraceoftheHerald-56295" value: { - dps: 30619.63674 - tps: 27775.13573 + dps: 29619.87604 + tps: 26753.02205 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-77191" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-78478" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-AllItems-Gurthalak,VoiceoftheDeeps-78487" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-AllItems-HarmlightToken-63839" value: { - dps: 29278.27154 - tps: 26560.93611 + dps: 28313.04931 + tps: 25589.05086 } } dps_results: { key: "TestSV-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 29285.32762 - tps: 26567.96849 + dps: 28319.22873 + tps: 25595.1104 } } dps_results: { key: "TestSV-AllItems-HeartofIgnacious-59514" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartofIgnacious-65110" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartofRage-59224" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartofRage-65072" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartofSolace-55868" value: { - dps: 29492.3533 - tps: 26773.72271 + dps: 28584.54849 + tps: 25836.86087 } } dps_results: { key: "TestSV-AllItems-HeartofSolace-56393" value: { - dps: 29536.3307 - tps: 26791.301 + dps: 28581.80224 + tps: 25838.76645 } } dps_results: { key: "TestSV-AllItems-HeartofThunder-55845" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartofThunder-56370" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-HeartoftheVile-66969" value: { - dps: 30303.02896 - tps: 27489.48029 + dps: 29312.51228 + tps: 26480.92632 } } dps_results: { key: "TestSV-AllItems-Heartpierce-50641" value: { - dps: 31379.75039 - tps: 28464.16888 + dps: 30346.72189 + tps: 27412.87496 } } dps_results: { key: "TestSV-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 30422.41503 - tps: 27540.4602 + dps: 29415.26681 + tps: 26515.57067 } } dps_results: { key: "TestSV-AllItems-ImpatienceofYouth-62464" value: { - dps: 29612.77032 - tps: 26894.8261 + dps: 28634.29476 + tps: 25909.59168 } } dps_results: { key: "TestSV-AllItems-ImpatienceofYouth-62469" value: { - dps: 29612.77032 - tps: 26894.8261 + dps: 28634.29476 + tps: 25909.59168 } } dps_results: { key: "TestSV-AllItems-ImpetuousQuery-55881" value: { - dps: 29539.2853 - tps: 26821.46684 + dps: 28563.57749 + tps: 25839.0001 } } dps_results: { key: "TestSV-AllItems-ImpetuousQuery-56406" value: { - dps: 29574.43031 - tps: 26856.5517 + dps: 28597.39879 + tps: 25872.76129 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-77211" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-77983" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-IndomitablePride-78003" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 29873.43495 - tps: 27077.47997 + dps: 28871.86909 + tps: 26069.67759 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 29707.35886 - tps: 26925.2855 + dps: 28816.97919 + tps: 26015.38613 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 29944.41829 - tps: 27156.58056 + dps: 28906.58349 + tps: 26092.18077 } } dps_results: { key: "TestSV-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 29478.58702 - tps: 26760.92283 + dps: 28499.15307 + tps: 25775.73797 } } dps_results: { key: "TestSV-AllItems-JarofAncientRemedies-59354" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-JarofAncientRemedies-65029" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-JawsofDefeat-68926" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-JawsofDefeat-69111" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-JujuofNimbleness-63840" value: { - dps: 30219.86513 - tps: 27439.85662 + dps: 29224.08843 + tps: 26430.43225 } } dps_results: { key: "TestSV-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 30352.02405 - tps: 27521.97066 + dps: 29350.06628 + tps: 26508.80906 } } dps_results: { key: "TestSV-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 30677.52457 - tps: 27823.45957 + dps: 29703.36788 + tps: 26833.15525 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-77194" value: { - dps: 34357.01742 - tps: 31139.62569 + dps: 33241.10979 + tps: 30007.01631 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-78473" value: { - dps: 34860.88879 - tps: 31597.90331 + dps: 33666.37148 + tps: 30392.07299 } } dps_results: { key: "TestSV-AllItems-Kiril,FuryofBeasts-78482" value: { - dps: 34012.19242 - tps: 30830.96664 + dps: 32870.75649 + tps: 29670.59109 } } dps_results: { key: "TestSV-AllItems-KiroptyricSigil-77113" value: { - dps: 31286.65447 - tps: 28356.93016 + dps: 30480.12786 + tps: 27555.30988 } } dps_results: { key: "TestSV-AllItems-KvaldirBattleStandard-59685" value: { - dps: 29380.46716 - tps: 26657.61394 + dps: 28436.38743 + tps: 25699.37024 } } dps_results: { key: "TestSV-AllItems-KvaldirBattleStandard-59689" value: { - dps: 29380.46716 - tps: 26657.61394 + dps: 28436.38743 + tps: 25699.37024 } } dps_results: { key: "TestSV-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 29410.99153 - tps: 26693.04461 + dps: 28459.58999 + tps: 25727.69956 } } dps_results: { key: "TestSV-AllItems-LastWord-50708" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-AllItems-LeadenDespair-55816" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-LeadenDespair-56347" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-LeftEyeofRajh-56102" value: { - dps: 30462.18961 - tps: 27635.48787 + dps: 29457.9312 + tps: 26620.01272 } } dps_results: { key: "TestSV-AllItems-LeftEyeofRajh-56427" value: { - dps: 30630.58187 - tps: 27789.16081 + dps: 29627.8641 + tps: 26773.95068 } } dps_results: { key: "TestSV-AllItems-LicensetoSlay-58180" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Lightning-ChargedBattlegear" value: { - dps: 28429.18648 - tps: 25756.14158 + dps: 27514.02006 + tps: 24843.79048 } } dps_results: { key: "TestSV-AllItems-MagnetiteMirror-55814" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-MagnetiteMirror-56345" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-MarkofKhardros-56132" value: { - dps: 29489.19341 - tps: 26771.88283 + dps: 28510.82908 + tps: 25787.76737 } } dps_results: { key: "TestSV-AllItems-MarkofKhardros-56458" value: { - dps: 29517.64386 - tps: 26800.33327 + dps: 28538.38969 + tps: 25815.32798 } } dps_results: { key: "TestSV-AllItems-MatrixRestabilizer-68994" value: { - dps: 31534.90005 - tps: 28600.21384 + dps: 30509.6427 + tps: 27559.37757 } } dps_results: { key: "TestSV-AllItems-MatrixRestabilizer-69150" value: { - dps: 31869.57547 - tps: 28905.16216 + dps: 30818.85674 + tps: 27830.35759 } } dps_results: { key: "TestSV-AllItems-MightoftheOcean-55251" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-MightoftheOcean-56285" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-MirrorofBrokenImages-62466" value: { - dps: 29612.77032 - tps: 26894.8261 + dps: 28634.29476 + tps: 25909.59168 } } dps_results: { key: "TestSV-AllItems-MirrorofBrokenImages-62471" value: { - dps: 29612.77032 - tps: 26894.8261 + dps: 28634.29476 + tps: 25909.59168 } } dps_results: { key: "TestSV-AllItems-MithrilStopwatch-232013" value: { - dps: 29666.50026 - tps: 26921.2346 + dps: 28683.89677 + tps: 25922.89598 } } dps_results: { key: "TestSV-AllItems-MoonwellChalice-70142" value: { - dps: 29612.54682 - tps: 26895.18768 + dps: 28636.92118 + tps: 25912.80285 } } dps_results: { key: "TestSV-AllItems-MoonwellPhial-70143" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-NecromanticFocus-68982" value: { - dps: 29304.84898 - tps: 26587.48984 + dps: 28338.40716 + tps: 25614.28883 } } dps_results: { key: "TestSV-AllItems-NecromanticFocus-69139" value: { - dps: 29309.20074 - tps: 26591.84161 + dps: 28342.65093 + tps: 25618.5326 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 32074.27933 - tps: 29090.81124 + dps: 31003.6762 + tps: 28004.56195 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 32186.14582 - tps: 29190.94086 + dps: 31115.18514 + tps: 28104.70029 } } dps_results: { key: "TestSV-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 31963.48904 - tps: 28990.94773 + dps: 30906.238 + tps: 27916.98643 } } dps_results: { key: "TestSV-AllItems-Oremantle'sFavor-61448" value: { - dps: 29526.22856 - tps: 26793.61305 + dps: 28540.12061 + tps: 25798.25506 } } dps_results: { key: "TestSV-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 29490.40596 - tps: 26757.38598 + dps: 28523.1142 + tps: 25774.3438 } } dps_results: { key: "TestSV-AllItems-PorcelainCrab-55237" value: { - dps: 29275.82812 - tps: 26558.46898 + dps: 28310.61276 + tps: 25586.49443 } } dps_results: { key: "TestSV-AllItems-PorcelainCrab-56280" value: { - dps: 29278.71214 - tps: 26561.35301 + dps: 28312.96319 + tps: 25588.84485 } } dps_results: { key: "TestSV-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 30341.39417 - tps: 27466.09572 + dps: 29360.04017 + tps: 26466.27203 } } dps_results: { key: "TestSV-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 30793.93697 - tps: 27924.65138 + dps: 29876.51293 + tps: 27017.5045 } } dps_results: { key: "TestSV-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 31032.10538 - tps: 28151.70667 + dps: 30163.63026 + tps: 27263.29629 } } dps_results: { key: "TestSV-AllItems-Rainsong-55854" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Rainsong-56377" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 28684.34446 - tps: 26025.83574 + dps: 27769.88327 + tps: 25103.09391 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 28687.52198 - tps: 26029.01326 + dps: 27773.0122 + tps: 25106.22284 } } dps_results: { key: "TestSV-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 28678.19746 - tps: 26019.68874 + dps: 27763.75617 + tps: 25096.96681 } } dps_results: { key: "TestSV-AllItems-ReflectionoftheLight-77115" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77201" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77978" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ResolveofUndying-77998" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 30957.31926 - tps: 28080.62411 + dps: 29959.78982 + tps: 27064.62497 } } dps_results: { key: "TestSV-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 30957.31926 - tps: 28080.62411 + dps: 29959.78982 + tps: 27064.62497 } } dps_results: { key: "TestSV-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 31016.0082 - tps: 28145.33819 + dps: 30001.47059 + tps: 27109.55671 } } dps_results: { key: "TestSV-AllItems-RightEyeofRajh-56100" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RightEyeofRajh-56431" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RosaryofLight-72901" value: { - dps: 29842.30191 - tps: 27077.96594 + dps: 28848.04276 + tps: 26070.81448 } } dps_results: { key: "TestSV-AllItems-RottingSkull-77116" value: { - dps: 29862.84058 - tps: 27100.6459 + dps: 28860.00479 + tps: 26086.18605 } } dps_results: { key: "TestSV-AllItems-RuneofZeth-68998" value: { - dps: 29764.8374 - tps: 27012.70222 + dps: 28773.75286 + tps: 26006.09244 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 30914.39183 - tps: 28052.58882 + dps: 29876.2856 + tps: 27003.50482 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 31001.79269 - tps: 28131.15953 + dps: 29971.35863 + tps: 27089.78775 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 31002.96325 - tps: 28106.59143 + dps: 30032.418 + tps: 27124.92573 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 31085.94135 - tps: 28183.18907 + dps: 30083.31114 + tps: 27171.53697 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ScalesofLife-68915" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 hps: 315.97258 } } dps_results: { key: "TestSV-AllItems-ScalesofLife-69109" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 hps: 356.41412 } } dps_results: { key: "TestSV-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 30180.54016 - tps: 27377.4775 + dps: 29198.05468 + tps: 26378.84376 } } dps_results: { key: "TestSV-AllItems-SeaStar-55256" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-SeaStar-56290" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Shadowmourne-49623" value: { - dps: 31372.72937 - tps: 28459.42369 + dps: 30424.72738 + tps: 27516.72194 } } dps_results: { key: "TestSV-AllItems-ShardofWoe-60233" value: { - dps: 29552.12685 - tps: 26804.60548 + dps: 28688.47962 + tps: 25936.67983 } } dps_results: { key: "TestSV-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 29319.43655 - tps: 26595.34438 + dps: 28402.11479 + tps: 25675.11705 } } dps_results: { key: "TestSV-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Skardyn'sGrace-56115" value: { - dps: 30501.56423 - tps: 27691.96897 + dps: 29505.01712 + tps: 26679.40023 } } dps_results: { key: "TestSV-AllItems-Skardyn'sGrace-56440" value: { - dps: 30666.15471 - tps: 27843.85966 + dps: 29663.86275 + tps: 26826.56035 } } dps_results: { key: "TestSV-AllItems-Sorrowsong-55879" value: { - dps: 29539.2853 - tps: 26821.46684 + dps: 28563.57749 + tps: 25839.0001 } } dps_results: { key: "TestSV-AllItems-Sorrowsong-56400" value: { - dps: 29574.43031 - tps: 26856.5517 + dps: 28597.39879 + tps: 25872.76129 } } dps_results: { key: "TestSV-AllItems-Soul'sAnguish-66994" value: { - dps: 29271.93544 - tps: 26554.62486 + dps: 28300.36622 + tps: 25577.30451 } } dps_results: { key: "TestSV-AllItems-SoulCasket-58183" value: { - dps: 29612.77032 - tps: 26894.8261 + dps: 28634.29476 + tps: 25909.59168 } } dps_results: { key: "TestSV-AllItems-Souldrinker-77193" value: { - dps: 31179.99017 - tps: 28282.39932 - hps: 9.36496 + dps: 30158.8669 + tps: 27242.29882 + hps: 9.33435 } } dps_results: { key: "TestSV-AllItems-Souldrinker-78479" value: { - dps: 31180.63919 - tps: 28283.04834 - hps: 10.663 + dps: 30159.5138 + tps: 27242.94572 + hps: 10.62815 } } dps_results: { key: "TestSV-AllItems-Souldrinker-78488" value: { - dps: 31179.34876 - tps: 28281.75791 - hps: 8.08213 + dps: 30158.22758 + tps: 27241.6595 + hps: 8.05572 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77206" value: { - dps: 30007.55497 - tps: 27287.22856 + dps: 29029.74133 + tps: 26302.65572 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77970" value: { - dps: 29908.49784 - tps: 27189.08435 + dps: 28936.82273 + tps: 26210.66154 } } dps_results: { key: "TestSV-AllItems-SoulshifterVortex-77990" value: { - dps: 30072.28 - tps: 27352.44029 + dps: 29117.57679 + tps: 26390.97788 } } dps_results: { key: "TestSV-AllItems-SpidersilkSpindle-68981" value: { - dps: 29678.80034 - tps: 26960.74311 + dps: 28697.83781 + tps: 25973.02179 } } dps_results: { key: "TestSV-AllItems-SpidersilkSpindle-69138" value: { - dps: 29732.05035 - tps: 27013.90198 + dps: 28749.08221 + tps: 26024.17511 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77202" value: { - dps: 31616.48313 - tps: 28642.43429 + dps: 30561.80358 + tps: 27572.69261 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77973" value: { - dps: 31267.40842 - tps: 28300.1293 + dps: 30410.61364 + tps: 27473.29818 } } dps_results: { key: "TestSV-AllItems-StarcatcherCompass-77993" value: { - dps: 31809.93374 - tps: 28805.2962 + dps: 30831.63599 + tps: 27816.16829 } } dps_results: { key: "TestSV-AllItems-StayofExecution-68996" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Stonemother'sKiss-61411" value: { - dps: 29275.63846 - tps: 26557.23771 + dps: 28309.99263 + tps: 25585.09162 } } dps_results: { key: "TestSV-AllItems-StumpofTime-62465" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-StumpofTime-62470" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-SymbioticWorm-59332" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-SymbioticWorm-65048" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 29343.22386 - tps: 26625.65768 + dps: 28375.93424 + tps: 25651.60887 } } dps_results: { key: "TestSV-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 29331.85756 - tps: 26617.69536 + dps: 28331.9611 + tps: 25606.87903 } } dps_results: { key: "TestSV-AllItems-TearofBlood-55819" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-TearofBlood-56351" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 29499.88029 - tps: 26782.12927 + dps: 28525.65663 + tps: 25801.14665 } } dps_results: { key: "TestSV-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 29574.43031 - tps: 26856.5517 + dps: 28597.39879 + tps: 25872.76129 } } dps_results: { key: "TestSV-AllItems-TheHungerer-68927" value: { - dps: 31145.84666 - tps: 28247.32341 + dps: 30189.59537 + tps: 27278.59601 } } dps_results: { key: "TestSV-AllItems-TheHungerer-69112" value: { - dps: 31374.47783 - tps: 28439.17042 + dps: 30352.00078 + tps: 27408.44834 } } dps_results: { key: "TestSV-AllItems-Theralion'sMirror-59519" value: { - dps: 29280.66537 - tps: 26563.30624 + dps: 28315.31988 + tps: 25591.20155 } } dps_results: { key: "TestSV-AllItems-Theralion'sMirror-65105" value: { - dps: 29314.62967 - tps: 26596.69088 + dps: 28351.67423 + tps: 25626.96887 } } dps_results: { key: "TestSV-AllItems-Throngus'sFinger-56121" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Throngus'sFinger-56449" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 31208.30732 - tps: 28301.45491 + dps: 30154.33716 + tps: 27231.70781 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 31191.83587 - tps: 28306.73645 + dps: 30215.83992 + tps: 27312.71506 } } dps_results: { key: "TestSV-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 31137.77699 - tps: 28234.93874 + dps: 30204.15298 + tps: 27281.14733 } } dps_results: { key: "TestSV-AllItems-Tia'sGrace-55874" value: { - dps: 30686.51529 - tps: 27860.83358 + dps: 29679.22952 + tps: 26838.52456 } } dps_results: { key: "TestSV-AllItems-Tia'sGrace-56394" value: { - dps: 30874.67503 - tps: 28034.62297 + dps: 29867.47866 + tps: 27011.88092 } } dps_results: { key: "TestSV-AllItems-TinyAbominationinaJar-50706" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 28297.79706 - tps: 25678.50049 + dps: 27362.53441 + tps: 24745.98737 } } dps_results: { key: "TestSV-AllItems-UnheededWarning-59520" value: { - dps: 30533.7782 - tps: 27695.46498 + dps: 29539.9085 + tps: 26685.93632 } } dps_results: { key: "TestSV-AllItems-UnquenchableFlame-67101" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-62463" value: { - dps: 30928.39071 - tps: 28097.67745 + dps: 29898.34725 + tps: 27058.24358 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-62468" value: { - dps: 30928.39071 - tps: 28097.67745 + dps: 29898.34725 + tps: 27058.24358 } } dps_results: { key: "TestSV-AllItems-UnsolvableRiddle-68709" value: { - dps: 30928.39071 - tps: 28097.67745 + dps: 29898.34725 + tps: 27058.24358 } } dps_results: { key: "TestSV-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 28742.59179 - tps: 26078.31537 + dps: 27852.84883 + tps: 25178.52208 } } dps_results: { key: "TestSV-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 30085.1176 - tps: 27367.81075 + dps: 29125.99166 + tps: 26402.17247 } } dps_results: { key: "TestSV-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 30133.31074 - tps: 27415.77731 + dps: 29189.4749 + tps: 26465.56032 } } dps_results: { key: "TestSV-AllItems-Varo'then'sBrooch-72899" value: { - dps: 29763.59679 - tps: 27045.28527 + dps: 28780.89361 + tps: 26055.819 } } dps_results: { key: "TestSV-AllItems-VeilofLies-72900" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-VesselofAcceleration-68995" value: { - dps: 29277.64075 - tps: 26560.28161 + dps: 28312.94732 + tps: 25588.42308 } } dps_results: { key: "TestSV-AllItems-VesselofAcceleration-69167" value: { - dps: 29277.64075 - tps: 26560.28161 + dps: 28312.94732 + tps: 25588.42308 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77207" value: { - dps: 31690.64646 - tps: 28804.45839 + dps: 30564.4296 + tps: 27663.71075 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77979" value: { - dps: 31427.2185 - tps: 28584.07111 + dps: 30331.61925 + tps: 27458.66763 } } dps_results: { key: "TestSV-AllItems-VialofShadows-77999" value: { - dps: 32067.76246 - tps: 29173.33498 + dps: 30860.46032 + tps: 27938.22588 } } dps_results: { key: "TestSV-AllItems-VialofStolenMemories-59515" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-VialofStolenMemories-65109" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 30571.72007 - tps: 27741.59191 + dps: 29554.97879 + tps: 26715.45987 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 30714.51807 - tps: 27871.06238 + dps: 29695.2103 + tps: 26842.44345 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 29625.16894 - tps: 26882.29841 + dps: 28652.09064 + tps: 25907.80435 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 29716.10537 - tps: 26967.37291 + dps: 28722.3443 + tps: 25958.40216 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 29633.00533 - tps: 26915.02647 + dps: 28653.76763 + tps: 25929.02994 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 30607.53825 - tps: 27754.72918 + dps: 29605.37221 + tps: 26743.6151 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 30806.54395 - tps: 27934.2194 + dps: 29778.78956 + tps: 26896.11589 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78359" value: { - dps: 33157.10267 - tps: 30301.06761 + dps: 31961.24572 + tps: 29091.69087 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78471" value: { - dps: 33933.12602 - tps: 31060.0891 + dps: 32769.39804 + tps: 29886.10854 } } dps_results: { key: "TestSV-AllItems-Vishanka,JawsoftheEarth-78480" value: { - dps: 32372.12362 - tps: 29518.47271 + dps: 31245.19457 + tps: 28374.67983 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77198" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77975" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-WillofUnbinding-77995" value: { - dps: 29270.90523 - tps: 26553.5461 + dps: 28305.30571 + tps: 25581.18738 } } dps_results: { key: "TestSV-AllItems-WitchingHourglass-55787" value: { - dps: 29290.14503 - tps: 26577.71339 + dps: 28303.0115 + tps: 25583.31902 } } dps_results: { key: "TestSV-AllItems-WitchingHourglass-56320" value: { - dps: 29251.80187 - tps: 26534.72403 + dps: 28281.35697 + tps: 25564.92651 } } dps_results: { key: "TestSV-AllItems-World-QuellerFocus-63842" value: { - dps: 29504.14029 - tps: 26786.38198 + dps: 28529.75618 + tps: 25805.23891 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77197" value: { - dps: 32664.71216 - tps: 29622.45307 + dps: 31569.02546 + tps: 28510.41345 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77974" value: { - dps: 32271.47452 - tps: 29265.03887 + dps: 31182.44157 + tps: 28159.8395 } } dps_results: { key: "TestSV-AllItems-WrathofUnchaining-77994" value: { - dps: 33100.88761 - tps: 30019.54842 + dps: 31968.81028 + tps: 28867.6497 } } dps_results: { @@ -2165,203 +2165,203 @@ dps_results: { dps_results: { key: "TestSV-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 29460.74296 - tps: 26743.43238 + dps: 28483.26847 + tps: 25760.20675 } } dps_results: { key: "TestSV-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 29460.74296 - tps: 26743.43238 + dps: 28483.26847 + tps: 25760.20675 } } dps_results: { key: "TestSV-AllItems-Zod'sRepeatingLongbow-50638" value: { - dps: 29149.77135 - tps: 26311.13073 + dps: 28103.43244 + tps: 25270.46923 } } dps_results: { key: "TestSV-Average-Default" value: { - dps: 31246.7667 - tps: 28368.69156 + dps: 30232.96594 + tps: 27346.88241 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 141641.83328 - tps: 116558.48667 + dps: 141350.48112 + tps: 114532.75506 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 24635.42825 - tps: 21917.26583 + dps: 23838.18081 + tps: 21134.21672 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 29488.35989 - tps: 25923.76441 + dps: 28606.75417 + tps: 25061.00716 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 101962.838 - tps: 83722.38425 + dps: 101432.61349 + tps: 82041.63252 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 17398.88404 - tps: 15512.33149 + dps: 16908.69529 + tps: 15060.59128 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 18450.67126 - tps: 16277.76236 + dps: 18082.37819 + tps: 15996.81466 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 33601.39278 - tps: 30871.90437 + dps: 32695.80736 + tps: 29931.06022 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 30988.31802 - tps: 28253.52117 + dps: 29950.60203 + tps: 27197.95645 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 36776.97146 - tps: 33374.51955 + dps: 35957.46745 + tps: 32517.93922 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 23644.02525 - tps: 21737.569 + dps: 22889.25171 + tps: 20965.75785 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 21856.21534 - tps: 19956.49111 + dps: 21138.21538 + tps: 19221.97155 } } dps_results: { key: "TestSV-Settings-Dwarf-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 23800.23255 - tps: 21663.73654 + dps: 23133.41368 + tps: 20987.39868 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 142266.54589 - tps: 117072.58171 + dps: 141988.12159 + tps: 115062.45123 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 24917.59768 - tps: 22038.78814 + dps: 24029.05099 + tps: 21177.25416 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 29849.41058 - tps: 26055.60433 + dps: 28992.65963 + tps: 25218.25242 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 102410.65625 - tps: 84093.47427 + dps: 101929.59512 + tps: 82477.88376 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 17498.49906 - tps: 15509.88576 + dps: 17046.36052 + tps: 15078.90179 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-aoe-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 18759.92289 - tps: 16441.91668 + dps: 18390.66544 + tps: 16166.60864 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongMultiTarget" value: { - dps: 33922.27687 - tps: 31030.85111 + dps: 33031.54048 + tps: 30102.03081 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-LongSingleTarget" value: { - dps: 31175.30769 - tps: 28277.71684 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-FullBuffs-5.1yards-ShortSingleTarget" value: { - dps: 37239.94428 - tps: 33618.43366 + dps: 36434.92152 + tps: 32771.89303 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongMultiTarget" value: { - dps: 23879.93567 - tps: 21858.5214 + dps: 23119.03409 + tps: 21079.14836 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-LongSingleTarget" value: { - dps: 22007.69819 - tps: 19993.2197 + dps: 21276.27813 + tps: 19244.58352 } } dps_results: { key: "TestSV-Settings-Orc-preraid_sv-Basic-sv-NoBuffs-5.1yards-ShortSingleTarget" value: { - dps: 24155.10049 - tps: 21877.77581 + dps: 23447.13315 + tps: 21159.45718 } } dps_results: { key: "TestSV-SwitchInFrontOfTarget-Default" value: { - dps: 30960.94883 - tps: 28102.41235 + dps: 29931.75319 + tps: 27041.70689 } } From 2007ec704366640424b581c4c3038c4abbd7ecbe Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 17:31:15 +0100 Subject: [PATCH 067/127] Add SpellMod type Custom --- sim/core/spell_mod.go | 42 +++++++++++++---- sim/death_knight/items.go | 24 +++------- sim/druid/items.go | 55 ++++++++-------------- sim/paladin/guardian_of_ancient_kings.go | 12 +++-- sim/paladin/items.go | 60 ++++++++---------------- sim/shaman/items.go | 43 +++++++---------- 6 files changed, 102 insertions(+), 134 deletions(-) diff --git a/sim/core/spell_mod.go b/sim/core/spell_mod.go index eec5a1414d..5df39d1878 100644 --- a/sim/core/spell_mod.go +++ b/sim/core/spell_mod.go @@ -10,13 +10,15 @@ SpellMod implementation. */ type SpellModConfig struct { - ClassMask int64 - Kind SpellModType - School SpellSchool - ProcMask ProcMask - IntValue int64 - TimeValue time.Duration - FloatValue float64 + ClassMask int64 + Kind SpellModType + School SpellSchool + ProcMask ProcMask + IntValue int64 + TimeValue time.Duration + FloatValue float64 + ApplyCustom SpellModApply + RemoveCustom SpellModRemove } type SpellMod struct { @@ -46,6 +48,20 @@ func buildMod(unit *Unit, config SpellModConfig) *SpellMod { panic("SpellMod " + strconv.Itoa(int(config.Kind)) + " not implmented") } + var applyFn SpellModApply + if config.ApplyCustom != nil { + applyFn = config.ApplyCustom + } else { + applyFn = functions.Apply + } + + var removeFn SpellModRemove + if config.RemoveCustom != nil { + removeFn = config.RemoveCustom + } else { + removeFn = functions.Remove + } + mod := &SpellMod{ ClassMask: config.ClassMask, Kind: config.Kind, @@ -54,8 +70,8 @@ func buildMod(unit *Unit, config SpellModConfig) *SpellMod { floatValue: config.FloatValue, intValue: config.IntValue, timeValue: config.TimeValue, - Apply: functions.Apply, - Remove: functions.Remove, + Apply: applyFn, + Remove: removeFn, IsActive: false, } @@ -245,6 +261,10 @@ const ( // Add/subtract bonus expertise rating // Uses: FloatValue SpellMod_BonusExpertise_Rating + + // Add/subtract bonus expertise rating + // Uses: ApplyCustom | RemoveCustom + SpellMod_Custom ) var spellModMap = map[SpellModType]*SpellModFunctions{ @@ -341,6 +361,10 @@ var spellModMap = map[SpellModType]*SpellModFunctions{ Apply: applyBonusExpertiseRating, Remove: removeBonusExpertiseRating, }, + + SpellMod_Custom: { + // Doesn't have dedicated Apply/Remove functions as ApplyCustom/RemoveCustom is handled in buildMod() + }, } func applyDamageDonePercent(mod *SpellMod, spell *Spell) { diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index bca7138a60..e78ee8c80d 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -77,26 +77,16 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ // Increases the duration of your Icebound Fortitude ability by 50%. // Implemented in icebound_fortitude.go dk := agent.(DeathKnightAgent).GetDeathKnight() - dk.OnSpellRegistered(func(spell *core.Spell) { - if !spell.Matches(DeathKnightSpellIceboundFortitude) { - return - } - onEquip := func() { + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: DeathKnightSpellIceboundFortitude, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second - } - - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { - onEquip() - }) - - setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() - }) - - if setBonusAura.IsActive() { - onEquip() - } + }, }) }, }, diff --git a/sim/druid/items.go b/sim/druid/items.go index cbad5b7953..415ff10bce 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -197,43 +197,26 @@ var ItemSetObsidianArborweaveRegalia = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() - druid.OnSpellRegistered(func(spell *core.Spell) { - if spell.Matches(DruidSpellWrath) { - onEquip := func() { - druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) - } - - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { - onEquip() - }) - - setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { - druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) - }) - - if setBonusAura.IsActive() { - onEquip() - } - - } - - if spell.Matches(DruidSpellStarfire) { - onEquip := func() { - druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) - } - - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { - onEquip() - }) - - setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { - druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) - }) + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: DruidSpellWrath, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, Wrath4PT12EnergyGain) + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + druid.SetSpellEclipseEnergy(DruidSpellWrath, WrathBaseEnergyGain, WrathBaseEnergyGain) + }, + }) - if setBonusAura.IsActive() { - onEquip() - } - } + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: DruidSpellStarfire, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, Starfire4PT12EnergyGain) + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + druid.SetSpellEclipseEnergy(DruidSpellStarfire, StarfireBaseEnergyGain, StarfireBaseEnergyGain) + }, }) setBonusAura.ExposeToAPL(99049) diff --git a/sim/paladin/guardian_of_ancient_kings.go b/sim/paladin/guardian_of_ancient_kings.go index b99793c31a..c940b44472 100644 --- a/sim/paladin/guardian_of_ancient_kings.go +++ b/sim/paladin/guardian_of_ancient_kings.go @@ -8,14 +8,16 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -func (paladin *Paladin) registerGuardianOfAncientKings() { - - var duration time.Duration +func (paladin *Paladin) goakBaseDuration() time.Duration { if paladin.Spec == proto.Spec_SpecProtectionPaladin { - duration = time.Second * 12 + return time.Second * 12 } else { - duration = time.Second * 30 + return time.Second * 30 } +} + +func (paladin *Paladin) registerGuardianOfAncientKings() { + duration := paladin.goakBaseDuration() var spell *core.Spell switch paladin.Spec { diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 6e0f841b64..4d044e0e7d 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -68,25 +68,15 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ // Handled in talents_retribution.go paladin := agent.(PaladinAgent).GetPaladin() - paladin.OnSpellRegistered(func(spell *core.Spell) { - if !spell.Matches(SpellMaskZealotry) { - return - } - - onEquip := func() { + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: SpellMaskZealotry, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { paladin.ZealotryAura.Duration += time.Second * 15 - } - - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - onEquip() - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { paladin.ZealotryAura.Duration -= time.Second * 15 - }) - - if setBonusAura.IsActive() { - onEquip() - } + }, }) setBonusAura.ExposeToAPL(99116) @@ -215,40 +205,30 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() - paladin.OnSpellRegistered(func(spell *core.Spell) { - if !spell.Matches(SpellMaskGuardianOfAncientKings) { - return - } - - goakBaseDuration := paladin.GoakAura.Duration - acientPowerBaseDuration := paladin.GoakAura.Duration + goakBaseDuration := paladin.goakBaseDuration() + acientPowerBaseDuration := paladin.goakBaseDuration() - applyT11Prot4pcBonus := func(duration time.Duration) time.Duration { - return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) - } + applyT11Prot4pcBonus := func(duration time.Duration) time.Duration { + return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) + } - onEquip := func() { + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: SpellMaskGuardianOfAncientKings, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { if paladin.AncientPowerAura != nil { paladin.AncientPowerAura.Duration = applyT11Prot4pcBonus(acientPowerBaseDuration) } paladin.GoakAura.Duration = applyT11Prot4pcBonus(goakBaseDuration) - } - - setBonusAura.ApplyOnGain(func(_ *core.Aura, sim *core.Simulation) { - onEquip() - }) - - setBonusAura.ApplyOnExpire(func(_ *core.Aura, sim *core.Simulation) { + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { if paladin.AncientPowerAura != nil { paladin.AncientPowerAura.Duration = acientPowerBaseDuration } paladin.GoakAura.Duration = goakBaseDuration - }) - - if setBonusAura.IsActive() { - onEquip() - } + }, }) + }, }, }) diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 87f914c537..cd80c5b89f 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -257,36 +257,25 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ }, }) - shaman.OnSpellRegistered(func(spell *core.Spell) { - if !spell.Matches(SpellMaskSpiritwalkersGrace) { - return - } - - setBonusAura.AttachProcTrigger(core.ProcTrigger{ - Name: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace) - Proc", - ActionID: core.ActionID{SpellID: 105876}, - ClassSpellMask: SpellMaskSpiritwalkersGrace, - Callback: core.CallbackOnApplyEffects, - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - aura.Activate(sim) - }, - }) + setBonusAura.AttachProcTrigger(core.ProcTrigger{ + Name: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace) - Proc", + ActionID: core.ActionID{SpellID: 105876}, + ClassSpellMask: SpellMaskSpiritwalkersGrace, + Callback: core.CallbackOnApplyEffects, + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + aura.Activate(sim) + }, + }) - onEquip := func() { + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: SpellMaskSpiritwalkersGrace, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second - } - - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - onEquip() - }) - - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() - }) - - if setBonusAura.IsActive() { - onEquip() - } + }, }) }, From 3979f1cd6751ef9f839d22b0e81234958dad2804 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 17:31:42 +0100 Subject: [PATCH 068/127] Rename ItemSwap PPM Effects --- sim/common/cata/enchant_effects.go | 8 ++++---- sim/common/shared/shared_utils.go | 4 ++-- sim/common/tbc/enchant_effects.go | 8 ++++---- sim/common/wotlk/enchant_effects.go | 8 ++++---- sim/core/item_swaps.go | 4 ++-- sim/death_knight/runeforging.go | 4 ++-- sim/shaman/weapon_imbues.go | 2 +- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 19d38e5132..bc2a09d39a 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -116,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4067, ppm, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(4067, ppm, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -153,7 +153,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4074, ppm, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(4074, ppm, aura.Ppmm, aura, shared.WeaponSlots) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -238,7 +238,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEffect(4083, ppm, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(4083, ppm, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -319,7 +319,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(4099, ppm, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(4099, ppm, aura.Ppmm, aura, shared.WeaponSlots) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 980e46b33f..1728f69f4e 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -205,7 +205,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c if isEnchant { if config.PPM != 0 { - character.ItemSwap.RegisterPPMEffect(effectID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + character.ItemSwap.RegisterPPMEnchantEffect(effectID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) } else { character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) } @@ -550,7 +550,7 @@ func NewProcDamageEffect(config ProcDamageEffect) { triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) if config.Trigger.PPM != 0 { - character.ItemSwap.RegisterPPMWeaponEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) + character.ItemSwap.RegisterPPMItemEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) } else { character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index c09cffa9a7..b7ed8f12d1 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -91,7 +91,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(1900, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(1900, 1.0, &ppmm, aura, shared.WeaponSlots) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -131,7 +131,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(2673, 0.73, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(2673, 0.73, &ppmm, aura, shared.WeaponSlots) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -174,7 +174,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3225, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3225, 1.0, &ppmm, aura, shared.WeaponSlots) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -217,7 +217,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3273, 2.15, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3273, 2.15, &ppmm, aura, shared.WeaponSlots) } core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 8f7eceef94..ed6fcd415e 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -54,7 +54,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3251, 4.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3251, 4.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -95,7 +95,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3239, 4.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3239, 4.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -183,7 +183,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3789, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3789, 1.0, &ppmm, aura, shared.WeaponSlots) }) // TODO: These are stand-in values without any real reference. @@ -212,7 +212,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3241, 3.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3241, 3.0, &ppmm, aura, shared.WeaponSlots) }) // Enchant: 3790, Spell: 59630 - Black Magic diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 0e7fce96d9..8f74dfe0a6 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -91,7 +91,7 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } // Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterPPMEnchantEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { swap.registerPPMInternal(ItemSwapPPMConfig{ EnchantId: effectID, PPM: ppm, @@ -102,7 +102,7 @@ func (swap *ItemSwap) RegisterPPMEffect(effectID int32, ppm float64, ppmm *PPMMa } // Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMWeaponEffect(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterPPMItemEffect(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { swap.registerPPMInternal(ItemSwapPPMConfig{ EffectID: itemID, PPM: ppm, diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index c97e4d274b..9cfcadf08e 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -101,7 +101,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3368, 2.0, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3368, 2.0, aura.Ppmm, aura, shared.WeaponSlots) }) // Rune of Cinderglacier @@ -164,7 +164,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEffect(3369, 1.0, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterPPMEnchantEffect(3369, 1.0, aura.Ppmm, aura, shared.WeaponSlots) }) // Rune of Razorice diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 0d05cc0fcf..e3bc849342 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -313,7 +313,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterPPMEffect(2, 9.0, &ppmm, aura, shared.WeaponSlots) + shaman.ItemSwap.RegisterPPMEnchantEffect(2, 9.0, &ppmm, aura, shared.WeaponSlots) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { From 85e0133c8aabd8fab719c37b1ea24e750a58036f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 17:35:42 +0100 Subject: [PATCH 069/127] Remove redundant extra cast conditions --- sim/druid/items.go | 3 --- sim/paladin/items.go | 3 --- sim/warrior/items.go | 3 --- 3 files changed, 9 deletions(-) diff --git a/sim/druid/items.go b/sim/druid/items.go index 415ff10bce..f27914ca98 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -131,9 +131,6 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: DruidSpellMangle | DruidSpellMaul | DruidSpellShred, Outcome: core.OutcomeLanded, - ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { - return setBonusAura.IsActive() - }, }, DamageCalculator: func(result *core.SpellResult) float64 { diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 4d044e0e7d..725a572ad2 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -54,9 +54,6 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskCrusaderStrike, Outcome: core.OutcomeLanded, - ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { - return setBonusAura.IsActive() - }, }, DamageCalculator: func(result *core.SpellResult) float64 { diff --git a/sim/warrior/items.go b/sim/warrior/items.go index 4a259e8e55..23b19dd17e 100644 --- a/sim/warrior/items.go +++ b/sim/warrior/items.go @@ -184,9 +184,6 @@ var ItemSetMoltenGiantBattleplate = core.NewItemSet(core.ItemSet{ Callback: core.CallbackOnSpellHitDealt, ClassSpellMask: SpellMaskShieldSlam, Outcome: core.OutcomeLanded, - ExtraCondition: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) bool { - return setBonusAura.IsActive() - }, }, DamageCalculator: func(result *core.SpellResult) float64 { From 1d9eae4a5d691abdc1400b8dd7f2ddaaf97a27df Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 6 Jan 2025 17:38:02 +0100 Subject: [PATCH 070/127] Add stop ranged until --- sim/core/item_swaps.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 8f74dfe0a6..447f349735 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -366,7 +366,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap character := swap.character - meleeWeaponSwapped := false + weaponSlotSwapped := false newStats := stats.Stats{} has2H := swap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 @@ -383,7 +383,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap if ok, swapStats := swap.swapItem(slot, has2H, isReset); ok { newStats = newStats.Add(swapStats) - meleeWeaponSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || meleeWeaponSwapped + weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped for _, onSwap := range swap.onSwapCallbacks[slot] { onSwap(sim, slot) @@ -397,8 +397,13 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap character.AddStatsDynamic(sim, newStats) if !isPrepull && !isReset { - if character.AutoAttacks.AutoSwingMelee && meleeWeaponSwapped { - character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) + if weaponSlotSwapped { + if character.AutoAttacks.AutoSwingMelee { + character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) + } + if character.AutoAttacks.AutoSwingRanged { + character.AutoAttacks.StopRangedUntil(sim, sim.CurrentTime) + } } character.ExtendGCDUntil(sim, max(character.NextGCDAt(), sim.CurrentTime+GCDDefault)) From 6f2105a8d1566f2c15be8fac48d4d1d8bc99db7c Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Mon, 6 Jan 2025 22:45:45 -0800 Subject: [PATCH 071/127] Keep Energy and Focus tick randomized during reset actions. On branch feature/add-trinket-swapping Changes to be committed: modified: sim/core/energy.go modified: sim/core/focus.go modified: sim/death_knight/unholy/TestUnholy.results modified: sim/hunter/beast_mastery/TestBM.results modified: sim/rogue/combat/TestCombat.results modified: sim/rogue/subtlety/TestSubtlety.results --- sim/core/energy.go | 23 +- sim/core/focus.go | 8 + sim/death_knight/unholy/TestUnholy.results | 8 +- sim/hunter/beast_mastery/TestBM.results | 24 +- sim/rogue/combat/TestCombat.results | 1584 +++++++++--------- sim/rogue/subtlety/TestSubtlety.results | 1742 ++++++++++---------- 6 files changed, 1709 insertions(+), 1680 deletions(-) diff --git a/sim/core/energy.go b/sim/core/energy.go index bd2d12da1b..f2b4608cec 100644 --- a/sim/core/energy.go +++ b/sim/core/energy.go @@ -110,8 +110,20 @@ func (eb *energyBar) ComboPoints() int32 { return eb.comboPoints } +func (eb *energyBar) IsReset(sim *Simulation) bool { + return (eb.nextEnergyTick != 0) && (eb.nextEnergyTick - sim.CurrentTime <= eb.EnergyTickDuration) +} + +func (eb *energyBar) IsTicking(sim *Simulation) bool { + return eb.IsReset(sim) && (sim.CurrentTime <= eb.nextEnergyTick) +} + // Gives an immediate partial energy tick and restarts the tick timer. func (eb *energyBar) ResetEnergyTick(sim *Simulation) { + if !eb.IsTicking(sim) { + return + } + timeSinceLastTick := max(sim.CurrentTime-(eb.NextEnergyTickAt()-eb.EnergyTickDuration), 0) partialTickAmount := (eb.EnergyPerTick * eb.hasteRatingMultiplier * eb.energyRegenMultiplier) * (float64(timeSinceLastTick) / float64(eb.EnergyTickDuration)) eb.AddEnergy(sim, partialTickAmount, eb.regenMetrics) @@ -130,7 +142,16 @@ func (eb *energyBar) processDynamicHasteRatingChange(sim *Simulation) { // Used for dynamic updates to maximum Energy, such as from the Druid Primal Madness talent func (eb *energyBar) UpdateMaxEnergy(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics) { - // Reset tick timer first so that Energy is properly zeroed out when bonusEnergy < -currentEnergy + if !eb.IsReset(sim) { + eb.maxEnergy += bonusEnergy + } else { + eb.updateMaxEnergyInternal(sim, bonusEnergy, metrics) + } +} + +func (eb *energyBar) updateMaxEnergyInternal(sim *Simulation, bonusEnergy float64, metrics *ResourceMetrics) { + // Reset tick timer first so that Energy is properly zeroed out when + // bonusEnergy < -currentEnergy. eb.ResetEnergyTick(sim) eb.maxEnergy += bonusEnergy diff --git a/sim/core/focus.go b/sim/core/focus.go index 370aa37f5e..995c9fdc36 100644 --- a/sim/core/focus.go +++ b/sim/core/focus.go @@ -127,8 +127,16 @@ func (fb *focusBar) SpendFocus(sim *Simulation, amount float64, metrics *Resourc fb.currentFocus = newFocus } +func (fb *focusBar) IsTicking(sim *Simulation) bool { + return (fb.nextFocusTick != 0) && (sim.CurrentTime <= fb.nextFocusTick) && (fb.nextFocusTick - sim.CurrentTime <= fb.focusTickDuration) +} + // Gives an immediate partial Focus tick and restarts the tick timer. func (fb *focusBar) ResetFocusTick(sim *Simulation) { + if !fb.IsTicking(sim) { + return + } + timeSinceLastTick := max(sim.CurrentTime-(fb.NextFocusTickAt()-fb.focusTickDuration), 0) partialTickAmount := fb.FocusRegenPerSecond() * timeSinceLastTick.Seconds() fb.AddFocus(sim, partialTickAmount, fb.regenMetrics) diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 2b27b5fe84..f974dff11e 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -304,7 +304,7 @@ dps_results: { value: { dps: 43120.17978 tps: 32013.58168 - hps: 601.25406 + hps: 601.25407 } } dps_results: { @@ -1302,9 +1302,9 @@ dps_results: { dps_results: { key: "TestUnholy-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 39594.5399 - tps: 29368.10418 - hps: 651.99472 + dps: 39593.05402 + tps: 29369.14359 + hps: 652.77837 } } dps_results: { diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index 7e6ba17ed9..fefc480d6d 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -683,8 +683,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-GaleofShadows-56138" value: { - dps: 24296.61326 - tps: 15281.99504 + dps: 24278.5094 + tps: 15265.58579 } } dps_results: { @@ -704,8 +704,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Gladiator'sPursuit" value: { - dps: 22537.04644 - tps: 14217.96817 + dps: 22547.92184 + tps: 14213.6985 } } dps_results: { @@ -795,8 +795,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-HeartofSolace-55868" value: { - dps: 24296.61326 - tps: 15281.99504 + dps: 24278.5094 + tps: 15265.58579 } } dps_results: { @@ -1061,8 +1061,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Lightning-ChargedBattlegear" value: { - dps: 24565.79227 - tps: 15458.02105 + dps: 24566.93284 + tps: 15458.194 } } dps_results: { @@ -1864,8 +1864,8 @@ dps_results: { dps_results: { key: "TestBM-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 23762.51314 - tps: 15020.37497 + dps: 23776.34089 + tps: 15027.1501 } } dps_results: { @@ -2186,8 +2186,8 @@ dps_results: { dps_results: { key: "TestBM-Average-Default" value: { - dps: 25502.56838 - tps: 16070.8061 + dps: 25502.44332 + tps: 16070.84897 } } dps_results: { diff --git a/sim/rogue/combat/TestCombat.results b/sim/rogue/combat/TestCombat.results index 4e21dea032..f192a4ea2a 100644 --- a/sim/rogue/combat/TestCombat.results +++ b/sim/rogue/combat/TestCombat.results @@ -38,2433 +38,2433 @@ character_stats_results: { dps_results: { key: "TestCombat-AllItems-AgileShadowspiritDiamond" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-AgonyandTorment" value: { - dps: 25949.79241 - tps: 18424.35261 + dps: 25809.92133 + tps: 18325.04414 } } dps_results: { key: "TestCombat-AllItems-Althor'sAbacus-50366" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 30007.67403 - tps: 21305.44856 + dps: 29977.67991 + tps: 21284.15274 } } dps_results: { key: "TestCombat-AllItems-Anhuur'sHymnal-55889" value: { - dps: 28430.72573 - tps: 20185.81526 + dps: 28459.57976 + tps: 20206.30163 } } dps_results: { key: "TestCombat-AllItems-Anhuur'sHymnal-56407" value: { - dps: 28433.61724 - tps: 20187.86824 + dps: 28464.34599 + tps: 20209.68565 } } dps_results: { key: "TestCombat-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 29238.10574 - tps: 20759.05507 + dps: 29325.651 + tps: 20821.21221 } } dps_results: { key: "TestCombat-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 29305.72586 - tps: 20807.06536 + dps: 29356.33259 + tps: 20842.99614 } } dps_results: { key: "TestCombat-AllItems-ArrowofTime-72897" value: { - dps: 30572.22496 - tps: 21706.27972 + dps: 30454.37979 + tps: 21622.60965 } } dps_results: { key: "TestCombat-AllItems-AustereShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-BaubleofTrueBlood-50726" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 hps: 83.99244 } } dps_results: { key: "TestCombat-AllItems-BedrockTalisman-58182" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BellofEnragingResonance-59326" value: { - dps: 28362.13429 - tps: 20137.11535 + dps: 28340.89975 + tps: 20122.03882 } } dps_results: { key: "TestCombat-AllItems-BellofEnragingResonance-65053" value: { - dps: 28412.91861 - tps: 20173.17221 + dps: 28389.25485 + tps: 20156.37095 } } dps_results: { key: "TestCombat-AllItems-BindingPromise-67037" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BlackBruise-50692" value: { - dps: 27822.48047 - tps: 19753.96114 + dps: 27791.64042 + tps: 19732.0647 } } dps_results: { key: "TestCombat-AllItems-BlackfangBattleweave" value: { - dps: 28289.43672 - tps: 20085.50007 + dps: 28315.73137 + tps: 20104.16927 } } dps_results: { key: "TestCombat-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 29420.25676 - tps: 20888.3823 + dps: 29413.74829 + tps: 20883.76129 } } dps_results: { key: "TestCombat-AllItems-BloodofIsiset-55995" value: { - dps: 28368.21524 - tps: 20141.43282 + dps: 28409.87709 + tps: 20171.01274 } } dps_results: { key: "TestCombat-AllItems-BloodofIsiset-56414" value: { - dps: 28511.34283 - tps: 20243.05341 + dps: 28563.93677 + tps: 20280.39511 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 29951.96997 - tps: 21265.89868 + dps: 29938.89974 + tps: 21256.61882 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 28506.25433 - tps: 20239.44057 + dps: 28485.50608 + tps: 20224.70931 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 28342.45909 - tps: 20123.14596 + dps: 28320.82096 + tps: 20107.78288 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 29387.57026 - tps: 20865.17489 + dps: 29349.75194 + tps: 20838.32387 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 28531.99287 - tps: 20257.71493 + dps: 28514.2507 + tps: 20245.118 } } dps_results: { key: "TestCombat-AllItems-Bone-LinkFetish-77210" value: { - dps: 29741.58955 - tps: 21116.52858 + dps: 29787.60109 + tps: 21149.19677 } } dps_results: { key: "TestCombat-AllItems-Bone-LinkFetish-77982" value: { - dps: 29521.69531 - tps: 20960.40367 + dps: 29555.42176 + tps: 20984.34945 } } dps_results: { key: "TestCombat-AllItems-Bone-LinkFetish-78002" value: { - dps: 29978.75293 - tps: 21284.91458 + dps: 30001.52722 + tps: 21301.08433 } } dps_results: { key: "TestCombat-AllItems-BottledLightning-66879" value: { - dps: 28154.03495 - tps: 19989.36481 + dps: 28127.30576 + tps: 19970.38709 } } dps_results: { key: "TestCombat-AllItems-BottledWishes-77114" value: { - dps: 28856.73246 - tps: 20488.28004 + dps: 28868.27815 + tps: 20496.47748 } } dps_results: { key: "TestCombat-AllItems-BracingShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 20589.85083 + dps: 29628.86841 + tps: 20615.76664 } } dps_results: { key: "TestCombat-AllItems-Brawler'sTrophy-232015" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-BurningShadowspiritDiamond" value: { - dps: 29946.42625 - tps: 21261.96264 + dps: 29982.85491 + tps: 21287.82698 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 30143.02991 - tps: 21401.55123 + dps: 30108.62087 + tps: 21377.12082 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 28804.52112 - tps: 20451.21 + dps: 28781.86822 + tps: 20435.12644 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 30309.47249 - tps: 21519.72547 + dps: 30289.54879 + tps: 21505.57964 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 28913.71477 - tps: 20528.73749 + dps: 28894.21014 + tps: 20514.8892 } } dps_results: { key: "TestCombat-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 30016.18983 - tps: 21311.49478 + dps: 30051.45102 + tps: 21336.53022 } } dps_results: { key: "TestCombat-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 29329.3065 - tps: 20823.80762 + dps: 29313.01902 + tps: 20812.24351 } } dps_results: { key: "TestCombat-AllItems-CoreofRipeness-58184" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CorpseTongueCoin-50349" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 29512.05153 - tps: 20953.55658 + dps: 29497.32188 + tps: 20943.09853 } } dps_results: { key: "TestCombat-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 29332.07 - tps: 20825.7697 + dps: 29331.37044 + tps: 20825.27302 } } dps_results: { key: "TestCombat-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 29708.05956 - tps: 21092.72229 + dps: 29700.64581 + tps: 21087.45852 } } dps_results: { key: "TestCombat-AllItems-CrushingWeight-59506" value: { - dps: 29138.47471 - tps: 20688.31705 + dps: 29184.72598 + tps: 20721.15545 } } dps_results: { key: "TestCombat-AllItems-CrushingWeight-65118" value: { - dps: 29334.10638 - tps: 20827.21553 + dps: 29322.32577 + tps: 20818.8513 } } dps_results: { key: "TestCombat-AllItems-CunningoftheCruel-77208" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CunningoftheCruel-77980" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-CunningoftheCruel-78000" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 29270.36917 - tps: 20781.96211 + dps: 29383.24638 + tps: 20862.10493 } } dps_results: { key: "TestCombat-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 30043.41305 - tps: 21330.82327 + dps: 30142.30098 + tps: 21401.0337 } } dps_results: { key: "TestCombat-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 28583.21339 - tps: 20294.0815 + dps: 28677.38985 + tps: 20360.9468 } } dps_results: { key: "TestCombat-AllItems-Deathbringer'sWill-50363" value: { - dps: 28921.45684 - tps: 20534.23436 + dps: 28885.97636 + tps: 20509.04322 } } dps_results: { key: "TestCombat-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 29657.30191 - tps: 21056.68436 + dps: 29693.44815 + tps: 21082.34819 } } dps_results: { key: "TestCombat-AllItems-DislodgedForeignObject-50348" value: { - dps: 28414.26996 - tps: 20174.13167 + dps: 28411.05022 + tps: 20171.84565 } } dps_results: { key: "TestCombat-AllItems-Dwyer'sCaber-70141" value: { - dps: 28999.22491 - tps: 20589.44968 + dps: 28996.31774 + tps: 20587.3856 } } dps_results: { key: "TestCombat-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-EmberShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 29657.30191 - tps: 21056.68436 + dps: 29693.44815 + tps: 21082.34819 } } dps_results: { key: "TestCombat-AllItems-EssenceoftheCyclone-59473" value: { - dps: 29761.76718 - tps: 21130.8547 + dps: 29745.28857 + tps: 21119.15489 } } dps_results: { key: "TestCombat-AllItems-EssenceoftheCyclone-65140" value: { - dps: 29967.62855 - tps: 21277.01627 + dps: 29961.77628 + tps: 21272.86116 } } dps_results: { key: "TestCombat-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 29195.80443 - tps: 20729.02115 + dps: 29160.13 + tps: 20703.6923 } } dps_results: { key: "TestCombat-AllItems-EternalShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-EyeofUnmaking-77200" value: { - dps: 29354.02632 - tps: 20841.35869 + dps: 29336.07566 + tps: 20828.61372 } } dps_results: { key: "TestCombat-AllItems-EyeofUnmaking-77977" value: { - dps: 29200.3818 - tps: 20732.27108 + dps: 29182.47917 + tps: 20719.56021 } } dps_results: { key: "TestCombat-AllItems-EyeofUnmaking-77997" value: { - dps: 29523.0353 - tps: 20961.35506 + dps: 29505.03179 + tps: 20948.57257 } } dps_results: { key: "TestCombat-AllItems-FallofMortality-59500" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-FallofMortality-65124" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-FangsoftheFather" value: { - dps: 33628.06003 - tps: 23875.92262 + dps: 33577.89078 + tps: 23840.30245 } } dps_results: { key: "TestCombat-AllItems-Fear-77945" value: { - dps: 29427.67104 - tps: 20893.64644 + dps: 29519.99852 + tps: 20959.19895 } } dps_results: { key: "TestCombat-AllItems-FieryQuintessence-69000" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Figurine-DemonPanther-52199" value: { - dps: 29727.66485 - tps: 21106.64204 + dps: 29740.75992 + tps: 21115.93955 } } dps_results: { key: "TestCombat-AllItems-Figurine-DreamOwl-52354" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Figurine-KingofBoars-52351" value: { - dps: 28986.31031 - tps: 20580.28032 + dps: 29039.87659 + tps: 20618.31238 } } dps_results: { key: "TestCombat-AllItems-FireoftheDeep-77117" value: { - dps: 28842.74684 - tps: 20478.35025 + dps: 28707.52683 + tps: 20382.34405 } } dps_results: { key: "TestCombat-AllItems-FleetShadowspiritDiamond" value: { - dps: 29608.31277 - tps: 21021.90206 + dps: 29615.11996 + tps: 21026.73518 } } dps_results: { key: "TestCombat-AllItems-ForlornShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-FuryofAngerforge-59461" value: { - dps: 28945.65928 - tps: 20551.41809 + dps: 28930.28258 + tps: 20540.50063 } } dps_results: { key: "TestCombat-AllItems-GaleofShadows-56138" value: { - dps: 28576.66467 - tps: 20289.43192 + dps: 28493.13477 + tps: 20230.12568 } } dps_results: { key: "TestCombat-AllItems-GaleofShadows-56462" value: { - dps: 28506.20318 - tps: 20239.40426 + dps: 28574.85585 + tps: 20288.14765 } } dps_results: { key: "TestCombat-AllItems-GearDetector-61462" value: { - dps: 29131.03821 - tps: 20683.03713 + dps: 28999.29376 + tps: 20589.49857 } } dps_results: { key: "TestCombat-AllItems-Gladiator'sVestments" value: { - dps: 23846.16222 - tps: 16930.77518 + dps: 23918.7048 + tps: 16982.28041 } } dps_results: { key: "TestCombat-AllItems-GlowingTwilightScale-54589" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Golad,TwilightofAspects-77949" value: { - dps: 30592.76127 - tps: 21720.8605 + dps: 30704.28676 + tps: 21800.0436 } } dps_results: { key: "TestCombat-AllItems-GraceoftheHerald-55266" value: { - dps: 28907.13289 - tps: 20524.06435 + dps: 28893.31532 + tps: 20514.25388 } } dps_results: { key: "TestCombat-AllItems-GraceoftheHerald-56295" value: { - dps: 29350.28671 - tps: 20838.70356 + dps: 29322.02562 + tps: 20818.63819 } } dps_results: { key: "TestCombat-AllItems-HarmlightToken-63839" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 28662.33662 - tps: 20350.259 + dps: 28649.88788 + tps: 20341.4204 } } dps_results: { key: "TestCombat-AllItems-HeartofIgnacious-59514" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-HeartofIgnacious-65110" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-HeartofRage-59224" value: { - dps: 28768.2263 - tps: 20425.44067 + dps: 28695.91033 + tps: 20374.09634 } } dps_results: { key: "TestCombat-AllItems-HeartofRage-65072" value: { - dps: 28852.88822 - tps: 20485.55064 + dps: 28781.07729 + tps: 20434.56488 } } dps_results: { key: "TestCombat-AllItems-HeartofSolace-55868" value: { - dps: 29080.1748 - tps: 20646.92411 + dps: 29001.95984 + tps: 20591.39148 } } dps_results: { key: "TestCombat-AllItems-HeartofSolace-56393" value: { - dps: 29075.8494 - tps: 20643.85308 + dps: 29143.0559 + tps: 20691.56969 } } dps_results: { key: "TestCombat-AllItems-HeartofThunder-55845" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-HeartofThunder-56370" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-HeartoftheVile-66969" value: { - dps: 29042.26987 - tps: 20620.01161 + dps: 29007.97834 + tps: 20595.66462 } } dps_results: { key: "TestCombat-AllItems-Heartpierce-50641" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 29657.30191 - tps: 21056.68436 + dps: 29693.44815 + tps: 21082.34819 } } dps_results: { key: "TestCombat-AllItems-ImpatienceofYouth-62464" value: { - dps: 29128.58065 - tps: 20681.29226 + dps: 29220.87871 + tps: 20746.82389 } } dps_results: { key: "TestCombat-AllItems-ImpatienceofYouth-62469" value: { - dps: 29128.58065 - tps: 20681.29226 + dps: 29220.87871 + tps: 20746.82389 } } dps_results: { key: "TestCombat-AllItems-ImpetuousQuery-55881" value: { - dps: 28368.21524 - tps: 20141.43282 + dps: 28409.87709 + tps: 20171.01274 } } dps_results: { key: "TestCombat-AllItems-ImpetuousQuery-56406" value: { - dps: 28511.34283 - tps: 20243.05341 + dps: 28563.93677 + tps: 20280.39511 } } dps_results: { key: "TestCombat-AllItems-IndomitablePride-77211" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-IndomitablePride-77983" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-IndomitablePride-78003" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 28944.40108 - tps: 20550.52476 + dps: 28977.14385 + tps: 20573.77213 } } dps_results: { key: "TestCombat-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 28865.64712 - tps: 20494.60945 + dps: 28896.00746 + tps: 20516.1653 } } dps_results: { key: "TestCombat-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 29138.29698 - tps: 20688.19086 + dps: 29126.13246 + tps: 20679.55405 } } dps_results: { key: "TestCombat-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 28328.27072 - tps: 20113.07221 + dps: 28297.93508 + tps: 20091.53391 } } dps_results: { key: "TestCombat-AllItems-JarofAncientRemedies-59354" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-JarofAncientRemedies-65029" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-JawsofDefeat-68926" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-JawsofDefeat-69111" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-JawsofRetribution" value: { - dps: 29963.2902 - tps: 21273.93604 + dps: 29912.91959 + tps: 21238.17291 } } dps_results: { key: "TestCombat-AllItems-JujuofNimbleness-63840" value: { - dps: 29420.25676 - tps: 20888.3823 + dps: 29413.74829 + tps: 20883.76129 } } dps_results: { key: "TestCombat-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 29580.91081 - tps: 21002.44667 + dps: 29588.98321 + tps: 21008.17808 } } dps_results: { key: "TestCombat-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 30019.22241 - tps: 21313.64791 + dps: 30053.04606 + tps: 21337.6627 } } dps_results: { key: "TestCombat-AllItems-KiroptyricSigil-77113" value: { - dps: 31164.43297 - tps: 22126.74741 + dps: 31154.40449 + tps: 22119.62719 } } dps_results: { key: "TestCombat-AllItems-KvaldirBattleStandard-59685" value: { - dps: 28666.65777 - tps: 20353.32702 + dps: 28568.34418 + tps: 20283.52437 } } dps_results: { key: "TestCombat-AllItems-KvaldirBattleStandard-59689" value: { - dps: 28666.65777 - tps: 20353.32702 + dps: 28568.34418 + tps: 20283.52437 } } dps_results: { key: "TestCombat-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 28296.4682 - tps: 20090.49242 + dps: 28307.43467 + tps: 20098.27862 } } dps_results: { key: "TestCombat-AllItems-LastWord-50708" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-LeadenDespair-55816" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-LeadenDespair-56347" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-LeftEyeofRajh-56102" value: { - dps: 29362.67147 - tps: 20847.49674 + dps: 29266.2757 + tps: 20779.05575 } } dps_results: { key: "TestCombat-AllItems-LeftEyeofRajh-56427" value: { - dps: 29517.29526 - tps: 20957.27963 + dps: 29416.54061 + tps: 20885.74384 } } dps_results: { key: "TestCombat-AllItems-LicensetoSlay-58180" value: { - dps: 29175.10887 - tps: 20714.3273 + dps: 29177.39507 + tps: 20715.9505 } } dps_results: { key: "TestCombat-AllItems-MagnetiteMirror-55814" value: { - dps: 28521.76388 - tps: 20250.45236 + dps: 28442.56443 + tps: 20194.22075 } } dps_results: { key: "TestCombat-AllItems-MagnetiteMirror-56345" value: { - dps: 28649.52852 - tps: 20341.16525 + dps: 28570.16902 + tps: 20284.82001 } } dps_results: { key: "TestCombat-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-MarkofKhardros-56132" value: { - dps: 28949.50061 - tps: 20554.14543 + dps: 28917.31965 + tps: 20531.29695 } } dps_results: { key: "TestCombat-AllItems-MarkofKhardros-56458" value: { - dps: 29085.72098 - tps: 20650.8619 + dps: 29043.9573 + tps: 20621.20968 } } dps_results: { key: "TestCombat-AllItems-MatrixRestabilizer-68994" value: { - dps: 30387.47883 - tps: 21575.10997 + dps: 30411.35485 + tps: 21592.06194 } } dps_results: { key: "TestCombat-AllItems-MatrixRestabilizer-69150" value: { - dps: 30911.77932 - tps: 21947.36332 + dps: 30868.77192 + tps: 21916.82807 } } dps_results: { key: "TestCombat-AllItems-MawofOblivion" value: { - dps: 31116.69061 - tps: 22092.85033 + dps: 31129.88991 + tps: 22102.22183 } } dps_results: { key: "TestCombat-AllItems-MightoftheOcean-55251" value: { - dps: 28635.25371 - tps: 20331.03013 + dps: 28673.46824 + tps: 20358.16245 } } dps_results: { key: "TestCombat-AllItems-MightoftheOcean-56285" value: { - dps: 28968.04675 - tps: 20567.3132 + dps: 28995.9777 + tps: 20587.14417 } } dps_results: { key: "TestCombat-AllItems-MirrorofBrokenImages-62466" value: { - dps: 28583.21339 - tps: 20294.0815 + dps: 28677.38985 + tps: 20360.9468 } } dps_results: { key: "TestCombat-AllItems-MirrorofBrokenImages-62471" value: { - dps: 28583.21339 - tps: 20294.0815 + dps: 28677.38985 + tps: 20360.9468 } } dps_results: { key: "TestCombat-AllItems-MithrilStopwatch-232013" value: { - dps: 28343.60423 - tps: 20123.959 + dps: 28323.2201 + tps: 20109.48627 } } dps_results: { key: "TestCombat-AllItems-MoonwellChalice-70142" value: { - dps: 28625.61224 - tps: 20324.18469 + dps: 28601.18801 + tps: 20306.84348 } } dps_results: { key: "TestCombat-AllItems-MoonwellPhial-70143" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-NecromanticFocus-68982" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-NecromanticFocus-69139" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-No'Kaled,theElementsofDeath-77188" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-No'Kaled,theElementsofDeath-78472" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-No'Kaled,theElementsofDeath-78481" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-Oremantle'sFavor-61448" value: { - dps: 28564.13558 - tps: 20280.53626 + dps: 28543.29356 + tps: 20265.73843 } } dps_results: { key: "TestCombat-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 28204.07678 - tps: 20024.89451 + dps: 28179.79072 + tps: 20007.65141 } } dps_results: { key: "TestCombat-AllItems-PorcelainCrab-55237" value: { - dps: 28351.97575 - tps: 20129.90278 + dps: 28367.99928 + tps: 20141.27949 } } dps_results: { key: "TestCombat-AllItems-PorcelainCrab-56280" value: { - dps: 28676.96227 - tps: 20360.64321 + dps: 28570.14683 + tps: 20284.80425 } } dps_results: { key: "TestCombat-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 29591.62235 - tps: 21010.05187 + dps: 29628.86841 + tps: 21036.49657 } } dps_results: { key: "TestCombat-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 29933.64844 - tps: 21252.89039 + dps: 29973.28964 + tps: 21281.03564 } } dps_results: { key: "TestCombat-AllItems-Rainsong-55854" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Rainsong-56377" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 26397.23098 - tps: 18742.03399 + dps: 26409.09253 + tps: 18750.45569 } } dps_results: { key: "TestCombat-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 26826.75774 - tps: 19046.99799 + dps: 26839.60996 + tps: 19056.12307 } } dps_results: { key: "TestCombat-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 26015.61022 - tps: 18471.08326 + dps: 26026.59514 + tps: 18478.88255 } } dps_results: { key: "TestCombat-AllItems-ReflectionoftheLight-77115" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ResolveofUndying-77201" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ResolveofUndying-77978" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ResolveofUndying-77998" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 30032.30425 - tps: 21322.93602 + dps: 30068.72974 + tps: 21348.79812 } } dps_results: { key: "TestCombat-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 29946.42625 - tps: 21261.96264 + dps: 29982.85491 + tps: 21287.82698 } } dps_results: { key: "TestCombat-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 29792.08826 - tps: 21152.38266 + dps: 29766.66662 + tps: 21134.3333 } } dps_results: { key: "TestCombat-AllItems-RightEyeofRajh-56100" value: { - dps: 28911.92878 - tps: 20527.46943 + dps: 28933.70568 + tps: 20542.93103 } } dps_results: { key: "TestCombat-AllItems-RightEyeofRajh-56431" value: { - dps: 28987.89243 - tps: 20581.40362 + dps: 29009.00304 + tps: 20596.39216 } } dps_results: { key: "TestCombat-AllItems-RosaryofLight-72901" value: { - dps: 29125.58951 - tps: 20679.16855 + dps: 29127.14385 + tps: 20680.27213 } } dps_results: { key: "TestCombat-AllItems-RottingSkull-77116" value: { - dps: 29380.05634 - tps: 20859.84 + dps: 29359.89119 + tps: 20845.52274 } } dps_results: { key: "TestCombat-AllItems-RuneofZeth-68998" value: { - dps: 28437.33292 - tps: 20190.50637 + dps: 28410.90839 + tps: 20171.74496 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 29792.09259 - tps: 21152.38574 + dps: 29755.72037 + tps: 21126.56147 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 29891.70838 - tps: 21223.11295 + dps: 29854.45643 + tps: 21196.66406 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 28675.12841 - tps: 20359.34117 + dps: 28653.30177 + tps: 20343.84426 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 28713.28267 - tps: 20386.4307 + dps: 28691.21239 + tps: 20370.7608 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 29971.71579 - tps: 21279.91821 + dps: 29942.10388 + tps: 21258.89376 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 30073.88433 - tps: 21352.45787 + dps: 30032.64951 + tps: 21323.18115 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 28765.96873 - tps: 20423.8378 + dps: 28743.74993 + tps: 20408.06245 } } dps_results: { key: "TestCombat-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 28818.20115 - tps: 20460.92282 + dps: 28796.53858 + tps: 20445.54239 } } dps_results: { key: "TestCombat-AllItems-ScalesofLife-68915" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 hps: 291.12785 } } dps_results: { key: "TestCombat-AllItems-ScalesofLife-69109" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 hps: 328.38949 } } dps_results: { key: "TestCombat-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 29232.49954 - tps: 20755.07467 + dps: 29211.84939 + tps: 20740.41307 } } dps_results: { key: "TestCombat-AllItems-SeaStar-55256" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-SeaStar-56290" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ShardofWoe-60233" value: { - dps: 28567.23784 - tps: 20282.73887 + dps: 28551.31026 + tps: 20271.43028 } } dps_results: { key: "TestCombat-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 28906.52944 - tps: 20523.6359 + dps: 28924.19675 + tps: 20536.17969 } } dps_results: { key: "TestCombat-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Skardyn'sGrace-56115" value: { - dps: 29504.71434 - tps: 20948.34718 + dps: 29555.39846 + tps: 20984.33291 } } dps_results: { key: "TestCombat-AllItems-Skardyn'sGrace-56440" value: { - dps: 29696.11273 - tps: 21084.24004 + dps: 29759.17479 + tps: 21129.0141 } } dps_results: { key: "TestCombat-AllItems-Sorrowsong-55879" value: { - dps: 28368.21524 - tps: 20141.43282 + dps: 28409.87709 + tps: 20171.01274 } } dps_results: { key: "TestCombat-AllItems-Sorrowsong-56400" value: { - dps: 28511.34283 - tps: 20243.05341 + dps: 28563.93677 + tps: 20280.39511 } } dps_results: { key: "TestCombat-AllItems-Soul'sAnguish-66994" value: { - dps: 28712.91497 - tps: 20386.16963 + dps: 28743.2662 + tps: 20407.719 } } dps_results: { key: "TestCombat-AllItems-SoulCasket-58183" value: { - dps: 28583.21339 - tps: 20294.0815 + dps: 28677.38985 + tps: 20360.9468 } } dps_results: { key: "TestCombat-AllItems-Souldrinker-77193" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-Souldrinker-78479" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-Souldrinker-78488" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-AllItems-SoulshifterVortex-77206" value: { - dps: 29070.22025 - tps: 20639.85638 + dps: 29171.01495 + tps: 20711.42061 } } dps_results: { key: "TestCombat-AllItems-SoulshifterVortex-77970" value: { - dps: 29060.90203 - tps: 20633.24044 + dps: 29098.03142 + tps: 20659.60231 } } dps_results: { key: "TestCombat-AllItems-SoulshifterVortex-77990" value: { - dps: 29316.86485 - tps: 20814.97405 + dps: 29331.22848 + tps: 20825.17222 } } dps_results: { key: "TestCombat-AllItems-SpidersilkSpindle-68981" value: { - dps: 28678.17434 - tps: 20361.50378 + dps: 28647.29297 + tps: 20339.57801 } } dps_results: { key: "TestCombat-AllItems-SpidersilkSpindle-69138" value: { - dps: 28724.91824 - tps: 20394.69195 + dps: 28696.85742 + tps: 20374.76877 } } dps_results: { key: "TestCombat-AllItems-StarcatcherCompass-77202" value: { - dps: 30844.65596 - tps: 21899.70573 + dps: 30833.31233 + tps: 21891.65176 } } dps_results: { key: "TestCombat-AllItems-StarcatcherCompass-77973" value: { - dps: 30472.52745 - tps: 21635.49449 + dps: 30538.09033 + tps: 21682.04413 } } dps_results: { key: "TestCombat-AllItems-StarcatcherCompass-77993" value: { - dps: 31287.20825 - tps: 22213.91786 + dps: 31247.15081 + tps: 22185.47707 } } dps_results: { key: "TestCombat-AllItems-StayofExecution-68996" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Stonemother'sKiss-61411" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-StumpofTime-62465" value: { - dps: 28578.55681 - tps: 20290.77534 + dps: 28581.26218 + tps: 20292.69614 } } dps_results: { key: "TestCombat-AllItems-StumpofTime-62470" value: { - dps: 28578.55681 - tps: 20290.77534 + dps: 28581.26218 + tps: 20292.69614 } } dps_results: { key: "TestCombat-AllItems-SymbioticWorm-59332" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-SymbioticWorm-65048" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 28942.52573 - tps: 20549.19327 + dps: 28967.70996 + tps: 20567.07407 } } dps_results: { key: "TestCombat-AllItems-TearofBlood-55819" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-TearofBlood-56351" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 28363.74137 - tps: 20138.25637 + dps: 28380.72409 + tps: 20150.3141 } } dps_results: { key: "TestCombat-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 28511.34283 - tps: 20243.05341 + dps: 28563.93677 + tps: 20280.39511 } } dps_results: { key: "TestCombat-AllItems-TheHungerer-68927" value: { - dps: 30223.16812 - tps: 21458.44937 + dps: 30286.40458 + tps: 21503.34725 } } dps_results: { key: "TestCombat-AllItems-TheHungerer-69112" value: { - dps: 30516.1309 - tps: 21666.45294 + dps: 30484.30661 + tps: 21643.85769 } } dps_results: { key: "TestCombat-AllItems-TheSleeper-77947" value: { - dps: 29981.1602 - tps: 21286.62374 + dps: 29898.61682 + tps: 21228.01794 } } dps_results: { key: "TestCombat-AllItems-Theralion'sMirror-59519" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Theralion'sMirror-65105" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Throngus'sFinger-56121" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Throngus'sFinger-56449" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Tia'sGrace-55874" value: { - dps: 29537.16835 - tps: 20971.38953 + dps: 29568.29498 + tps: 20993.48944 } } dps_results: { key: "TestCombat-AllItems-Tia'sGrace-56394" value: { - dps: 29859.48109 - tps: 21200.23157 + dps: 29909.2573 + tps: 21235.57268 } } dps_results: { key: "TestCombat-AllItems-TinyAbominationinaJar-50706" value: { - dps: 29508.66062 - tps: 20951.14904 + dps: 29470.18156 + tps: 20923.8289 } } dps_results: { key: "TestCombat-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 27993.7916 - tps: 19875.59203 + dps: 27980.15892 + tps: 19865.91283 } } dps_results: { key: "TestCombat-AllItems-UnheededWarning-59520" value: { - dps: 29857.60275 - tps: 21198.89795 + dps: 29828.73776 + tps: 21178.40381 } } dps_results: { key: "TestCombat-AllItems-UnquenchableFlame-67101" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-UnsolvableRiddle-62463" value: { - dps: 30001.0834 - tps: 21300.76922 + dps: 30079.94775 + tps: 21356.7629 } } dps_results: { key: "TestCombat-AllItems-UnsolvableRiddle-62468" value: { - dps: 30001.0834 - tps: 21300.76922 + dps: 30079.94775 + tps: 21356.7629 } } dps_results: { key: "TestCombat-AllItems-UnsolvableRiddle-68709" value: { - dps: 30001.0834 - tps: 21300.76922 + dps: 30079.94775 + tps: 21356.7629 } } dps_results: { key: "TestCombat-AllItems-Val'anyr,HammerofAncientKings-46017" value: { - dps: 26341.67825 - tps: 18702.59156 + dps: 26365.47904 + tps: 18719.49012 } } dps_results: { key: "TestCombat-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-Varo'then'sBrooch-72899" value: { - dps: 29592.34057 - tps: 21010.56181 + dps: 29498.46956 + tps: 20943.91339 } } dps_results: { key: "TestCombat-AllItems-VeilofLies-72900" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-VesselofAcceleration-68995" value: { - dps: 29113.24502 - tps: 20670.40396 + dps: 29094.05278 + tps: 20656.77747 } } dps_results: { key: "TestCombat-AllItems-VesselofAcceleration-69167" value: { - dps: 29237.68009 - tps: 20758.75286 + dps: 29217.85329 + tps: 20744.67584 } } dps_results: { key: "TestCombat-AllItems-VestmentsoftheDarkPhoenix" value: { - dps: 29608.83273 - tps: 21022.27124 + dps: 29558.78975 + tps: 20986.74072 } } dps_results: { key: "TestCombat-AllItems-VialofShadows-77207" value: { - dps: 30338.68823 - tps: 21540.46864 + dps: 30369.5304 + tps: 21562.36658 } } dps_results: { key: "TestCombat-AllItems-VialofShadows-77979" value: { - dps: 30058.48174 - tps: 21341.52204 + dps: 30120.31532 + tps: 21385.42387 } } dps_results: { key: "TestCombat-AllItems-VialofShadows-77999" value: { - dps: 30645.83379 - tps: 21758.54199 + dps: 30652.87498 + tps: 21763.54124 } } dps_results: { key: "TestCombat-AllItems-VialofStolenMemories-59515" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-VialofStolenMemories-65109" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 29401.45574 - tps: 20875.03358 + dps: 29375.00318 + tps: 20856.25226 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 29574.56273 - tps: 20997.93954 + dps: 29544.48393 + tps: 20976.58359 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 28534.45531 - tps: 20259.46327 + dps: 28513.52697 + tps: 20244.60415 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 28597.16101 - tps: 20303.98431 + dps: 28575.83225 + tps: 20288.8409 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 28602.81158 - tps: 20307.99622 + dps: 28590.19954 + tps: 20299.04167 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 28775.70675 - tps: 20430.75179 + dps: 28815.39875 + tps: 20458.93312 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 28387.647 - tps: 20155.22937 + dps: 28366.52188 + tps: 20140.23053 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 28129.34393 - tps: 19971.83419 + dps: 28050.63605 + tps: 19915.95159 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 28661.83939 - tps: 20349.90597 + dps: 28754.38337 + tps: 20415.61219 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 29549.74083 - tps: 20980.31599 + dps: 29531.42449 + tps: 20967.31139 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 29734.22951 - tps: 21111.30295 + dps: 29689.49642 + tps: 21079.54246 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 28599.92032 - tps: 20305.94343 + dps: 28580.46046 + tps: 20292.12692 } } dps_results: { key: "TestCombat-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 28678.66555 - tps: 20361.85254 + dps: 28661.86263 + tps: 20349.92247 } } dps_results: { key: "TestCombat-AllItems-Vishanka,JawsoftheEarth-78359" value: { - dps: 30108.09834 - tps: 21376.74982 + dps: 30211.85082 + tps: 21450.41409 } } dps_results: { key: "TestCombat-AllItems-Vishanka,JawsoftheEarth-78471" value: { - dps: 30203.54655 - tps: 21444.51805 + dps: 30304.98606 + tps: 21516.5401 } } dps_results: { key: "TestCombat-AllItems-Vishanka,JawsoftheEarth-78480" value: { - dps: 30038.26539 - tps: 21327.16842 + dps: 30142.2559 + tps: 21401.00169 } } dps_results: { key: "TestCombat-AllItems-WillofUnbinding-77198" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-WillofUnbinding-77975" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-WillofUnbinding-77995" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-WindDancer'sRegalia" value: { - dps: 26872.04855 - tps: 19079.15447 + dps: 26859.23545 + tps: 19070.05717 } } dps_results: { key: "TestCombat-AllItems-WitchingHourglass-55787" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-WitchingHourglass-56320" value: { - dps: 28001.95453 - tps: 19881.38772 + dps: 27984.42658 + tps: 19868.94288 } } dps_results: { key: "TestCombat-AllItems-World-QuellerFocus-63842" value: { - dps: 28359.52594 - tps: 20135.26342 + dps: 28377.49447 + tps: 20148.02107 } } dps_results: { key: "TestCombat-AllItems-WrathofUnchaining-77197" value: { - dps: 31459.65751 - tps: 22336.35683 + dps: 31411.49136 + tps: 22302.15886 } } dps_results: { key: "TestCombat-AllItems-WrathofUnchaining-77974" value: { - dps: 31055.45416 - tps: 22049.37246 + dps: 31023.58863 + tps: 22026.74792 } } dps_results: { key: "TestCombat-AllItems-WrathofUnchaining-77994" value: { - dps: 31897.1742 - tps: 22646.99368 + dps: 31864.06131 + tps: 22623.48353 } } dps_results: { key: "TestCombat-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 28435.39598 - tps: 20189.13114 + dps: 28458.0599 + tps: 20205.22253 } } dps_results: { key: "TestCombat-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 28435.39598 - tps: 20189.13114 + dps: 28458.0599 + tps: 20205.22253 } } dps_results: { key: "TestCombat-Average-Default" value: { - dps: 30112.54056 - tps: 21379.9038 + dps: 30118.20531 + tps: 21383.92577 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 29882.24948 - tps: 21216.39713 + dps: 29886.95859 + tps: 21219.7406 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30156.67815 - tps: 21411.24149 + dps: 30192.18859 + tps: 21436.4539 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36588.9866 - tps: 25978.18049 + dps: 36848.95889 + tps: 26162.76081 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17050.10833 - tps: 12105.57692 + dps: 17077.14181 + tps: 12124.77069 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17211.4354 - tps: 12220.11914 + dps: 17260.90382 + tps: 12255.24172 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17189.01358 - tps: 12204.19964 + dps: 17348.17327 + tps: 12317.20302 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 25962.40978 - tps: 18433.31094 + dps: 25999.21764 + tps: 18459.44452 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 25888.53227 - tps: 18380.85791 + dps: 25937.80812 + tps: 18415.84377 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31501.42247 - tps: 22366.00995 + dps: 31736.44689 + tps: 22532.87729 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 15031.42022 - tps: 10672.30836 + dps: 15077.93817 + tps: 10705.3361 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14959.9265 - tps: 10621.54781 + dps: 15006.10831 + tps: 10654.3369 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15011.74375 - tps: 10658.33806 + dps: 15156.01573 + tps: 10760.77117 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 28868.39014 - tps: 20496.557 + dps: 28914.93762 + tps: 20529.60571 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29110.93188 - tps: 20668.76163 + dps: 29167.87826 + tps: 20709.19356 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35291.51557 - tps: 25056.97606 + dps: 35540.37395 + tps: 25233.6655 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 16545.291 - tps: 11747.15661 + dps: 16611.99449 + tps: 11794.51608 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 16665.44088 - tps: 11832.46303 + dps: 16744.25073 + tps: 11888.41802 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16591.64005 - tps: 11780.06444 + dps: 16743.1363 + tps: 11887.62677 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 27122.5906 - tps: 19257.03933 + dps: 27169.23637 + tps: 19290.15782 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 27414.30112 - tps: 19464.15379 + dps: 27480.50052 + tps: 19511.15537 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 33968.62615 - tps: 24117.72457 + dps: 34240.18851 + tps: 24310.53384 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 14957.96439 - tps: 10620.15472 + dps: 14985.33804 + tps: 10639.59001 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15072.6503 - tps: 10701.58171 + dps: 15105.32797 + tps: 10724.78286 } } dps_results: { key: "TestCombat-Settings-Human-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15261.46226 - tps: 10835.6382 + dps: 15447.85631 + tps: 10967.97798 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 38000.46776 - tps: 26980.33211 + dps: 37997.71444 + tps: 26978.37725 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38380.88409 - tps: 27250.4277 + dps: 38401.02514 + tps: 27264.72785 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 45939.63665 - tps: 32617.14202 + dps: 45904.8221 + tps: 32592.42369 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21984.23943 - tps: 15608.81 + dps: 22086.17124 + tps: 15681.18158 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 22143.03498 - tps: 15721.55484 + dps: 22250.02742 + tps: 15797.51947 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22559.10713 - tps: 16016.96606 + dps: 22528.43441 + tps: 15995.18843 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33463.48548 - tps: 23759.07469 + dps: 33493.36514 + tps: 23780.28925 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33477.35054 - tps: 23768.91888 + dps: 33515.14936 + tps: 23795.75605 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40119.19857 - tps: 28484.63098 + dps: 40089.64493 + tps: 28463.6479 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19620.12822 - tps: 13930.29104 + dps: 19699.11858 + tps: 13986.37419 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19561.62805 - tps: 13888.75592 + dps: 19661.96408 + tps: 13959.9945 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20007.39855 - tps: 14205.25297 + dps: 19937.09369 + tps: 14155.33652 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 36762.02124 - tps: 26101.03508 + dps: 36785.60945 + tps: 26117.78271 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37125.90309 - tps: 26359.3912 + dps: 37172.53595 + tps: 26392.50053 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44384.5274 - tps: 31513.01445 + dps: 44356.55199 + tps: 31493.15191 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21405.2518 - tps: 15197.72877 + dps: 21476.27517 + tps: 15248.15537 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 21562.5713 - tps: 15309.42563 + dps: 21671.46727 + tps: 15386.74176 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21929.36507 - tps: 15569.8492 + dps: 21846.07434 + tps: 15510.71278 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 35012.38836 - tps: 24858.79573 + dps: 35019.26691 + tps: 24863.67951 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 35411.79454 - tps: 25142.37412 + dps: 35424.82705 + tps: 25151.62721 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43066.10362 - tps: 30576.93357 + dps: 43054.85022 + tps: 30568.94366 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19543.25766 - tps: 13875.71294 + dps: 19612.66488 + tps: 13924.99207 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19718.2986 - tps: 13999.992 + dps: 19749.52047 + tps: 14022.15953 } } dps_results: { key: "TestCombat-Settings-Human-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20292.55681 - tps: 14407.71533 + dps: 20177.62522 + tps: 14326.11391 } } dps_results: { @@ -2638,337 +2638,337 @@ dps_results: { dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 30153.36198 - tps: 21408.88701 + dps: 30122.74091 + tps: 21387.14605 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30424.80614 - tps: 21601.61236 + dps: 30407.09731 + tps: 21589.03909 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36900.86635 - tps: 26199.61511 + dps: 37085.32849 + tps: 26330.58323 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17256.1623 - tps: 12251.87524 + dps: 17256.45041 + tps: 12252.07979 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17425.72277 - tps: 12372.26316 + dps: 17425.14628 + tps: 12371.85386 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 17453.99977 - tps: 12392.33983 + dps: 17727.4044 + tps: 12586.45712 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 26213.63927 - tps: 18611.68388 + dps: 26208.80444 + tps: 18608.25115 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 26132.12811 - tps: 18553.81096 + dps: 26142.77531 + tps: 18561.37047 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31768.82105 - tps: 22555.86295 + dps: 31913.20092 + tps: 22658.37265 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 15203.4532 - tps: 10794.45177 + dps: 15211.15367 + tps: 10799.91911 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15143.18695 - tps: 10751.66273 + dps: 15139.11842 + tps: 10748.77408 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15236.25934 - tps: 10817.74413 + dps: 15497.73032 + tps: 11003.38853 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 29088.70521 - tps: 20652.9807 + dps: 29089.80667 + tps: 20653.76274 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 29357.03868 - tps: 20843.49746 + dps: 29350.61216 + tps: 20838.93464 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35584.29734 - tps: 25264.85111 + dps: 35770.35254 + tps: 25396.9503 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 16746.73165 - tps: 11890.17947 + dps: 16741.69693 + tps: 11886.60482 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 16877.48046 - tps: 11983.01113 + dps: 16881.65561 + tps: 11985.97548 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16844.51105 - tps: 11959.60284 + dps: 17123.13205 + tps: 12157.42376 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 27377.41283 - tps: 19437.96311 + dps: 27374.01851 + tps: 19435.55314 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 27674.58991 - tps: 19648.95883 + dps: 27682.35631 + tps: 19654.47298 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 34276.20721 - tps: 24336.10712 + dps: 34433.00241 + tps: 24447.43171 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 15130.95692 - tps: 10742.97941 + dps: 15114.2091 + tps: 10731.08846 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 15257.48852 - tps: 10832.81685 + dps: 15234.4012 + tps: 10816.42485 } } dps_results: { key: "TestCombat-Settings-Orc-p1_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15540.11958 - tps: 11033.4849 + dps: 15769.07378 + tps: 11196.04238 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 38307.04278 - tps: 27198.00038 + dps: 38301.1637 + tps: 27193.82623 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38694.40337 - tps: 27473.02639 + dps: 38711.43979 + tps: 27485.12225 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 46554.04543 - tps: 33053.37225 + dps: 46518.2816 + tps: 33027.97994 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 22187.39856 - tps: 15753.05298 + dps: 22288.60754 + tps: 15824.91136 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 22347.9868 - tps: 15867.07063 + dps: 22453.36429 + tps: 15941.88865 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-Combat-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22929.13235 - tps: 16279.68397 + dps: 22898.39797 + tps: 16257.86256 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33728.04115 - tps: 23946.90922 + dps: 33756.28986 + tps: 23966.9658 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33747.66215 - tps: 23960.84012 + dps: 33783.02285 + tps: 23985.94622 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40657.14247 - tps: 28866.57116 + dps: 40626.36694 + tps: 28844.72053 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19799.45445 - tps: 14057.61266 + dps: 19879.58831 + tps: 14114.5077 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19738.53781 - tps: 14014.36184 + dps: 19839.25236 + tps: 14085.86918 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Deadly-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20333.94591 - tps: 14437.10159 + dps: 20263.55231 + tps: 14387.12214 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 37058.33819 - tps: 26311.42012 + dps: 37080.56093 + tps: 26327.19826 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 37426.73062 - tps: 26572.97874 + dps: 37471.4134 + tps: 26604.70351 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44978.20715 - tps: 31934.52708 + dps: 44948.6106 + tps: 31913.51352 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 21602.46767 - tps: 15337.75205 + dps: 21673.55243 + tps: 15388.22222 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 21760.2115 - tps: 15449.75017 + dps: 21869.3311 + tps: 15527.22508 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Deadly OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22287.65519 - tps: 15824.23519 + dps: 22203.17698 + tps: 15764.25566 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 35291.49727 - tps: 25056.96306 + dps: 35296.60901 + tps: 25060.5924 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 35705.70735 - tps: 25351.05222 + dps: 35716.78059 + tps: 25358.91422 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 43662.75797 - tps: 31000.55816 + dps: 43650.66007 + tps: 30991.96865 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19726.33898 - tps: 14005.70068 + dps: 19791.81082 + tps: 14052.18568 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19902.07377 - tps: 14130.47238 + dps: 19930.12836 + tps: 14150.39114 } } dps_results: { key: "TestCombat-Settings-Orc-p3_combat-MH Instant OH Instant-combat-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20637.46955 - tps: 14652.60338 + dps: 20520.48188 + tps: 14569.54214 } } dps_results: { @@ -3142,7 +3142,7 @@ dps_results: { dps_results: { key: "TestCombat-SwitchInFrontOfTarget-Default" value: { - dps: 28045.04854 - tps: 19911.98446 + dps: 27995.29301 + tps: 19876.65804 } } diff --git a/sim/rogue/subtlety/TestSubtlety.results b/sim/rogue/subtlety/TestSubtlety.results index fd745ac33c..9f252791b3 100644 --- a/sim/rogue/subtlety/TestSubtlety.results +++ b/sim/rogue/subtlety/TestSubtlety.results @@ -38,3041 +38,3041 @@ character_stats_results: { dps_results: { key: "TestSubtlety-AllItems-AgileShadowspiritDiamond" value: { - dps: 26092.78957 - tps: 18525.88059 + dps: 26045.9535 + tps: 18492.62699 } } dps_results: { key: "TestSubtlety-AllItems-Althor'sAbacus-50366" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 26018.31929 - tps: 18473.0067 + dps: 25939.32156 + tps: 18416.91831 } } dps_results: { key: "TestSubtlety-AllItems-Anhuur'sHymnal-55889" value: { - dps: 24136.72951 - tps: 17137.07795 + dps: 24392.4196 + tps: 17318.61792 } } dps_results: { key: "TestSubtlety-AllItems-Anhuur'sHymnal-56407" value: { - dps: 24336.09058 - tps: 17278.62431 + dps: 24389.56023 + tps: 17316.58776 } } dps_results: { key: "TestSubtlety-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 24970.95735 - tps: 17729.37972 + dps: 24851.68016 + tps: 17644.69291 } } dps_results: { key: "TestSubtlety-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 25010.67089 - tps: 17757.57633 + dps: 25136.56011 + tps: 17846.95768 } } dps_results: { key: "TestSubtlety-AllItems-ArrowofTime-72897" value: { - dps: 26050.50013 - tps: 18495.85509 + dps: 26379.4761 + tps: 18729.42803 } } dps_results: { key: "TestSubtlety-AllItems-AustereShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-BaubleofTrueBlood-50726" value: { - dps: 23932.70304 - tps: 16992.21916 - hps: 92.67705 + dps: 24029.55991 + tps: 17060.98753 + hps: 91.17751 } } dps_results: { key: "TestSubtlety-AllItems-BedrockTalisman-58182" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BellofEnragingResonance-59326" value: { - dps: 24447.38827 - tps: 17357.64567 + dps: 24532.40095 + tps: 17418.00467 } } dps_results: { key: "TestSubtlety-AllItems-BellofEnragingResonance-65053" value: { - dps: 24458.20258 - tps: 17365.32383 + dps: 24534.59893 + tps: 17419.56524 } } dps_results: { key: "TestSubtlety-AllItems-BindingPromise-67037" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BlackfangBattleweave" value: { - dps: 24995.53919 - tps: 17746.83282 + dps: 25096.31118 + tps: 17818.38094 } } dps_results: { key: "TestSubtlety-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 25321.17025 - tps: 17978.03088 + dps: 25274.98921 + tps: 17945.24234 } } dps_results: { key: "TestSubtlety-AllItems-BloodofIsiset-55995" value: { - dps: 24175.42701 - tps: 17164.55318 + dps: 24438.52637 + tps: 17351.35372 } } dps_results: { key: "TestSubtlety-AllItems-BloodofIsiset-56414" value: { - dps: 24064.2053 - tps: 17085.58576 + dps: 24383.30318 + tps: 17312.14526 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 25838.01091 - tps: 18344.98775 + dps: 26030.6456 + tps: 18481.75838 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 24325.40821 - tps: 17271.03983 + dps: 24438.64086 + tps: 17351.43501 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 24397.33496 - tps: 17322.10782 + dps: 24485.64149 + tps: 17384.80546 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 25098.18985 - tps: 17819.71479 + dps: 25233.32246 + tps: 17915.65895 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 24241.19627 - tps: 17211.24935 + dps: 24344.35344 + tps: 17284.49094 } } dps_results: { key: "TestSubtlety-AllItems-Bone-LinkFetish-77210" value: { - dps: 25582.22684 - tps: 18163.38106 + dps: 25714.19783 + tps: 18257.08046 } } dps_results: { key: "TestSubtlety-AllItems-Bone-LinkFetish-77982" value: { - dps: 25557.57897 - tps: 18145.88107 + dps: 25573.57299 + tps: 18157.23682 } } dps_results: { key: "TestSubtlety-AllItems-Bone-LinkFetish-78002" value: { - dps: 25924.64334 - tps: 18406.49677 + dps: 25967.48111 + tps: 18436.91159 } } dps_results: { key: "TestSubtlety-AllItems-BottledLightning-66879" value: { - dps: 24233.61452 - tps: 17205.86631 + dps: 24334.6588 + tps: 17277.60775 } } dps_results: { key: "TestSubtlety-AllItems-BottledWishes-77114" value: { - dps: 24783.72026 - tps: 17596.44138 + dps: 24780.74787 + tps: 17594.33099 } } dps_results: { key: "TestSubtlety-AllItems-BracingShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 17707.40419 + dps: 25405.49131 + tps: 17677.14086 } } dps_results: { key: "TestSubtlety-AllItems-Brawler'sTrophy-232015" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-BurningShadowspiritDiamond" value: { - dps: 25902.53887 - tps: 18390.8026 + dps: 25858.50637 + tps: 18359.53953 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 26518.24576 - tps: 18827.95449 + dps: 26600.72677 + tps: 18886.51601 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 24557.67264 - tps: 17435.94757 + dps: 24680.59071 + tps: 17523.2194 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 25904.81824 - tps: 18392.42095 + dps: 26005.48437 + tps: 18463.8939 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 24528.51691 - tps: 17415.24701 + dps: 24642.20813 + tps: 17495.96777 } } dps_results: { key: "TestSubtlety-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 25843.43478 - tps: 18348.83869 + dps: 25927.26782 + tps: 18408.36015 } } dps_results: { key: "TestSubtlety-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 25139.28014 - tps: 17848.8889 + dps: 25195.6538 + tps: 17888.9142 } } dps_results: { key: "TestSubtlety-AllItems-CoreofRipeness-58184" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CorpseTongueCoin-50349" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 25520.71352 - tps: 18119.7066 + dps: 25626.10915 + tps: 18194.5375 } } dps_results: { key: "TestSubtlety-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 25151.32898 - tps: 17857.44357 + dps: 25429.7831 + tps: 18055.146 } } dps_results: { key: "TestSubtlety-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 25425.20856 - tps: 18051.89808 + dps: 25757.50469 + tps: 18287.82833 } } dps_results: { key: "TestSubtlety-AllItems-CrushingWeight-59506" value: { - dps: 25110.67919 - tps: 17828.58223 + dps: 24923.19636 + tps: 17695.46941 } } dps_results: { key: "TestSubtlety-AllItems-CrushingWeight-65118" value: { - dps: 25038.26202 - tps: 17777.16603 + dps: 25072.9213 + tps: 17801.77412 } } dps_results: { key: "TestSubtlety-AllItems-CunningoftheCruel-77208" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CunningoftheCruel-77980" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-CunningoftheCruel-78000" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 24702.57096 - tps: 17538.82538 + dps: 24768.69156 + tps: 17585.771 } } dps_results: { key: "TestSubtlety-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 25611.37096 - tps: 18184.07338 + dps: 25774.80887 + tps: 18300.1143 } } dps_results: { key: "TestSubtlety-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-DarkmoonCard:Volcano-62047" value: { - dps: 24141.9866 - tps: 17140.81049 + dps: 24123.02207 + tps: 17127.34567 } } dps_results: { key: "TestSubtlety-AllItems-Deathbringer'sWill-50363" value: { - dps: 24764.65057 - tps: 17582.9019 + dps: 24955.55261 + tps: 17718.44236 } } dps_results: { key: "TestSubtlety-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 25389.07446 - tps: 18026.24286 + dps: 25471.04207 + tps: 18084.43987 } } dps_results: { key: "TestSubtlety-AllItems-DislodgedForeignObject-50348" value: { - dps: 24280.9886 - tps: 17239.50191 + dps: 24253.83242 + tps: 17220.22102 } } dps_results: { key: "TestSubtlety-AllItems-Dwyer'sCaber-70141" value: { - dps: 24757.00404 - tps: 17577.47287 + dps: 25016.37585 + tps: 17761.62685 } } dps_results: { key: "TestSubtlety-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-EmberShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 25389.07446 - tps: 18026.24286 + dps: 25471.04207 + tps: 18084.43987 } } dps_results: { key: "TestSubtlety-AllItems-EssenceoftheCyclone-59473" value: { - dps: 25809.84894 - tps: 18324.99275 + dps: 25900.84268 + tps: 18389.5983 } } dps_results: { key: "TestSubtlety-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 24791.92959 - tps: 17602.27001 + dps: 24663.49333 + tps: 17511.08026 } } dps_results: { key: "TestSubtlety-AllItems-EternalShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-EyeofUnmaking-77200" value: { - dps: 24817.76463 - tps: 17620.61289 + dps: 24916.09226 + tps: 17690.42551 } } dps_results: { key: "TestSubtlety-AllItems-EyeofUnmaking-77977" value: { - dps: 24717.18945 - tps: 17549.20451 + dps: 24815.34995 + tps: 17618.89846 } } dps_results: { key: "TestSubtlety-AllItems-EyeofUnmaking-77997" value: { - dps: 24928.39733 - tps: 17699.1621 + dps: 25026.90881 + tps: 17769.10525 } } dps_results: { key: "TestSubtlety-AllItems-FallofMortality-59500" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-FallofMortality-65124" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-FangsoftheFather" value: { - dps: 31242.64159 - tps: 22182.27553 + dps: 31392.39916 + tps: 22288.6034 } } dps_results: { key: "TestSubtlety-AllItems-Fear-77945" value: { - dps: 26645.85926 - tps: 18918.56007 + dps: 27043.81252 + tps: 19201.10689 } } dps_results: { key: "TestSubtlety-AllItems-FieryQuintessence-69000" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Figurine-DemonPanther-52199" value: { - dps: 25926.22155 - tps: 18407.6173 + dps: 25863.36917 + tps: 18362.99211 } } dps_results: { key: "TestSubtlety-AllItems-Figurine-DreamOwl-52354" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Figurine-KingofBoars-52351" value: { - dps: 24438.76071 - tps: 17351.5201 + dps: 24766.1765 + tps: 17583.98531 } } dps_results: { key: "TestSubtlety-AllItems-FireoftheDeep-77117" value: { - dps: 24326.21999 - tps: 17271.61619 + dps: 24460.40354 + tps: 17366.88652 } } dps_results: { key: "TestSubtlety-AllItems-FleetShadowspiritDiamond" value: { - dps: 25350.62869 - tps: 17998.94637 + dps: 25416.5518 + tps: 18045.75178 } } dps_results: { key: "TestSubtlety-AllItems-FluidDeath-58181" value: { - dps: 25770.2377 - tps: 18296.86877 + dps: 25927.6702 + tps: 18408.64584 } } dps_results: { key: "TestSubtlety-AllItems-ForlornShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-FuryofAngerforge-59461" value: { - dps: 24841.23509 - tps: 17637.27691 + dps: 24922.89347 + tps: 17695.25436 } } dps_results: { key: "TestSubtlety-AllItems-GaleofShadows-56138" value: { - dps: 24465.81513 - tps: 17370.72874 + dps: 24510.88533 + tps: 17402.72858 } } dps_results: { key: "TestSubtlety-AllItems-GaleofShadows-56462" value: { - dps: 24374.32837 - tps: 17305.77315 + dps: 24523.71619 + tps: 17411.8385 } } dps_results: { key: "TestSubtlety-AllItems-GearDetector-61462" value: { - dps: 24876.23104 - tps: 17662.12404 + dps: 25031.01976 + tps: 17772.02403 } } dps_results: { key: "TestSubtlety-AllItems-Gladiator'sVestments" value: { - dps: 20969.70352 - tps: 14888.4895 + dps: 20850.69329 + tps: 14803.99224 } } dps_results: { key: "TestSubtlety-AllItems-GlowingTwilightScale-54589" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Golad,TwilightofAspects-77949" value: { - dps: 27969.98281 - tps: 19858.68779 + dps: 28086.68465 + tps: 19941.5461 } } dps_results: { key: "TestSubtlety-AllItems-GraceoftheHerald-55266" value: { - dps: 24932.09 - tps: 17701.7839 + dps: 25026.07191 + tps: 17768.51106 } } dps_results: { key: "TestSubtlety-AllItems-GraceoftheHerald-56295" value: { - dps: 25240.68816 - tps: 17920.8886 + dps: 25466.98079 + tps: 18081.55636 } } dps_results: { key: "TestSubtlety-AllItems-HarmlightToken-63839" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 24296.42024 - tps: 17250.45837 + dps: 24389.55852 + tps: 17316.58655 } } dps_results: { key: "TestSubtlety-AllItems-HeartofIgnacious-59514" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-HeartofIgnacious-65110" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-HeartofRage-59224" value: { - dps: 24420.58211 - tps: 17338.6133 + dps: 24526.45809 + tps: 17413.78524 } } dps_results: { key: "TestSubtlety-AllItems-HeartofRage-65072" value: { - dps: 24463.42785 - tps: 17369.03378 + dps: 24599.82298 + tps: 17465.87432 } } dps_results: { key: "TestSubtlety-AllItems-HeartofSolace-55868" value: { - dps: 24868.73544 - tps: 17656.80216 + dps: 24918.39859 + tps: 17692.063 } } dps_results: { key: "TestSubtlety-AllItems-HeartofSolace-56393" value: { - dps: 24820.72674 - tps: 17622.71599 + dps: 24959.48378 + tps: 17721.23348 } } dps_results: { key: "TestSubtlety-AllItems-HeartofThunder-55845" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-HeartofThunder-56370" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-HeartoftheVile-66969" value: { - dps: 25133.63965 - tps: 17844.88415 + dps: 25080.26316 + tps: 17806.98685 } } dps_results: { key: "TestSubtlety-AllItems-Heartpierce-50641" value: { - dps: 26092.78957 - tps: 18525.88059 + dps: 26045.9535 + tps: 18492.62699 } } dps_results: { key: "TestSubtlety-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 25389.07446 - tps: 18026.24286 + dps: 25471.04207 + tps: 18084.43987 } } dps_results: { key: "TestSubtlety-AllItems-ImpatienceofYouth-62464" value: { - dps: 24577.22436 - tps: 17449.8293 + dps: 24545.91016 + tps: 17427.59621 } } dps_results: { key: "TestSubtlety-AllItems-ImpatienceofYouth-62469" value: { - dps: 24577.22436 - tps: 17449.8293 + dps: 24545.91016 + tps: 17427.59621 } } dps_results: { key: "TestSubtlety-AllItems-ImpetuousQuery-55881" value: { - dps: 24175.42701 - tps: 17164.55318 + dps: 24438.52637 + tps: 17351.35372 } } dps_results: { key: "TestSubtlety-AllItems-ImpetuousQuery-56406" value: { - dps: 24064.2053 - tps: 17085.58576 + dps: 24383.30318 + tps: 17312.14526 } } dps_results: { key: "TestSubtlety-AllItems-IndomitablePride-77211" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-IndomitablePride-77983" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-IndomitablePride-78003" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 24841.32422 - tps: 17637.3402 + dps: 24944.51374 + tps: 17710.60476 } } dps_results: { key: "TestSubtlety-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 24719.53392 - tps: 17550.86908 + dps: 24947.44571 + tps: 17712.68645 } } dps_results: { key: "TestSubtlety-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 25058.58825 - tps: 17791.59765 + dps: 24950.82941 + tps: 17715.08888 } } dps_results: { key: "TestSubtlety-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 24123.41648 - tps: 17127.6257 + dps: 24239.81966 + tps: 17210.27196 } } dps_results: { key: "TestSubtlety-AllItems-JarofAncientRemedies-59354" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-JarofAncientRemedies-65029" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-JawsofDefeat-68926" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-JawsofDefeat-69111" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-JawsofRetribution" value: { - dps: 27090.26275 - tps: 19234.08655 + dps: 27286.49916 + tps: 19373.4144 } } dps_results: { key: "TestSubtlety-AllItems-JujuofNimbleness-63840" value: { - dps: 25321.17025 - tps: 17978.03088 + dps: 25274.98921 + tps: 17945.24234 } } dps_results: { key: "TestSubtlety-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 25429.85871 - tps: 18055.19969 + dps: 25438.48512 + tps: 18061.32443 } } dps_results: { key: "TestSubtlety-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 26007.38118 - tps: 18465.24064 + dps: 26011.2735 + tps: 18468.00418 } } dps_results: { key: "TestSubtlety-AllItems-KiroptyricSigil-77113" value: { - dps: 26764.14222 - tps: 19002.54098 + dps: 27164.10157 + tps: 19286.51212 } } dps_results: { key: "TestSubtlety-AllItems-KvaldirBattleStandard-59685" value: { - dps: 24435.64402 - tps: 17349.30725 + dps: 24436.73234 + tps: 17350.07996 } } dps_results: { key: "TestSubtlety-AllItems-KvaldirBattleStandard-59689" value: { - dps: 24435.64402 - tps: 17349.30725 + dps: 24436.73234 + tps: 17350.07996 } } dps_results: { key: "TestSubtlety-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 24171.16264 - tps: 17161.52547 + dps: 24101.32892 + tps: 17111.94353 } } dps_results: { key: "TestSubtlety-AllItems-LeadenDespair-55816" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-LeadenDespair-56347" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-LeftEyeofRajh-56102" value: { - dps: 25344.44375 - tps: 17994.55507 + dps: 25535.45625 + tps: 18130.17394 } } dps_results: { key: "TestSubtlety-AllItems-LeftEyeofRajh-56427" value: { - dps: 25537.19463 - tps: 18131.40819 + dps: 25791.25299 + tps: 18311.78962 } } dps_results: { key: "TestSubtlety-AllItems-LicensetoSlay-58180" value: { - dps: 24579.37666 - tps: 17451.35743 + dps: 24973.30671 + tps: 17731.04776 } } dps_results: { key: "TestSubtlety-AllItems-MagnetiteMirror-55814" value: { - dps: 24220.1229 - tps: 17196.28726 + dps: 24322.5025 + tps: 17268.97677 } } dps_results: { key: "TestSubtlety-AllItems-MagnetiteMirror-56345" value: { - dps: 24313.70146 - tps: 17262.72804 + dps: 24417.87915 + tps: 17336.6942 } } dps_results: { key: "TestSubtlety-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-MarkofKhardros-56132" value: { - dps: 24352.78354 - tps: 17290.47631 + dps: 24563.97465 + tps: 17440.422 } } dps_results: { key: "TestSubtlety-AllItems-MarkofKhardros-56458" value: { - dps: 24382.20884 - tps: 17311.36828 + dps: 24713.60747 + tps: 17546.66131 } } dps_results: { key: "TestSubtlety-AllItems-MatrixRestabilizer-68994" value: { - dps: 26249.06797 - tps: 18636.83826 + dps: 26354.30563 + tps: 18711.557 } } dps_results: { key: "TestSubtlety-AllItems-MatrixRestabilizer-69150" value: { - dps: 26198.27157 - tps: 18600.77281 + dps: 26704.78104 + tps: 18960.39454 } } dps_results: { key: "TestSubtlety-AllItems-MawofOblivion" value: { - dps: 28314.7697 - tps: 20103.48649 + dps: 28441.93024 + tps: 20193.77047 } } dps_results: { key: "TestSubtlety-AllItems-MightoftheOcean-55251" value: { - dps: 24422.57097 - tps: 17340.02539 + dps: 24604.73233 + tps: 17469.35996 } } dps_results: { key: "TestSubtlety-AllItems-MightoftheOcean-56285" value: { - dps: 24709.32328 - tps: 17543.61953 + dps: 24765.77232 + tps: 17583.69835 } } dps_results: { key: "TestSubtlety-AllItems-MirrorofBrokenImages-62466" value: { - dps: 24141.9866 - tps: 17140.81049 + dps: 24123.02207 + tps: 17127.34567 } } dps_results: { key: "TestSubtlety-AllItems-MirrorofBrokenImages-62471" value: { - dps: 24141.9866 - tps: 17140.81049 + dps: 24123.02207 + tps: 17127.34567 } } dps_results: { key: "TestSubtlety-AllItems-MithrilStopwatch-232013" value: { - dps: 24436.19881 - tps: 17349.70116 + dps: 24498.58445 + tps: 17393.99496 } } dps_results: { key: "TestSubtlety-AllItems-MoonwellChalice-70142" value: { - dps: 24304.94158 - tps: 17256.50852 + dps: 24535.68448 + tps: 17420.33598 } } dps_results: { key: "TestSubtlety-AllItems-MoonwellPhial-70143" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-NecromanticFocus-68982" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-NecromanticFocus-69139" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Oremantle'sFavor-61448" value: { - dps: 24517.74106 - tps: 17407.59615 + dps: 24645.25372 + tps: 17498.13014 } } dps_results: { key: "TestSubtlety-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 24172.61843 - tps: 17162.55908 + dps: 24388.68183 + tps: 17315.9641 } } dps_results: { key: "TestSubtlety-AllItems-PorcelainCrab-55237" value: { - dps: 23979.63172 - tps: 17025.53852 + dps: 24189.59544 + tps: 17174.61277 } } dps_results: { key: "TestSubtlety-AllItems-PorcelainCrab-56280" value: { - dps: 24292.40512 - tps: 17247.60764 + dps: 24438.85318 + tps: 17351.58576 } } dps_results: { key: "TestSubtlety-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 25448.98561 - tps: 18068.77979 + dps: 25405.49131 + tps: 18037.89883 } } dps_results: { key: "TestSubtlety-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 25828.55388 - tps: 18338.27326 + dps: 25871.23239 + tps: 18368.575 } } dps_results: { key: "TestSubtlety-AllItems-Rainsong-55854" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Rainsong-56377" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Rathrak,thePoisonousMind-77195" value: { - dps: 25483.07098 - tps: 18092.98039 + dps: 25561.89866 + tps: 18148.94805 } } dps_results: { key: "TestSubtlety-AllItems-Rathrak,thePoisonousMind-78475" value: { - dps: 26013.57917 - tps: 18469.64121 + dps: 26096.11072 + tps: 18528.23861 } } dps_results: { key: "TestSubtlety-AllItems-Rathrak,thePoisonousMind-78484" value: { - dps: 25011.74065 - tps: 17758.33586 + dps: 25087.26701 + tps: 17811.95957 } } dps_results: { key: "TestSubtlety-AllItems-ReflectionoftheLight-77115" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ResolveofUndying-77201" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ResolveofUndying-77978" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ResolveofUndying-77998" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 25960.06325 - tps: 18431.6449 + dps: 25915.9698 + tps: 18400.33856 } } dps_results: { key: "TestSubtlety-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 25902.53887 - tps: 18390.8026 + dps: 25858.50637 + tps: 18359.53953 } } dps_results: { key: "TestSubtlety-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 25935.73793 - tps: 18414.37393 + dps: 25961.10694 + tps: 18432.38592 } } dps_results: { key: "TestSubtlety-AllItems-RightEyeofRajh-56100" value: { - dps: 24519.83165 - tps: 17409.08047 + dps: 24787.59633 + tps: 17599.1934 } } dps_results: { key: "TestSubtlety-AllItems-RightEyeofRajh-56431" value: { - dps: 24762.02884 - tps: 17581.04047 + dps: 24819.26807 + tps: 17621.68033 } } dps_results: { key: "TestSubtlety-AllItems-RosaryofLight-72901" value: { - dps: 24881.26814 - tps: 17665.70038 + dps: 24983.76758 + tps: 17738.47498 } } dps_results: { key: "TestSubtlety-AllItems-RottingSkull-77116" value: { - dps: 25092.92387 - tps: 17815.97595 + dps: 25399.52145 + tps: 18033.66023 } } dps_results: { key: "TestSubtlety-AllItems-RuneofZeth-68998" value: { - dps: 24514.86243 - tps: 17405.55232 + dps: 24545.66484 + tps: 17427.42204 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 26062.31064 - tps: 18504.24055 + dps: 26389.42567 + tps: 18736.49223 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 26176.77299 - tps: 18585.50882 + dps: 26472.14722 + tps: 18795.22453 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 24456.91276 - tps: 17364.40806 + dps: 24575.62915 + tps: 17448.6967 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 24486.62401 - tps: 17385.50305 + dps: 24606.57935 + tps: 17470.67134 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 25848.28728 - tps: 18352.28397 + dps: 25863.77239 + tps: 18363.2784 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 26014.42146 - tps: 18470.23923 + dps: 25910.99816 + tps: 18396.8087 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 24407.9845 - tps: 17329.66899 + dps: 24513.32685 + tps: 17404.46206 } } dps_results: { key: "TestSubtlety-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 24457.84692 - tps: 17365.07131 + dps: 24566.82937 + tps: 17442.44885 } } dps_results: { key: "TestSubtlety-AllItems-ScalesofLife-68915" value: { - dps: 23932.70304 - tps: 16992.21916 - hps: 308.2086 + dps: 24029.55991 + tps: 17060.98753 + hps: 309.7614 } } dps_results: { key: "TestSubtlety-AllItems-ScalesofLife-69109" value: { - dps: 23932.70304 - tps: 16992.21916 - hps: 347.65642 + dps: 24029.55991 + tps: 17060.98753 + hps: 349.40796 } } dps_results: { key: "TestSubtlety-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 24970.55995 - tps: 17729.09756 + dps: 24998.7498 + tps: 17749.11236 } } dps_results: { key: "TestSubtlety-AllItems-SeaStar-55256" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-SeaStar-56290" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ShardofWoe-60233" value: { - dps: 24549.23737 - tps: 17429.95853 + dps: 24442.50752 + tps: 17354.18034 } } dps_results: { key: "TestSubtlety-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 24630.18819 - tps: 17487.43362 + dps: 24783.2418 + tps: 17596.10168 } } dps_results: { key: "TestSubtlety-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Skardyn'sGrace-56115" value: { - dps: 25179.60759 - tps: 17877.52139 + dps: 25214.18715 + tps: 17902.07287 } } dps_results: { key: "TestSubtlety-AllItems-Skardyn'sGrace-56440" value: { - dps: 25334.78844 - tps: 17987.69979 + dps: 25496.72183 + tps: 18102.6725 } } dps_results: { key: "TestSubtlety-AllItems-Sorrowsong-55879" value: { - dps: 24175.42701 - tps: 17164.55318 + dps: 24438.52637 + tps: 17351.35372 } } dps_results: { key: "TestSubtlety-AllItems-Sorrowsong-56400" value: { - dps: 24064.2053 - tps: 17085.58576 + dps: 24383.30318 + tps: 17312.14526 } } dps_results: { key: "TestSubtlety-AllItems-Soul'sAnguish-66994" value: { - dps: 24334.37843 - tps: 17277.40868 + dps: 24595.75441 + tps: 17462.98563 } } dps_results: { key: "TestSubtlety-AllItems-SoulCasket-58183" value: { - dps: 24141.9866 - tps: 17140.81049 + dps: 24123.02207 + tps: 17127.34567 } } dps_results: { key: "TestSubtlety-AllItems-SoulshifterVortex-77206" value: { - dps: 24615.75357 - tps: 17477.18503 + dps: 24756.36764 + tps: 17577.02102 } } dps_results: { key: "TestSubtlety-AllItems-SoulshifterVortex-77970" value: { - dps: 24425.72427 - tps: 17342.26423 + dps: 24688.51352 + tps: 17528.8446 } } dps_results: { key: "TestSubtlety-AllItems-SoulshifterVortex-77990" value: { - dps: 24464.60084 - tps: 17369.86659 + dps: 24631.33803 + tps: 17488.25 } } dps_results: { key: "TestSubtlety-AllItems-SpidersilkSpindle-68981" value: { - dps: 24396.62141 - tps: 17321.6012 + dps: 24277.13104 + tps: 17236.76304 } } dps_results: { key: "TestSubtlety-AllItems-SpidersilkSpindle-69138" value: { - dps: 24354.03802 - tps: 17291.36699 + dps: 24469.81414 + tps: 17373.56804 } } dps_results: { key: "TestSubtlety-AllItems-StarcatcherCompass-77202" value: { - dps: 26833.73158 - tps: 19051.94942 + dps: 26629.30061 + tps: 18906.80343 } } dps_results: { key: "TestSubtlety-AllItems-StarcatcherCompass-77973" value: { - dps: 26313.5835 - tps: 18682.64429 + dps: 26389.60471 + tps: 18736.61934 } } dps_results: { key: "TestSubtlety-AllItems-StarcatcherCompass-77993" value: { - dps: 26886.65451 - tps: 19089.5247 + dps: 26982.38006 + tps: 19157.48984 } } dps_results: { key: "TestSubtlety-AllItems-StayofExecution-68996" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Stonemother'sKiss-61411" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-StumpofTime-62465" value: { - dps: 24190.11905 - tps: 17174.98453 + dps: 24579.34811 + tps: 17451.33716 } } dps_results: { key: "TestSubtlety-AllItems-StumpofTime-62470" value: { - dps: 24190.11905 - tps: 17174.98453 + dps: 24579.34811 + tps: 17451.33716 } } dps_results: { key: "TestSubtlety-AllItems-SymbioticWorm-59332" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-SymbioticWorm-65048" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 24503.32336 - tps: 17397.35959 + dps: 24807.26432 + tps: 17613.15767 } } dps_results: { key: "TestSubtlety-AllItems-TearofBlood-55819" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-TearofBlood-56351" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 24192.83505 - tps: 17176.91288 + dps: 24299.6252 + tps: 17252.73389 } } dps_results: { key: "TestSubtlety-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 24064.2053 - tps: 17085.58576 + dps: 24383.30318 + tps: 17312.14526 } } dps_results: { key: "TestSubtlety-AllItems-TheHungerer-68927" value: { - dps: 26050.15631 - tps: 18495.61098 + dps: 26166.04424 + tps: 18577.89141 } } dps_results: { key: "TestSubtlety-AllItems-TheHungerer-69112" value: { - dps: 26220.29823 - tps: 18616.41174 + dps: 26426.52133 + tps: 18762.83014 } } dps_results: { key: "TestSubtlety-AllItems-TheSleeper-77947" value: { - dps: 27261.10656 - tps: 19355.38566 + dps: 27480.4261 + tps: 19511.10253 } } dps_results: { key: "TestSubtlety-AllItems-Theralion'sMirror-59519" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Theralion'sMirror-65105" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Throngus'sFinger-56121" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Throngus'sFinger-56449" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Tia'sGrace-55874" value: { - dps: 25338.06324 - tps: 17990.0249 + dps: 25594.29447 + tps: 18171.94908 } } dps_results: { key: "TestSubtlety-AllItems-Tia'sGrace-56394" value: { - dps: 25315.08776 - tps: 17973.71231 + dps: 25793.96239 + tps: 18313.7133 } } dps_results: { key: "TestSubtlety-AllItems-TinyAbominationinaJar-50706" value: { - dps: 24542.17027 - tps: 17424.94089 + dps: 24943.54103 + tps: 17709.91413 } } dps_results: { key: "TestSubtlety-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 23819.4011 - tps: 16911.77478 + dps: 23898.02673 + tps: 16967.59898 } } dps_results: { key: "TestSubtlety-AllItems-UnheededWarning-59520" value: { - dps: 25551.21591 - tps: 18141.3633 + dps: 25642.13641 + tps: 18205.91685 } } dps_results: { key: "TestSubtlety-AllItems-UnquenchableFlame-67101" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-UnsolvableRiddle-62463" value: { - dps: 25778.16644 - tps: 18302.49817 + dps: 26180.59677 + tps: 18588.2237 } } dps_results: { key: "TestSubtlety-AllItems-UnsolvableRiddle-62468" value: { - dps: 25778.16644 - tps: 18302.49817 + dps: 26180.59677 + tps: 18588.2237 } } dps_results: { key: "TestSubtlety-AllItems-UnsolvableRiddle-68709" value: { - dps: 25778.16644 - tps: 18302.49817 + dps: 26180.59677 + tps: 18588.2237 } } dps_results: { key: "TestSubtlety-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-VariablePulseLightningCapacitor-69110" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-Varo'then'sBrooch-72899" value: { - dps: 24590.77551 - tps: 17459.45062 + dps: 24652.42869 + tps: 17503.22437 } } dps_results: { key: "TestSubtlety-AllItems-VeilofLies-72900" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-VesselofAcceleration-68995" value: { - dps: 24936.80741 - tps: 17705.13326 + dps: 25049.25106 + tps: 17784.96825 } } dps_results: { key: "TestSubtlety-AllItems-VesselofAcceleration-69167" value: { - dps: 24935.78355 - tps: 17704.40632 + dps: 25250.84532 + tps: 17928.10018 } } dps_results: { key: "TestSubtlety-AllItems-VestmentsoftheDarkPhoenix" value: { - dps: 25741.67458 - tps: 18276.58895 + dps: 25939.56089 + tps: 18417.08823 } } dps_results: { key: "TestSubtlety-AllItems-VialofShadows-77207" value: { - dps: 26560.08313 - tps: 18857.65902 + dps: 26391.27815 + tps: 18737.80749 } } dps_results: { key: "TestSubtlety-AllItems-VialofShadows-77979" value: { - dps: 26025.27503 - tps: 18477.94527 + dps: 26197.00382 + tps: 18599.87271 } } dps_results: { key: "TestSubtlety-AllItems-VialofShadows-77999" value: { - dps: 26601.60414 - tps: 18887.13894 + dps: 26895.60029 + tps: 19095.87621 } } dps_results: { key: "TestSubtlety-AllItems-VialofStolenMemories-59515" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-VialofStolenMemories-65109" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 25638.41872 - tps: 18203.27729 + dps: 25765.18922 + tps: 18293.28435 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 25798.18462 - tps: 18316.71108 + dps: 25961.44704 + tps: 18432.6274 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 24347.36869 - tps: 17286.63177 + dps: 24461.51709 + tps: 17367.67714 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 24396.19848 - tps: 17321.30092 + dps: 24512.38308 + tps: 17403.79199 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 24222.63532 - tps: 17198.07108 + dps: 24432.01877 + tps: 17346.73333 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 24414.3462 - tps: 17334.1858 + dps: 24553.08849 + tps: 17432.69283 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 24481.24539 - tps: 17381.68423 + dps: 24534.89311 + tps: 17419.77411 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 24176.51173 - tps: 17165.32333 + dps: 24167.07829 + tps: 17158.62559 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 25435.05119 - tps: 18058.88634 + dps: 25385.95797 + tps: 18024.03016 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 25577.80264 - tps: 18160.23988 + dps: 25552.73478 + tps: 18142.44169 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 24309.22955 - tps: 17259.55298 + dps: 24420.22927 + tps: 17338.36278 } } dps_results: { key: "TestSubtlety-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 24358.57333 - tps: 17294.58706 + dps: 24463.23529 + tps: 17368.89706 } } dps_results: { key: "TestSubtlety-AllItems-Vishanka,JawsoftheEarth-78359" value: { - dps: 25840.92207 - tps: 18347.05467 + dps: 25930.14293 + tps: 18410.40148 } } dps_results: { key: "TestSubtlety-AllItems-Vishanka,JawsoftheEarth-78471" value: { - dps: 25884.67196 - tps: 18378.11709 + dps: 26015.62919 + tps: 18471.09673 } } dps_results: { key: "TestSubtlety-AllItems-Vishanka,JawsoftheEarth-78480" value: { - dps: 25743.15928 - tps: 18277.64309 + dps: 25858.77739 + tps: 18359.73195 } } dps_results: { key: "TestSubtlety-AllItems-WillofUnbinding-77198" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-WillofUnbinding-77975" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-WillofUnbinding-77995" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-WindDancer'sRegalia" value: { - dps: 23037.56947 - tps: 16356.67432 + dps: 23082.83443 + tps: 16388.81244 } } dps_results: { key: "TestSubtlety-AllItems-WitchingHourglass-55787" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-WitchingHourglass-56320" value: { - dps: 23932.70304 - tps: 16992.21916 + dps: 24029.55991 + tps: 17060.98753 } } dps_results: { key: "TestSubtlety-AllItems-World-QuellerFocus-63842" value: { - dps: 24121.75949 - tps: 17126.44924 + dps: 24317.7923 + tps: 17265.63254 } } dps_results: { key: "TestSubtlety-AllItems-WrathofUnchaining-77197" value: { - dps: 27218.79612 - tps: 19325.34524 + dps: 27398.22237 + tps: 19452.73788 } } dps_results: { key: "TestSubtlety-AllItems-WrathofUnchaining-77974" value: { - dps: 26879.0825 - tps: 19084.14858 + dps: 26998.4998 + tps: 19168.93486 } } dps_results: { key: "TestSubtlety-AllItems-WrathofUnchaining-77994" value: { - dps: 27644.66263 - tps: 19627.71047 + dps: 27750.16911 + tps: 19702.62007 } } dps_results: { key: "TestSubtlety-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 24006.70038 - tps: 17044.75727 + dps: 24360.98882 + tps: 17296.30206 } } dps_results: { key: "TestSubtlety-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 24006.70038 - tps: 17044.75727 + dps: 24360.98882 + tps: 17296.30206 } } dps_results: { key: "TestSubtlety-Average-Default" value: { - dps: 26174.97744 - tps: 18584.23398 + dps: 26234.50652 + tps: 18626.49963 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 24023.73823 - tps: 17056.85414 + dps: 24101.86259 + tps: 17112.32244 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 24023.73823 - tps: 17056.85414 + dps: 24101.86259 + tps: 17112.32244 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32064.79482 - tps: 22766.00432 + dps: 32441.626 + tps: 23033.55446 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 13268.15503 - tps: 9420.39007 + dps: 13102.65302 + tps: 9302.88365 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 13268.15503 - tps: 9420.39007 + dps: 13102.65302 + tps: 9302.88365 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 14941.50931 - tps: 10608.47161 + dps: 14788.04866 + tps: 10499.51455 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 26036.27941 - tps: 18485.75838 + dps: 26013.92928 + tps: 18469.88979 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 26036.27941 - tps: 18485.75838 + dps: 26013.92928 + tps: 18469.88979 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 34044.86774 - tps: 24171.8561 + dps: 34624.86679 + tps: 24583.65542 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 14345.80469 - tps: 10185.52133 + dps: 14262.64532 + tps: 10126.47817 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14345.80469 - tps: 10185.52133 + dps: 14262.64532 + tps: 10126.47817 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15883.32638 - tps: 11277.16173 + dps: 15853.67411 + tps: 11256.10862 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 23666.75533 - tps: 16803.39629 + dps: 23850.36517 + tps: 16933.75927 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23666.75533 - tps: 16803.39629 + dps: 23850.36517 + tps: 16933.75927 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32137.80662 - tps: 22817.8427 + dps: 32165.81953 + tps: 22837.73187 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 13084.62054 - tps: 9290.08058 + dps: 12987.86577 + tps: 9221.3847 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 13084.62054 - tps: 9290.08058 + dps: 12987.86577 + tps: 9221.3847 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 14913.69162 - tps: 10588.72105 + dps: 14761.26977 + tps: 10480.50154 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 26092.78957 - tps: 18525.88059 + dps: 26045.9535 + tps: 18492.62699 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 26092.78957 - tps: 18525.88059 + dps: 26045.9535 + tps: 18492.62699 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 34703.32715 - tps: 24639.36228 + dps: 34976.80487 + tps: 24833.53146 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 14205.79937 - tps: 10086.11755 + dps: 14293.96982 + tps: 10148.71858 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14205.79937 - tps: 10086.11755 + dps: 14293.96982 + tps: 10148.71858 } } dps_results: { key: "TestSubtlety-Settings-Human-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15529.64562 - tps: 11026.04839 + dps: 16119.08919 + tps: 11444.55333 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 31167.16498 - tps: 22128.68714 + dps: 31031.15113 + tps: 22032.1173 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31167.16498 - tps: 22128.68714 + dps: 31031.15113 + tps: 22032.1173 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41412.66458 - tps: 29402.99185 + dps: 41526.26674 + tps: 29483.64938 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17587.02102 - tps: 12486.78492 + dps: 17722.41743 + tps: 12582.91637 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17587.02102 - tps: 12486.78492 + dps: 17722.41743 + tps: 12582.91637 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19595.94267 - tps: 13913.11929 + dps: 20172.28317 + tps: 14322.32105 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33377.36016 - tps: 23697.92572 + dps: 33383.57277 + tps: 23702.33667 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33377.36016 - tps: 23697.92572 + dps: 33383.57277 + tps: 23702.33667 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44068.75757 - tps: 31288.81787 + dps: 44468.38584 + tps: 31572.55394 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 18926.38902 - tps: 13437.73621 + dps: 18992.21351 + tps: 13484.47159 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 18926.38902 - tps: 13437.73621 + dps: 18992.21351 + tps: 13484.47159 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21224.15534 - tps: 15069.15029 + dps: 21445.63372 + tps: 15226.39994 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 31137.94816 - tps: 22107.9432 + dps: 31093.55424 + tps: 22076.42351 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31137.94816 - tps: 22107.9432 + dps: 31093.55424 + tps: 22076.42351 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41931.83441 - tps: 29771.60243 + dps: 41888.51227 + tps: 29740.84371 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17397.58295 - tps: 12352.28389 + dps: 17476.3799 + tps: 12408.22973 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17397.58295 - tps: 12352.28389 + dps: 17476.3799 + tps: 12408.22973 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19943.85192 - tps: 14160.13486 + dps: 20247.48996 + tps: 14375.71787 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33461.0569 - tps: 23757.3504 + dps: 33646.34945 + tps: 23888.90811 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33461.0569 - tps: 23757.3504 + dps: 33646.34945 + tps: 23888.90811 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44305.2215 - tps: 31456.70726 + dps: 44275.74212 + tps: 31435.7769 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19057.25707 - tps: 13530.65252 + dps: 18987.31419 + tps: 13480.99307 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19057.25707 - tps: 13530.65252 + dps: 18987.31419 + tps: 13480.99307 } } dps_results: { key: "TestSubtlety-Settings-Human-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21225.19117 - tps: 15069.88573 + dps: 21751.8393 + tps: 15443.8059 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 45649.04068 - tps: 32410.81888 + dps: 45689.12518 + tps: 32439.27888 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 45649.04068 - tps: 32410.81888 + dps: 45689.12518 + tps: 32439.27888 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 57207.32633 - tps: 40617.20169 + dps: 57829.78997 + tps: 41059.15088 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 27030.23275 - tps: 19191.46525 + dps: 27029.61334 + tps: 19191.02547 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 27030.23275 - tps: 19191.46525 + dps: 27029.61334 + tps: 19191.02547 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30456.37332 - tps: 21624.02506 + dps: 30549.08573 + tps: 21689.85087 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 48567.66574 - tps: 34483.04268 + dps: 48620.09181 + tps: 34520.26519 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 48567.66574 - tps: 34483.04268 + dps: 48620.09181 + tps: 34520.26519 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 60110.30347 - tps: 42678.31546 + dps: 60476.47489 + tps: 42938.29717 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28765.23763 - tps: 20423.31872 + dps: 28715.43886 + tps: 20387.96159 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28765.23763 - tps: 20423.31872 + dps: 28715.43886 + tps: 20387.96159 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32269.44727 - tps: 22911.30756 + dps: 32209.66025 + tps: 22868.85878 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 45816.26208 - tps: 32529.54608 + dps: 46062.84421 + tps: 32704.61939 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 45816.26208 - tps: 32529.54608 + dps: 46062.84421 + tps: 32704.61939 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 58297.1785 - tps: 41390.99673 + dps: 58727.67986 + tps: 41696.6527 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 26752.73704 - tps: 18994.4433 + dps: 26815.21657 + tps: 19038.80376 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26752.73704 - tps: 18994.4433 + dps: 26815.21657 + tps: 19038.80376 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29744.90149 - tps: 21118.88006 + dps: 30692.48201 + tps: 21791.66222 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 48955.0216 - tps: 34758.06533 + dps: 48842.16651 + tps: 34677.93822 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 48955.0216 - tps: 34758.06533 + dps: 48842.16651 + tps: 34677.93822 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 61241.90876 - tps: 43481.75522 + dps: 61118.64618 + tps: 43394.23879 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28755.62077 - tps: 20416.49074 + dps: 28891.30756 + tps: 20512.82837 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28755.62077 - tps: 20416.49074 + dps: 28891.30756 + tps: 20512.82837 } } dps_results: { key: "TestSubtlety-Settings-Human-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31585.70309 - tps: 22425.84919 + dps: 31800.48775 + tps: 22578.34631 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 24259.80678 - tps: 17224.46281 + dps: 24331.50365 + tps: 17275.36759 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 24259.80678 - tps: 17224.46281 + dps: 24331.50365 + tps: 17275.36759 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32539.57435 - tps: 23103.09779 + dps: 32933.09543 + tps: 23382.49776 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 13389.3626 - tps: 9506.44745 + dps: 13226.30883 + tps: 9390.67927 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 13389.3626 - tps: 9506.44745 + dps: 13226.30883 + tps: 9390.67927 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15199.98813 - tps: 10791.99157 + dps: 15050.78142 + tps: 10686.05481 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 26281.22684 - tps: 18659.67105 + dps: 26263.59766 + tps: 18647.15434 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 26281.22684 - tps: 18659.67105 + dps: 26263.59766 + tps: 18647.15434 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 34551.81894 - tps: 24531.79145 + dps: 35137.88797 + tps: 24947.90046 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 14479.69358 - tps: 10280.58244 + dps: 14392.70684 + tps: 10218.82186 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14479.69358 - tps: 10280.58244 + dps: 14392.70684 + tps: 10218.82186 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 16146.48035 - tps: 11464.00105 + dps: 16129.70523 + tps: 11452.09071 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 23883.84739 - tps: 16957.53164 + dps: 24054.83314 + tps: 17078.93153 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 23883.84739 - tps: 16957.53164 + dps: 24054.83314 + tps: 17078.93153 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32627.88795 - tps: 23165.80045 + dps: 32667.85106 + tps: 23194.17425 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 13201.45224 - tps: 9373.03109 + dps: 13110.26011 + tps: 9308.28468 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 13201.45224 - tps: 9373.03109 + dps: 13110.26011 + tps: 9308.28468 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15159.67022 - tps: 10763.36585 + dps: 15028.23209 + tps: 10670.04479 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 26329.62387 - tps: 18694.03295 + dps: 26294.05622 + tps: 18668.77992 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 26329.62387 - tps: 18694.03295 + dps: 26294.05622 + tps: 18668.77992 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35207.60752 - tps: 24997.40134 + dps: 35485.27828 + tps: 25194.54758 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 14328.46851 - tps: 10173.21264 + dps: 14423.99778 + tps: 10241.03842 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 14328.46851 - tps: 10173.21264 + dps: 14423.99778 + tps: 10241.03842 } } dps_results: { key: "TestSubtlety-Settings-Orc-p1_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 15775.73823 - tps: 11200.77414 + dps: 16386.34923 + tps: 11634.30795 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 31455.00875 - tps: 22333.05621 + dps: 31296.96687 + tps: 22220.84648 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31455.00875 - tps: 22333.05621 + dps: 31296.96687 + tps: 22220.84648 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41932.47562 - tps: 29772.05769 + dps: 42042.83419 + tps: 29850.41228 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17744.5593 - tps: 12598.6371 + dps: 17886.07545 + tps: 12699.11357 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17744.5593 - tps: 12598.6371 + dps: 17886.07545 + tps: 12699.11357 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19893.95477 - tps: 14124.70788 + dps: 20486.43228 + tps: 14545.36692 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33666.21066 - tps: 23903.00957 + dps: 33669.10689 + tps: 23905.06589 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33666.21066 - tps: 23903.00957 + dps: 33669.10689 + tps: 23905.06589 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44612.40135 - tps: 31674.80496 + dps: 45015.64996 + tps: 31961.11147 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19093.02293 - tps: 13556.04628 + dps: 19158.55222 + tps: 13602.57207 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19093.02293 - tps: 13556.04628 + dps: 19158.55222 + tps: 13602.57207 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21534.55449 - tps: 15289.53369 + dps: 21772.31822 + tps: 15458.34593 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 31391.04381 - tps: 22287.6411 + dps: 31365.43852 + tps: 22269.46135 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31391.04381 - tps: 22287.6411 + dps: 31365.43852 + tps: 22269.46135 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 42460.41375 - tps: 30146.89376 + dps: 42423.3798 + tps: 30120.59966 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 17545.14485 - tps: 12457.05284 + dps: 17630.75585 + tps: 12517.83665 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 17545.14485 - tps: 12457.05284 + dps: 17630.75585 + tps: 12517.83665 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 20254.14477 - tps: 14380.44278 + dps: 20570.21885 + tps: 14604.85539 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 33761.4205 - tps: 23970.60855 + dps: 33939.39083 + tps: 24096.96749 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 33761.4205 - tps: 23970.60855 + dps: 33939.39083 + tps: 24096.96749 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 44854.34714 - tps: 31846.58647 + dps: 44820.54356 + tps: 31822.58592 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 19222.08013 - tps: 13647.67689 + dps: 19155.64465 + tps: 13600.5077 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19222.08013 - tps: 13647.67689 + dps: 19155.64465 + tps: 13600.5077 } } dps_results: { key: "TestSubtlety-Settings-Orc-p3_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 21541.38754 - tps: 15294.38515 + dps: 22082.54385 + tps: 15678.60614 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 45965.91144 - tps: 32635.79712 + dps: 46013.43466 + tps: 32669.53861 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 45965.91144 - tps: 32635.79712 + dps: 46013.43466 + tps: 32669.53861 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 57760.48282 - tps: 41009.9428 + dps: 58389.11889 + tps: 41456.27441 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 27223.70356 - tps: 19328.82953 + dps: 27229.1215 + tps: 19332.67626 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 27223.70356 - tps: 19328.82953 + dps: 27229.1215 + tps: 19332.67626 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Deadly-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30782.57362 - tps: 21855.62727 + dps: 30883.86824 + tps: 21927.54645 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 48911.01565 - tps: 34726.82111 + dps: 48962.1351 + tps: 34763.11592 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 48911.01565 - tps: 34726.82111 + dps: 48962.1351 + tps: 34763.11592 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 60698.0129 - tps: 43095.58916 + dps: 61064.72541 + tps: 43355.95504 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28974.947 - tps: 20572.21237 + dps: 28923.44272 + tps: 20535.64433 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28974.947 - tps: 20572.21237 + dps: 28923.44272 + tps: 20535.64433 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Deadly OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 32612.12457 - tps: 23154.60844 + dps: 32561.22289 + tps: 23118.46825 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 46156.55218 - tps: 32771.15205 + dps: 46356.50291 + tps: 32913.11707 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 46156.55218 - tps: 32771.15205 + dps: 46356.50291 + tps: 32913.11707 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 58868.62282 - tps: 41796.7222 + dps: 59298.2201 + tps: 42101.73627 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 26951.0155 - tps: 19135.221 + dps: 26995.77013 + tps: 19166.99679 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 26951.0155 - tps: 19135.221 + dps: 26995.77013 + tps: 19166.99679 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-MH Instant OH Instant-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30074.73032 - tps: 21353.05853 + dps: 31036.04701 + tps: 22035.59338 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 49307.21296 - tps: 35008.1212 + dps: 49186.52431 + tps: 34922.43226 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49307.21296 - tps: 35008.1212 + dps: 49186.52431 + tps: 34922.43226 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 61825.03685 - tps: 43895.77616 + dps: 61697.82245 + tps: 43805.45394 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 28972.29081 - tps: 20570.32648 + dps: 29100.76484 + tps: 20661.54304 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 28972.29081 - tps: 20570.32648 + dps: 29100.76484 + tps: 20661.54304 } } dps_results: { key: "TestSubtlety-Settings-Orc-p4_subtlety-Subtlety-subtlety-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 31931.97163 - tps: 22671.69985 + dps: 32152.55173 + tps: 22828.31173 } } dps_results: { key: "TestSubtlety-SwitchInFrontOfTarget-Default" value: { - dps: 17509.65293 - tps: 12431.85358 + dps: 17542.49585 + tps: 12455.17205 } } From 33179bcf17ea62c5e2a1391c50c3e204ab7ba537 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 7 Jan 2025 09:18:14 +0100 Subject: [PATCH 072/127] Cleanup PPM Effects & add Enchant Proc / Proc effects instead --- sim/common/cata/enchant_effects.go | 8 +-- sim/common/shared/shared_utils.go | 12 +--- sim/common/tbc/enchant_effects.go | 8 +-- sim/common/wotlk/enchant_effects.go | 8 +-- sim/core/attack.go | 16 +++++- sim/core/aura_helpers.go | 2 +- sim/core/item_swaps.go | 86 +---------------------------- sim/death_knight/runeforging.go | 4 +- sim/death_knight/talents_frost.go | 3 +- sim/death_knight/talents_unholy.go | 5 +- sim/paladin/seal_of_insight.go | 2 +- sim/rogue/poisons.go | 4 +- sim/shaman/weapon_imbues.go | 2 +- 13 files changed, 41 insertions(+), 119 deletions(-) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index bc2a09d39a..b7d597fb0d 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -116,7 +116,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEnchantEffect(4067, ppm, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4067, aura, shared.WeaponSlots) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -153,7 +153,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(4074, ppm, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4074, aura, shared.WeaponSlots) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -238,7 +238,7 @@ func init() { }, })) - character.ItemSwap.RegisterPPMEnchantEffect(4083, ppm, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4083, aura, shared.WeaponSlots) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -319,7 +319,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(4099, ppm, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4099, aura, shared.WeaponSlots) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 1728f69f4e..2e45ffcccd 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -204,11 +204,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } if isEnchant { - if config.PPM != 0 { - character.ItemSwap.RegisterPPMEnchantEffect(effectID, config.PPM, triggerAura.Ppmm, triggerAura, config.Slots) - } else { - character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) - } + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) } else { eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(effectID), false) if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { @@ -549,10 +545,6 @@ func NewProcDamageEffect(config ProcDamageEffect) { } triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) - if config.Trigger.PPM != 0 { - character.ItemSwap.RegisterPPMItemEffect(config.ItemID, config.Trigger.PPM, triggerAura.Ppmm, triggerAura, config.Slots) - } else { - character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) - } + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) }) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index b7ed8f12d1..c70669c440 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -91,7 +91,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(1900, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(1900, aura, shared.WeaponSlots) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -131,7 +131,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(2673, 0.73, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(2673, aura, shared.WeaponSlots) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -174,7 +174,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3225, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3225, aura, shared.WeaponSlots) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -217,7 +217,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3273, 2.15, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3273, aura, shared.WeaponSlots) } core.NewEnchantEffect(3273, func(agent core.Agent) { character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index ed6fcd415e..2b6b073902 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -54,7 +54,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3251, 4.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3251, aura, shared.WeaponSlots) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -95,7 +95,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3239, 4.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3239, aura, shared.WeaponSlots) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -183,7 +183,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3789, 1.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3789, aura, shared.WeaponSlots) }) // TODO: These are stand-in values without any real reference. @@ -212,7 +212,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3241, 3.0, &ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3241, aura, shared.WeaponSlots) }) // Enchant: 3790, Spell: 59630 - Black Magic diff --git a/sim/core/attack.go b/sim/core/attack.go index c6edd00bd9..5a4d8a248f 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -342,6 +342,8 @@ type AutoAttacks struct { IsDualWielding bool + character *Character + mh WeaponAttack oh WeaponAttack ranged WeaponAttack @@ -371,6 +373,8 @@ func (unit *Unit) EnableAutoAttacks(agent Agent, options AutoAttackOptions) { IsDualWielding: options.OffHand.SwingSpeed != 0, + character: agent.GetCharacter(), + mh: WeaponAttack{ agent: agent, unit: unit, @@ -823,7 +827,17 @@ func (ppmm *PPMManager) Chance(procMask ProcMask) float64 { return 0 } -func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) PPMManager { +func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *PPMManager { + ppmm := aa.newPPMManager(ppm, procMask) + + if aa.character != nil { + aa.character.ItemSwap.RegisterPPMEffect(procMask, ppm, &ppmm) + } + + return &ppmm +} + +func (aa *AutoAttacks) newPPMManager(ppm float64, procMask ProcMask) PPMManager { if !aa.AutoSwingMelee && !aa.AutoSwingRanged { return PPMManager{} } diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index 1129ac5701..c8515f5b2a 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -59,7 +59,7 @@ func ApplyProcTriggerCallback(unit *Unit, procAura *Aura, config ProcTrigger) { var ppmm PPMManager if config.PPM > 0 { - ppmm = unit.AutoAttacks.NewPPMManager(config.PPM, config.ProcMask) + ppmm = *unit.AutoAttacks.NewPPMManager(config.PPM, config.ProcMask) procAura.Ppmm = &ppmm } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 447f349735..2e7c62e9a2 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -90,95 +90,15 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } } -// Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEnchantEffect(effectID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { - swap.registerPPMInternal(ItemSwapPPMConfig{ - EnchantId: effectID, - PPM: ppm, - Ppmm: ppmm, - Aura: aura, - Slots: slots, - }) -} - -// Helper for handling Effects that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMItemEffect(itemID int32, ppm float64, ppmm *PPMManager, aura *Aura, slots []proto.ItemSlot) { - swap.registerPPMInternal(ItemSwapPPMConfig{ - EffectID: itemID, - PPM: ppm, - Ppmm: ppmm, - Aura: aura, - Slots: slots, - }) -} - // Helper for handling procs that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffectWithCustomProcMask(procMask ProcMask, ppm float64, ppmm *PPMManager, slots []proto.ItemSlot) { - swap.registerPPMInternal(ItemSwapPPMConfig{ - CustomProcMask: procMask, - PPM: ppm, - Ppmm: ppmm, - Slots: slots, - }) -} - -type ItemSwapPPMConfig struct { - EffectID int32 - EnchantId int32 - PPM float64 - CustomProcMask ProcMask - Ppmm *PPMManager - Aura *Aura - Slots []proto.ItemSlot -} - -func (swap *ItemSwap) registerPPMInternal(config ItemSwapPPMConfig) { +func (swap *ItemSwap) RegisterPPMEffect(procMask ProcMask, ppm float64, ppmm *PPMManager) { character := swap.character if character == nil || !character.ItemSwap.IsEnabled() { return } - itemID := config.EffectID - enchantEffectID := config.EnchantId - - isItemPPM := itemID != 0 - isEnchantEffectPPM := enchantEffectID != 0 - - character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { - item := swap.GetEquippedItemBySlot(slot) - - if config.CustomProcMask != 0 { - *config.Ppmm = character.AutoAttacks.NewPPMManager(config.PPM, config.CustomProcMask) - return - } - - var hasItemEquipped bool - var procMask ProcMask - var isItemSlotMatch = false - - if isItemPPM { - hasItemEquipped = item.ID == itemID - isItemSlotMatch = swap.FindSlotForItem(itemID, config.Slots) == slot - procMask = character.GetDefaultProcMaskForWeaponEffect(itemID) - } else if isEnchantEffectPPM { - hasItemEquipped = item.Enchant.EffectID == enchantEffectID || item.TempEnchant == enchantEffectID - isItemSlotMatch = swap.FindSlotForEnchant(enchantEffectID, config.Slots) == slot - procMask = character.GetDefaultProcMaskForWeaponEnchant(enchantEffectID) - } - - if !isItemSlotMatch { - return - } - - if config.Aura != nil { - if hasItemEquipped { - config.Aura.Activate(sim) - } else { - config.Aura.Deactivate(sim) - } - } - - *config.Ppmm = character.AutoAttacks.NewPPMManager(config.PPM, procMask) + character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}, func(sim *Simulation, slot proto.ItemSlot) { + *ppmm = character.AutoAttacks.newPPMManager(ppm, procMask) }) } diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index 9cfcadf08e..f50fa7f28b 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -101,7 +101,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3368, 2.0, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3368, aura, shared.WeaponSlots) }) // Rune of Cinderglacier @@ -164,7 +164,7 @@ func init() { }, }) - character.ItemSwap.RegisterPPMEnchantEffect(3369, 1.0, aura.Ppmm, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3369, aura, shared.WeaponSlots) }) // Rune of Razorice diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index b75bfc087d..ba1cb38c42 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -219,7 +219,7 @@ func (dk *DeathKnight) applyKillingMachine() { }) ppm := 2.0 * float64(dk.Talents.KillingMachine) - triggerAura := core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ + core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ Name: "Killing Machine", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeWhiteHit, @@ -231,7 +231,6 @@ func (dk *DeathKnight) applyKillingMachine() { }, }) - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) } func (dk *DeathKnight) applyMightOfTheFrozenWastes() { diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index 1e82bffcbf..a04b23323a 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -4,7 +4,6 @@ import ( "time" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -307,7 +306,7 @@ func (dk *DeathKnight) applySuddenDoom() { }) ppm := 1.0 * float64(dk.Talents.SuddenDoom) - triggerAura := core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ + core.MakeProcTriggerAura(&dk.Unit, core.ProcTrigger{ Name: "Sudden Doom", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeMHAuto, @@ -325,8 +324,6 @@ func (dk *DeathKnight) applySuddenDoom() { } }, }) - - dk.ItemSwap.RegisterPPMEffectWithCustomProcMask(core.ProcMaskMeleeMH, ppm, triggerAura.Ppmm, []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand}) } func (dk *DeathKnight) applyShadowInfusion() *core.Aura { diff --git a/sim/paladin/seal_of_insight.go b/sim/paladin/seal_of_insight.go index 3131f988a0..9992d0f801 100644 --- a/sim/paladin/seal_of_insight.go +++ b/sim/paladin/seal_of_insight.go @@ -60,7 +60,7 @@ func (paladin *Paladin) registerSealOfInsight() { Tag: "Seal", ActionID: core.ActionID{SpellID: 20165}, Duration: time.Minute * 30, - Ppmm: &ppmm, + Ppmm: ppmm, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { // Don't proc on misses diff --git a/sim/rogue/poisons.go b/sim/rogue/poisons.go index 81d6db8917..3bc569be2f 100644 --- a/sim/rogue/poisons.go +++ b/sim/rogue/poisons.go @@ -182,7 +182,7 @@ func (rogue *Rogue) applyWoundPoison() { } const basePPM = 0.5 / (1.4 / 60) // ~21.43, the former 50% normalized to a 1.4 speed weapon - rogue.woundPoisonPPMM = rogue.AutoAttacks.NewPPMManager(basePPM, procMask) + rogue.woundPoisonPPMM = *rogue.AutoAttacks.NewPPMManager(basePPM, procMask) rogue.RegisterAura(core.Aura{ Label: "Wound Poison", @@ -331,7 +331,7 @@ func (rogue *Rogue) UpdateInstantPoisonPPM(bonusChance float64) { const basePPM = 0.2 / (1.4 / 60) // ~8.57, the former 20% normalized to a 1.4 speed weapon ppm := basePPM * (1 + core.TernaryFloat64(rogue.Spec == proto.Spec_SpecAssassinationRogue, 0.5, 0) + bonusChance) - rogue.instantPoisonPPMM = rogue.AutoAttacks.NewPPMManager(ppm, procMask) + rogue.instantPoisonPPMM = *rogue.AutoAttacks.NewPPMManager(ppm, procMask) } func (rogue *Rogue) applyInstantPoison() { diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index e3bc849342..52ec4b2727 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -313,7 +313,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterPPMEnchantEffect(2, 9.0, &ppmm, aura, shared.WeaponSlots) + shaman.ItemSwap.RegisterEnchantProc(2, aura, shared.WeaponSlots) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { From d6b2d0e38bde3c15dd928eb9c0a1e3fa22b1992d Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 7 Jan 2025 09:20:55 +0100 Subject: [PATCH 073/127] Remove redundant init checks --- sim/core/item_swaps.go | 59 ++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 2e7c62e9a2..805db7e3ff 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -85,6 +85,10 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal return } + if (character.Env != nil) && character.Env.IsFinalized() { + panic("Tried to add a new item swap callback in a finalized environment!") + } + for _, slot := range slots { character.ItemSwap.onSwapCallbacks[slot] = append(character.ItemSwap.onSwapCallbacks[slot], callback) } @@ -92,13 +96,8 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal // Helper for handling procs that use PPMManager to toggle the aura on/off func (swap *ItemSwap) RegisterPPMEffect(procMask ProcMask, ppm float64, ppmm *PPMManager) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } - - character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}, func(sim *Simulation, slot proto.ItemSlot) { - *ppmm = character.AutoAttacks.newPPMManager(ppm, procMask) + swap.character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}, func(sim *Simulation, slot proto.ItemSlot) { + *ppmm = swap.character.AutoAttacks.newPPMManager(ppm, procMask) }) } @@ -128,59 +127,45 @@ type ItemSwapProcConfig struct { } func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } + isItemProc := config.ItemID != 0 + isEnchantEffectProc := config.EnchantId != 0 - itemID := config.ItemID - enchantEffectID := config.EnchantId - aura := config.Aura - slots := config.Slots - - isItemProc := itemID != 0 - isEnchantEffectProc := enchantEffectID != 0 - - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + swap.character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { item := swap.GetEquippedItemBySlot(slot) var hasItemEquipped bool if isItemProc { - hasItemEquipped = character.HasItemEquipped(itemID) + hasItemEquipped = swap.character.HasItemEquipped(config.ItemID) } else if isEnchantEffectProc { - hasItemEquipped = item.Enchant.EffectID == enchantEffectID + hasItemEquipped = item.Enchant.EffectID == config.EnchantId } if hasItemEquipped { - if !aura.IsActive() { - aura.Activate(sim) + if !config.Aura.IsActive() { + config.Aura.Activate(sim) // Enchant effects such as Weapon/Back do not trigger an ICD - if isItemProc && aura.Icd != nil { - aura.Icd.Use(sim) + if isItemProc && config.Aura.Icd != nil { + config.Aura.Icd.Use(sim) } } } else { - aura.Deactivate(sim) + config.Aura.Deactivate(sim) } }) } // Helper for handling Item On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { isSwapItem := swap.ItemExistsInSwapSet(itemID) if !isSwapItem { return } - hasItemEquipped := character.HasItemEquipped(itemID) + hasItemEquipped := swap.character.HasItemEquipped(itemID) spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { - aura := character.GetAuraByID(spell.ActionID) + aura := swap.character.GetAuraByID(spell.ActionID) if aura.IsActive() { aura.Deactivate(sim) } @@ -200,11 +185,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { // Helper for handling Enchant On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) ProcessTinker(spell *Spell, slots []proto.ItemSlot) { - character := swap.character - if character == nil || !character.ItemSwap.IsEnabled() { - return - } - character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { if spell == nil || !swap.initialized { return } From b2a69bd2df3e0ff570a1eae8d0efcf4b90f8492e Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 00:13:33 +0100 Subject: [PATCH 074/127] Refactor PPM to DPM to allow for dyanmic weapon procs --- sim/common/cata/damage_procs.go | 8 +- sim/common/cata/enchant_effects.go | 36 ++-- sim/common/cata/gurthalak.go | 3 +- sim/common/shared/shared_utils.go | 3 - sim/common/tbc/_melee_sets.go | 8 +- sim/common/tbc/enchant_effects.go | 230 ++++++++++++-------------- sim/common/tbc/melee_items.go | 16 +- sim/common/tbc/melee_trinkets.go | 8 +- sim/common/tbc/metagems.go | 4 +- sim/common/wotlk/enchant_effects.go | 32 ++-- sim/common/wotlk/other_effects.go | 8 +- sim/common/wotlk/shadowmourne.go | 4 +- sim/core/attack.go | 86 +++++++--- sim/core/aura.go | 4 +- sim/core/aura_helpers.go | 16 +- sim/core/character.go | 15 ++ sim/core/item_swaps.go | 40 ++--- sim/death_knight/runeforging.go | 24 +-- sim/paladin/seal_of_insight.go | 6 +- sim/rogue/rogue.go | 7 +- sim/shaman/enhancement/enhancement.go | 3 +- sim/shaman/talents.go | 4 +- sim/shaman/weapon_imbues.go | 9 +- ui/core/proto_utils/action_id.ts | 7 + 24 files changed, 303 insertions(+), 278 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index 0751551c02..d2d1fd49f2 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -16,7 +16,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: shared.TrinketSlots, + Slots: core.TrinketSlots, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -34,7 +34,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: shared.TrinketSlots, + Slots: core.TrinketSlots, Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -95,7 +95,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(68925, aura, shared.TrinketSlots) + character.ItemSwap.RegisterProc(68925, aura, core.TrinketSlots) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -147,7 +147,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(69110, aura, shared.TrinketSlots) + character.ItemSwap.RegisterProc(69110, aura, core.TrinketSlots) }) } diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index b7d597fb0d..75a2ac0acd 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -45,7 +45,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4066, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4066, aura, core.WeaponSlots) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -67,10 +67,8 @@ func init() { }, }) - // TODO: Verify PPM (currently based on elitist + simcraft) - procMask := character.GetDefaultProcMaskForWeaponEnchant(4067) ppm := 5.0 - ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(4067, ppm, 0) meleeIcd := &core.Cooldown{ Duration: time.Millisecond * 1, Timer: character.NewTimer(), @@ -92,7 +90,7 @@ func init() { // melee ICD - Melee and Spell Procs are independent // while melee attacks do not have a direct internal CD // only one proc per server batch can occur, so i.E. Storm Strike can not proc avalance twice - if meleeIcd.IsReady(sim) && ppmm.Proc(sim, spell.ProcMask, "Avalanche") { + if meleeIcd.IsReady(sim) && dpm.Proc(sim, spell.ProcMask, "Avalanche") { meleeIcd.Use(sim) procSpell.Cast(sim, result.Target) return @@ -116,7 +114,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4067, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4067, aura, core.WeaponSlots) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -140,20 +138,18 @@ func init() { // no verified PPM but silence effect + increased damage // will result in significant lower PPM // TODO: Verify PPM - procMask := character.GetDefaultProcMaskForWeaponEnchant(4074) ppm := 2.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Elemental Slayer", Callback: core.CallbackOnSpellHitDealt, - ProcMask: procMask, Outcome: core.OutcomeLanded, - PPM: ppm, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(4074, ppm, 0), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { procSpell.Cast(sim, result.Target) }, }) - character.ItemSwap.RegisterEnchantProc(4074, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4074, aura, core.WeaponSlots) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -173,9 +169,8 @@ func init() { ohAura := procBuilder("Hurricane Enchant OH", 2) spAura := procBuilder("Hurricane Enchant Spell", 3) - procMask := character.GetDefaultProcMaskForWeaponEnchant(4083) ppm := 1.0 - ppmm := character.AutoAttacks.NewPPMManager(ppm, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(4083, ppm, 0) hurricaneSpellProc := func(sim *core.Simulation) { if mhAura.IsActive() { @@ -210,7 +205,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Hurricane") { + if dpm.Proc(sim, spell.ProcMask, "Hurricane") { if spell.IsMH() { mhAura.Activate(sim) } else { @@ -238,7 +233,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4083, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4083, aura, core.WeaponSlots) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -253,7 +248,7 @@ func init() { ProcChance: 0.25, Bonus: stats.Stats{stats.Spirit: 200}, Duration: time.Second * 15, - Slots: shared.WeaponSlots, + Slots: core.WeaponSlots, }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent @@ -268,7 +263,7 @@ func init() { ProcChance: 1.0 / 3.0, Bonus: stats.Stats{stats.Intellect: 500}, Duration: time.Second * 12, - Slots: shared.WeaponSlots, + Slots: core.WeaponSlots, }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk @@ -281,7 +276,7 @@ func init() { PPM: 1, // based on old Wowhead comments, TODO: measure in Classic Bonus: stats.Stats{stats.DodgeRating: 600}, Duration: time.Second * 10, - Slots: shared.WeaponSlots, + Slots: core.WeaponSlots, }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -302,14 +297,11 @@ func init() { time.Second*12, ) - procMask := character.GetDefaultProcMaskForWeaponEnchant(4099) - ppm := 1.0 aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Landslide", Callback: core.CallbackOnSpellHitDealt, - ProcMask: procMask, Outcome: core.OutcomeLanded, - PPM: ppm, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(4099, 1.0, 0), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if spell.IsMH() { mainHand.Activate(sim) @@ -319,7 +311,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4099, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4099, aura, core.WeaponSlots) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 6ea5d98e09..31f9e316e1 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -3,7 +3,6 @@ package cata import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/stats" ) @@ -88,7 +87,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(gurthalakItemID, aura, shared.WeaponSlots) + character.ItemSwap.RegisterProc(gurthalakItemID, aura, core.WeaponSlots) }) } } diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 2e45ffcccd..300a88f406 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -9,9 +9,6 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -var WeaponSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand} -var TrinketSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2} - type ProcStatBonusEffect struct { Name string ItemID int32 diff --git a/sim/common/tbc/_melee_sets.go b/sim/common/tbc/_melee_sets.go index ce89a9afbf..a87f00f81b 100644 --- a/sim/common/tbc/_melee_sets.go +++ b/sim/common/tbc/_melee_sets.go @@ -22,7 +22,7 @@ package tbc // }, // }) -// ppmm := character.AutoAttacks.NewPPMManager(2.0, core.ProcMaskMelee) +// dpm := character.AutoAttacks.NewPPMManager(2.0, core.ProcMaskMelee) // character.RegisterAura(core.Aura{ // Label: "Fists of Fury", @@ -35,7 +35,7 @@ package tbc // return // } -// if ppmm.Proc(sim, spell.ProcMask, "The Fists of Fury") { +// if dpm.Proc(sim, spell.ProcMask, "The Fists of Fury") { // procSpell.Cast(sim, result.Target) // } // }, @@ -127,7 +127,7 @@ package tbc // } // procAura := character.NewTemporaryStatsAura("Twin Blade of Azzinoth Proc", core.ActionID{SpellID: 41435}, stats.Stats{stats.HasteRating: 450}, time.Second*10) -// ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMelee) +// dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMelee) // icd := core.Cooldown{ // Timer: character.NewTimer(), // Duration: time.Second * 45, @@ -148,7 +148,7 @@ package tbc // return // } -// if ppmm.Proc(sim, spell.ProcMask, "Twin Blades of Azzinoth") { +// if dpm.Proc(sim, spell.ProcMask, "Twin Blades of Azzinoth") { // icd.Use(sim) // procAura.Activate(sim) // } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index c70669c440..f416911e33 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -3,7 +3,6 @@ package tbc import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -62,36 +61,27 @@ func init() { core.NewEnchantEffect(1900, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(1900) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) - // -4 str per level over 60 const strBonus = 100.0 - 4.0*float64(core.CharacterLevel-60) mhAura := character.NewTemporaryStatsAura("Crusader Enchant MH", core.ActionID{SpellID: 20007, Tag: 1}, stats.Stats{stats.Strength: strBonus}, time.Second*15) ohAura := character.NewTemporaryStatsAura("Crusader Enchant OH", core.ActionID{SpellID: 20007, Tag: 2}, stats.Stats{stats.Strength: strBonus}, time.Second*15) - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Crusader Enchant", + aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + Name: "Crusader Enchant", 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() { - return - } - - if ppmm.Proc(sim, spell.ProcMask, "Crusader") { - if spell.IsMH() { - mhAura.Activate(sim) - } else { - ohAura.Activate(sim) - } + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(1900, 1.0, 0), + Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { + if spell.IsMH() { + mhAura.Activate(sim) + } else { + ohAura.Activate(sim) } }, }) - character.ItemSwap.RegisterEnchantProc(1900, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(1900, aura, core.WeaponSlots) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -104,8 +94,7 @@ func init() { core.NewEnchantEffect(2673, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(2673) - ppmm := character.AutoAttacks.NewPPMManager(0.73, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(2673, 0.73, 0) mhAura := character.NewTemporaryStatsAura("Lightning Speed MH", core.ActionID{SpellID: 28093, Tag: 1}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) ohAura := character.NewTemporaryStatsAura("Lightning Speed OH", core.ActionID{SpellID: 28093, Tag: 2}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) @@ -121,7 +110,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "mongoose") { + if dpm.Proc(sim, spell.ProcMask, "mongoose") { if spell.IsMH() { mhAura.Activate(sim) } else { @@ -131,7 +120,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(2673, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(2673, aura, core.WeaponSlots) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -152,8 +141,7 @@ func init() { core.NewEnchantEffect(3225, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(3225) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3225, 1.0, 0) procAura := character.NewTemporaryStatsAura("Executioner Proc", core.ActionID{SpellID: 42976}, stats.Stats{stats.CritRating: 120}, time.Second*15) @@ -168,108 +156,108 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Executioner") { + if dpm.Proc(sim, spell.ProcMask, "Executioner") { procAura.Activate(sim) } }, }) - character.ItemSwap.RegisterEnchantProc(3225, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3225, aura, core.WeaponSlots) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 - applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 25, - } - - label := "Deathfrost-" - if isMH { - label += "MH" - } else { - label += "OH" - } - procMask := core.ProcMaskMelee - ppmm := character.AutoAttacks.NewPPMManager(2.15, procMask) - - aura := character.GetOrRegisterAura(core.Aura{ - Label: label, - 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.Damage == 0 { - return - } - - if spell.ProcMask.Matches(core.ProcMaskMelee) { - if ppmm.Proc(sim, spell.ProcMask, "Deathfrost") { - procSpell.Cast(sim, result.Target) - } - } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { - if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { - icd.Use(sim) - procSpell.Cast(sim, result.Target) - } - } - }, - }) - - character.ItemSwap.RegisterEnchantProc(3273, aura, shared.WeaponSlots) - } - core.NewEnchantEffect(3273, func(agent core.Agent) { - character := agent.GetCharacter() - - procMask := character.GetDefaultProcMaskForWeaponEnchant(3273) - if procMask == core.ProcMaskUnknown { - return - } - - actionID := core.ActionID{SpellID: 46579} - if spell := character.GetSpell(actionID); spell != nil { - // This function gets called twice when dual wielding this enchant, but we - // handle both in one call. - return - } - - debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) - for i, target := range character.Env.Encounter.TargetUnits { - aura := target.GetOrRegisterAura(core.Aura{ - Label: "Deathfrost", - ActionID: actionID, - Duration: time.Second * 8, - }) - core.AtkSpeedReductionEffect(aura, 1.15) - debuffs[i] = aura - } - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolFrost, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) - if result.Landed() { - debuffs[target.Index].Activate(sim) - } - spell.DealDamage(sim, result) - }, - }) - - if procMask.Matches(core.ProcMaskMeleeMH) { - applyDeathfrostForWeapon(character, procSpell, true) - } - if procMask.Matches(core.ProcMaskMeleeOH) { - applyDeathfrostForWeapon(character, procSpell, false) - } - }) + // applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { + // icd := core.Cooldown{ + // Timer: character.NewTimer(), + // Duration: time.Second * 25, + // } + + // label := "Deathfrost-" + // if isMH { + // label += "MH" + // } else { + // label += "OH" + // } + // procMask := core.ProcMaskMelee + // dpm := character.AutoAttacks.NewPPMManager(2.15, procMask) + + // aura := character.GetOrRegisterAura(core.Aura{ + // Label: label, + // 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.Damage == 0 { + // return + // } + + // if spell.ProcMask.Matches(core.ProcMaskMelee) { + // if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { + // procSpell.Cast(sim, result.Target) + // } + // } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { + // if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { + // icd.Use(sim) + // procSpell.Cast(sim, result.Target) + // } + // } + // }, + // }) + + // character.ItemSwap.RegisterEnchantProc(3273, aura, core.WeaponSlots) + // } + // core.NewEnchantEffect(3273, func(agent core.Agent) { + // character := agent.GetCharacter() + + // procMask := character.GetDefaultProcMaskForWeaponEnchant(3273) + // if procMask == core.ProcMaskUnknown { + // return + // } + + // actionID := core.ActionID{SpellID: 46579} + // if spell := character.GetSpell(actionID); spell != nil { + // // This function gets called twice when dual wielding this enchant, but we + // // handle both in one call. + // return + // } + + // debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) + // for i, target := range character.Env.Encounter.TargetUnits { + // aura := target.GetOrRegisterAura(core.Aura{ + // Label: "Deathfrost", + // ActionID: actionID, + // Duration: time.Second * 8, + // }) + // core.AtkSpeedReductionEffect(aura, 1.15) + // debuffs[i] = aura + // } + + // procSpell := character.RegisterSpell(core.SpellConfig{ + // ActionID: actionID, + // SpellSchool: core.SpellSchoolFrost, + // ProcMask: core.ProcMaskEmpty, + + // DamageMultiplier: 1, + // CritMultiplier: character.DefaultSpellCritMultiplier(), + // ThreatMultiplier: 1, + + // ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + // result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) + // if result.Landed() { + // debuffs[target.Index].Activate(sim) + // } + // spell.DealDamage(sim, result) + // }, + // }) + + // if procMask.Matches(core.ProcMaskMeleeMH) { + // applyDeathfrostForWeapon(character, procSpell, true) + // } + // if procMask.Matches(core.ProcMaskMeleeOH) { + // applyDeathfrostForWeapon(character, procSpell, false) + // } + // }) core.AddEffectsToTest = true } diff --git a/sim/common/tbc/melee_items.go b/sim/common/tbc/melee_items.go index affce9e5a7..ea6841bc54 100644 --- a/sim/common/tbc/melee_items.go +++ b/sim/common/tbc/melee_items.go @@ -23,7 +23,7 @@ func init() { character := agent.GetCharacter() procMask := character.GetDefaultProcMaskForWeaponEffect(19019) - ppmm := character.AutoAttacks.NewPPMManager(6.0, procMask) + dpm := character.AutoAttacks.NewPPMManager(6.0, procMask) procActionID := core.ActionID{SpellID: 21992} @@ -93,7 +93,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Thunderfury") { + if dpm.Proc(sim, spell.ProcMask, "Thunderfury") { singleTargetSpell.Cast(sim, result.Target) bounceSpell.Cast(sim, result.Target) } @@ -141,7 +141,7 @@ func init() { character := agent.GetCharacter() procAura := character.NewTemporaryStatsAura("Band of the Eternal Champion Proc", core.ActionID{ItemID: 29301}, stats.Stats{stats.AttackPower: 160, stats.RangedAttackPower: 160}, time.Second*10) - ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) icd := core.Cooldown{ Timer: character.NewTimer(), @@ -163,7 +163,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Band of the Eternal Champion") { + if dpm.Proc(sim, spell.ProcMask, "Band of the Eternal Champion") { icd.Use(sim) procAura.Activate(sim) } @@ -250,7 +250,7 @@ func init() { character := agent.GetCharacter() procMask := character.GetDefaultProcMaskForWeaponEffect(32262) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewPPMManager(1.0, procMask) procSpell := character.GetOrRegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 40291}, @@ -290,7 +290,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Syphon Of The Nathrezim") { + if dpm.Proc(sim, spell.ProcMask, "Syphon Of The Nathrezim") { procAura.Activate(sim) } }, @@ -356,7 +356,7 @@ func init() { character := agent.GetCharacter() procMask := character.GetDefaultProcMaskForWeaponEffect(12590) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewPPMManager(1.0, procMask) effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) @@ -371,7 +371,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Felstriker") { + if dpm.Proc(sim, spell.ProcMask, "Felstriker") { effectAura.Activate(sim) } }, diff --git a/sim/common/tbc/melee_trinkets.go b/sim/common/tbc/melee_trinkets.go index f08008e6f5..f02e471dfe 100644 --- a/sim/common/tbc/melee_trinkets.go +++ b/sim/common/tbc/melee_trinkets.go @@ -75,7 +75,7 @@ func init() { Timer: character.NewTimer(), Duration: time.Second * 20, } - ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) character.RegisterAura(core.Aura{ Label: "Dragonspine Trophy", @@ -92,7 +92,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "dragonspine") { + if dpm.Proc(sim, spell.ProcMask, "dragonspine") { icd.Use(sim) procAura.Activate(sim) } @@ -140,7 +140,7 @@ func init() { character := agent.GetCharacter() procAura := character.NewTemporaryStatsAura("Madness of the Betrayer Proc", core.ActionID{ItemID: 32505}, stats.Stats{stats.CritRating: 42}, time.Second*10) - ppmm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) character.RegisterAura(core.Aura{ Label: "Madness of the Betrayer", @@ -153,7 +153,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Madness of the Betrayer") { + if dpm.Proc(sim, spell.ProcMask, "Madness of the Betrayer") { procAura.Activate(sim) } }, diff --git a/sim/common/tbc/metagems.go b/sim/common/tbc/metagems.go index 170e6a405e..389d231a36 100644 --- a/sim/common/tbc/metagems.go +++ b/sim/common/tbc/metagems.go @@ -72,7 +72,7 @@ func init() { Timer: character.NewTimer(), Duration: time.Second * 40, } - ppmm := character.AutoAttacks.NewPPMManager(1.5, core.ProcMaskWhiteHit) // Mask 68, melee or ranged auto attacks. + dpm := character.AutoAttacks.NewPPMManager(1.5, core.ProcMaskWhiteHit) // Mask 68, melee or ranged auto attacks. character.RegisterAura(core.Aura{ Label: "Thundering Skyfire Diamond", @@ -89,7 +89,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Thundering Skyfire Diamond") { + if dpm.Proc(sim, spell.ProcMask, "Thundering Skyfire Diamond") { icd.Use(sim) procAura.Activate(sim) } diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 2b6b073902..350821262d 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -16,8 +16,7 @@ func init() { core.NewEnchantEffect(3251, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(3251) - ppmm := character.AutoAttacks.NewPPMManager(4.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3251, 4.0, 0) procSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 44622}, @@ -48,21 +47,20 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Giant Slayer") { + if dpm.Proc(sim, spell.ProcMask, "Giant Slayer") { procSpell.Cast(sim, result.Target) } }, }) - character.ItemSwap.RegisterEnchantProc(3251, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3251, aura, core.WeaponSlots) }) // Enchant: 3239, Spell: 44525 - Icebreaker core.NewEnchantEffect(3239, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(3239) - ppmm := character.AutoAttacks.NewPPMManager(4.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3239, 4.0, 0) procSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 44525}, @@ -89,13 +87,13 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Icebreaker") { + if dpm.Proc(sim, spell.ProcMask, "Icebreaker") { procSpell.Cast(sim, result.Target) } }, }) - character.ItemSwap.RegisterEnchantProc(3239, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3239, aura, core.WeaponSlots) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -154,8 +152,7 @@ func init() { core.NewEnchantEffect(3789, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(3789) - ppmm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3789, 1.0, 0) // Modify only gear armor, including from agility fivePercentOfArmor := (character.EquipStats()[stats.Armor] + 2.0*character.EquipStats()[stats.Agility]) * 0.05 @@ -173,7 +170,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Berserking") { + if dpm.Proc(sim, spell.ProcMask, "Berserking") { if spell.IsMH() { procAuraMH.Activate(sim) } else { @@ -183,15 +180,14 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3789, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3789, aura, core.WeaponSlots) }) // TODO: These are stand-in values without any real reference. core.NewEnchantEffect(3241, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEnchant(3241) - ppmm := character.AutoAttacks.NewPPMManager(3.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3241, 3.0, 0) healthMetrics := character.NewHealthMetrics(core.ActionID{ItemID: 44494}) @@ -206,13 +202,13 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Lifeward") { + if dpm.Proc(sim, spell.ProcMask, "Lifeward") { character.GainHealth(sim, 300*character.PseudoStats.HealingTakenMultiplier, healthMetrics) } }, }) - character.ItemSwap.RegisterEnchantProc(3241, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3241, aura, core.WeaponSlots) }) // Enchant: 3790, Spell: 59630 - Black Magic @@ -229,7 +225,7 @@ func init() { Bonus: stats.Stats{stats.HasteRating: 250}, Duration: time.Second * 10, IgnoreSpellIDs: []int32{47465, 12867}, - Slots: shared.WeaponSlots, + Slots: core.WeaponSlots, }) // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope @@ -415,6 +411,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3870, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3870, aura, core.WeaponSlots) }) } diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 92a31173d6..5a94eaf843 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -4,7 +4,6 @@ import ( "math" "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -912,8 +911,7 @@ func init() { core.NewItemEffect(itemID, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(itemID) - ppmm := character.AutoAttacks.NewPPMManager(2.0, procMask) + dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(itemID, 2.0) procActionID := core.ActionID{ItemID: itemID} @@ -941,7 +939,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, name) { + if dpm.Proc(sim, spell.ProcMask, name) { proc.Cast(sim, result.Target) } }, @@ -1000,7 +998,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(itemID, aura, shared.WeaponSlots) + character.ItemSwap.RegisterProc(itemID, aura, core.WeaponSlots) }) }) diff --git a/sim/common/wotlk/shadowmourne.go b/sim/common/wotlk/shadowmourne.go index a0eeb7d4ab..b73dcce6be 100644 --- a/sim/common/wotlk/shadowmourne.go +++ b/sim/common/wotlk/shadowmourne.go @@ -22,7 +22,7 @@ func init() { core.NewItemEffect(49623, func(agent core.Agent) { player := agent.GetCharacter() - ppmm := player.AutoAttacks.NewPPMManager(12, core.ProcMaskMeleeOrMeleeProc) + dpm := player.AutoAttacks.NewPPMManager(12, core.ProcMaskMeleeOrMeleeProc) chaosBaneAura := player.NewTemporaryStatsAura("Chaos Bane", core.ActionID{SpellID: 73422}, stats.Stats{stats.Strength: 270}, time.Second*10) @@ -66,7 +66,7 @@ func init() { return } - if ppmm.Proc(sim, spell.ProcMask, "Shadowmourne") { + if dpm.Proc(sim, spell.ProcMask, "Shadowmourne") { stackingAura.Activate(sim) stackingAura.AddStack(sim) } diff --git a/sim/core/attack.go b/sim/core/attack.go index 5a4d8a248f..26f4414873 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -803,70 +803,114 @@ func (aa *AutoAttacks) NextAttackAt() time.Duration { return min(aa.mh.swingAt, aa.oh.swingAt) } -type PPMManager struct { +type DynamicProcManager struct { procMasks []ProcMask procChances []float64 } // Returns whether the effect procced. -func (ppmm *PPMManager) Proc(sim *Simulation, procMask ProcMask, label string) bool { - for i, m := range ppmm.procMasks { +func (dpm *DynamicProcManager) Proc(sim *Simulation, procMask ProcMask, label string) bool { + for i, m := range dpm.procMasks { if m.Matches(procMask) { - return sim.RandomFloat(label) < ppmm.procChances[i] + return sim.RandomFloat(label) < dpm.procChances[i] } } return false } -func (ppmm *PPMManager) Chance(procMask ProcMask) float64 { - for i, m := range ppmm.procMasks { +func (dpm *DynamicProcManager) Chance(procMask ProcMask) float64 { + for i, m := range dpm.procMasks { if m.Matches(procMask) { - return ppmm.procChances[i] + return dpm.procChances[i] } } return 0 } -func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *PPMManager { - ppmm := aa.newPPMManager(ppm, procMask) +// PPMManager for static ProcMasks +func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *DynamicProcManager { + dpm := aa.newDynamicProcManager(ppm, 0, procMask) if aa.character != nil { - aa.character.ItemSwap.RegisterPPMEffect(procMask, ppm, &ppmm) + aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, 0, procMask) + }) } - return &ppmm + return &dpm } -func (aa *AutoAttacks) newPPMManager(ppm float64, procMask ProcMask) PPMManager { +// PPMManager for dynamic ProcMasks on weapon enchants +func (aa *AutoAttacks) NewDynamicProcManagerForEnchant(effectID int32, ppm float64, fixedProcChance float64) *DynamicProcManager { + getProcMask := func() ProcMask { + return aa.character.GetDefaultProcMaskForWeaponEnchant(effectID) + } + + dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) + + if aa.character != nil { + aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + procMask := aa.character.GetDefaultProcMaskForWeaponEnchant(effectID) + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMask) + }) + } + + return &dpm +} + +// PPMManager for dynamic ProcMasks on weapon effects +func (aa *AutoAttacks) NewPPMManagerForWeaponEffect(itemID int32, ppm float64) *DynamicProcManager { + getProcMask := func() ProcMask { + return aa.character.GetDefaultProcMaskForWeaponEffect(itemID) + } + + dpm := aa.newDynamicProcManager(ppm, 0, getProcMask()) + + if aa.character != nil { + if aa.character != nil { + aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, 0, getProcMask()) + }) + } + } + + return &dpm +} + +func (aa *AutoAttacks) newDynamicProcManager(ppm float64, fixedProcChance float64, procMask ProcMask) DynamicProcManager { if !aa.AutoSwingMelee && !aa.AutoSwingRanged { - return PPMManager{} + return DynamicProcManager{} } - ppmm := PPMManager{procMasks: make([]ProcMask, 0, 2), procChances: make([]float64, 0, 2)} + dpm := DynamicProcManager{procMasks: make([]ProcMask, 0, 2), procChances: make([]float64, 0, 2)} mergeOrAppend := func(speed float64, mask ProcMask) { if speed == 0 || mask == 0 { return } - if i := slices.Index(ppmm.procChances, speed); i != -1 { - ppmm.procMasks[i] |= mask + if i := slices.Index(dpm.procChances, speed); i != -1 { + dpm.procMasks[i] |= mask return } - ppmm.procMasks = append(ppmm.procMasks, mask) - ppmm.procChances = append(ppmm.procChances, speed) + dpm.procMasks = append(dpm.procMasks, mask) + dpm.procChances = append(dpm.procChances, speed) } mergeOrAppend(aa.mh.SwingSpeed, procMask&^ProcMaskRanged&^ProcMaskMeleeOH) // "everything else", even if not explicitly flagged MH mergeOrAppend(aa.oh.SwingSpeed, procMask&ProcMaskMeleeOH) mergeOrAppend(aa.ranged.SwingSpeed, procMask&ProcMaskRanged) - for i := range ppmm.procChances { - ppmm.procChances[i] *= ppm / 60 + for i := range dpm.procChances { + if fixedProcChance != 0 { + dpm.procChances[i] = fixedProcChance + } else { + dpm.procChances[i] *= ppm / 60 + } } - return ppmm + return dpm } // Returns whether a PPM-based effect procced. diff --git a/sim/core/aura.go b/sim/core/aura.go index efee965ede..38d34bde5f 100644 --- a/sim/core/aura.go +++ b/sim/core/aura.go @@ -47,8 +47,8 @@ type Aura struct { ActionID ActionID // If set, metrics will be tracked for this aura. ActionIDForProc ActionID // If set, indicates that this aura is a trigger aura for the specified proc. - Icd *Cooldown // The internal cooldown if any - Ppmm *PPMManager // PPM manager for proc trigger auras if any + Icd *Cooldown // The internal cooldown if any + Dpm *DynamicProcManager // Dynamic Proc manager for proc trigger auras if any Duration time.Duration // Duration of aura, upon being applied. diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index c8515f5b2a..3942285582 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -41,6 +41,7 @@ type ProcTrigger struct { Harmful bool ProcChance float64 PPM float64 + DPM *DynamicProcManager ICD time.Duration Handler ProcHandler ClassSpellMask int64 @@ -57,10 +58,15 @@ func ApplyProcTriggerCallback(unit *Unit, procAura *Aura, config ProcTrigger) { procAura.Icd = &icd } - var ppmm PPMManager - if config.PPM > 0 { - ppmm = *unit.AutoAttacks.NewPPMManager(config.PPM, config.ProcMask) - procAura.Ppmm = &ppmm + var dpm *DynamicProcManager + if config.DPM != nil { + dpm = config.DPM + } else if config.PPM > 0 { + dpm = unit.AutoAttacks.NewPPMManager(config.PPM, config.ProcMask) + } + + if dpm != nil { + procAura.Dpm = dpm } handler := config.Handler @@ -91,7 +97,7 @@ func ApplyProcTriggerCallback(unit *Unit, procAura *Aura, config ProcTrigger) { } if config.ProcChance != 1 && sim.RandomFloat(config.Name) > config.ProcChance { return - } else if config.PPM != 0 && !ppmm.Proc(sim, spell.ProcMask, config.Name) { + } else if dpm != nil && !dpm.Proc(sim, spell.ProcMask, config.Name) { return } diff --git a/sim/core/character.go b/sim/core/character.go index 6251583615..f830e36c71 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -598,6 +598,16 @@ func (character *Character) HasRangedWeapon() bool { return character.GetRangedWeapon() != nil } +func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask { + procMask := character.GetDefaultProcMaskForWeaponEnchant(effectID) + + character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + procMask = character.GetDefaultProcMaskForWeaponEnchant(effectID) + }) + + return &procMask +} + func (character *Character) GetDefaultProcMaskForWeaponEnchant(effectID int32) ProcMask { return character.getDefaultProcMaskFor(func(weapon *Item) bool { return weapon.Enchant.EffectID == effectID @@ -624,6 +634,11 @@ func (character *Character) GetProcMaskForTypesAndHand(twohand bool, weaponTypes func (character *Character) getDefaultProcMaskFor(pred func(item *Item) bool) ProcMask { mask := ProcMaskUnknown + + if character == nil { + return mask + } + if pred(character.MainHand()) { mask |= ProcMaskMeleeMH } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 805db7e3ff..f53f9fc90c 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -7,6 +7,10 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) +var WeaponSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand} +var TrinketSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2} +var PpmmSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged} + type OnItemSwap func(*Simulation, proto.ItemSlot) type ItemSwap struct { @@ -94,13 +98,6 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } } -// Helper for handling procs that use PPMManager to toggle the aura on/off -func (swap *ItemSwap) RegisterPPMEffect(procMask ProcMask, ppm float64, ppmm *PPMManager) { - swap.character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}, func(sim *Simulation, slot proto.ItemSlot) { - *ppmm = swap.character.AutoAttacks.newPPMManager(ppm, procMask) - }) -} - // Helper for handling Item Effects that use the itemID to toggle the aura on and off func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemSlot) { swap.registerProcInternal(ItemSwapProcConfig{ @@ -131,16 +128,15 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isEnchantEffectProc := config.EnchantId != 0 swap.character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { - item := swap.GetEquippedItemBySlot(slot) - var hasItemEquipped bool + var isItemSlotMatch = false if isItemProc { - hasItemEquipped = swap.character.HasItemEquipped(config.ItemID) + isItemSlotMatch = swap.HasEquippedItem(config.ItemID, config.Slots) } else if isEnchantEffectProc { - hasItemEquipped = item.Enchant.EffectID == config.EnchantId + isItemSlotMatch = swap.HasEquippedEnchant(config.EnchantId, config.Slots) } - if hasItemEquipped { + if isItemSlotMatch { if !config.Aura.IsActive() { config.Aura.Activate(sim) // Enchant effects such as Weapon/Back do not trigger an ICD @@ -218,26 +214,22 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) FindSlotForItem(itemID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { +func (swap *ItemSwap) HasEquippedItem(itemID int32, possibleSlots []proto.ItemSlot) bool { for _, slot := range possibleSlots { - if swap.swapEquip[slot].ID == itemID { - return slot - } else if swap.originalEquip[slot].ID == itemID { - return slot + if swap.character.Equipment[slot].ID == itemID { + return true } } - return -1 + return false } -func (swap *ItemSwap) FindSlotForEnchant(effectID int32, possibleSlots []proto.ItemSlot) proto.ItemSlot { +func (swap *ItemSwap) HasEquippedEnchant(effectID int32, possibleSlots []proto.ItemSlot) bool { for _, slot := range possibleSlots { - if swap.swapEquip[slot].Enchant.EffectID == effectID { - return slot - } else if swap.originalEquip[slot].Enchant.EffectID == effectID { - return slot + if swap.character.Equipment[slot].Enchant.EffectID == effectID { + return true } } - return -1 + return false } func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index f50fa7f28b..ec02a15bf3 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -3,7 +3,6 @@ package death_knight import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/stats" ) @@ -75,8 +74,6 @@ func init() { }, }) - procMask := character.GetDefaultProcMaskForWeaponEnchant(3368) - rfcAura := character.NewTemporaryStatsAuraWrapped("Rune Of The Fallen Crusader Proc", core.ActionID{SpellID: 53365}, stats.Stats{}, time.Second*15, func(aura *core.Aura) { statDep := character.NewDynamicMultiplyStat(stats.Strength, 1.15) @@ -93,15 +90,16 @@ func init() { Name: "Rune Of The Fallen Crusader", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, - PPM: 2.0, - ProcMask: procMask, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(3368, 2.0, 0), + // PPM: 2.0, + // ProcMask: procMask, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { rfcAura.Activate(sim) healingSpell.Cast(sim, &character.Unit) }, }) - character.ItemSwap.RegisterEnchantProc(3368, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3368, aura, core.WeaponSlots) }) // Rune of Cinderglacier @@ -120,8 +118,6 @@ func init() { School: core.SpellSchoolShadow | core.SpellSchoolFrost, }) - procMask := character.GetDefaultProcMaskForWeaponEnchant(3369) - cinderAura := character.GetOrRegisterAura(core.Aura{ ActionID: core.ActionID{SpellID: 53386}, Label: "Cinderglacier", @@ -156,15 +152,14 @@ func init() { Name: "Rune of Cinderglacier", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, - ProcMask: procMask, - PPM: 1.0, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(3369, 1.0, 0), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { cinderAura.Activate(sim) cinderAura.SetStacks(sim, cinderAura.MaxStacks) }, }) - character.ItemSwap.RegisterEnchantProc(3369, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3369, aura, core.WeaponSlots) }) // Rune of Razorice @@ -223,7 +218,7 @@ func init() { return target.GetOrRegisterAura(core.Aura{ Label: "RuneOfRazoriceVulnerability" + character.Label, ActionID: core.ActionID{SpellID: 51714}, - Duration: core.NeverExpires, + Duration: time.Second * 20, MaxStacks: 5, OnGain: func(aura *core.Aura, sim *core.Simulation) { @@ -235,7 +230,6 @@ func init() { }) }) - procMask := character.GetDefaultProcMaskForWeaponEnchant(3370) mhRazoriceSpell := newRazoriceHitSpell(character, true) ohRazoriceSpell := newRazoriceHitSpell(character, false) @@ -243,8 +237,8 @@ func init() { Name: "Razor Frost", Callback: core.CallbackOnSpellHitDealt, Outcome: core.OutcomeLanded, - ProcMask: procMask, ICD: time.Millisecond * 8, + DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(3370, 0, 1.0), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { vulnAura := vulnAuras.Get(result.Target) @@ -258,6 +252,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3370, aura, shared.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3370, aura, core.WeaponSlots) }) } diff --git a/sim/paladin/seal_of_insight.go b/sim/paladin/seal_of_insight.go index 9992d0f801..43eee91f2c 100644 --- a/sim/paladin/seal_of_insight.go +++ b/sim/paladin/seal_of_insight.go @@ -54,13 +54,13 @@ func (paladin *Paladin) registerSealOfInsight() { }, }) - ppmm := paladin.AutoAttacks.NewPPMManager(15, core.ProcMaskMeleeMH) + dpm := paladin.AutoAttacks.NewPPMManager(15, core.ProcMaskMeleeMH) paladin.SealOfInsightAura = paladin.RegisterAura(core.Aura{ Label: "Seal of Insight" + paladin.Label, Tag: "Seal", ActionID: core.ActionID{SpellID: 20165}, Duration: time.Minute * 30, - Ppmm: ppmm, + Dpm: dpm, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { // Don't proc on misses @@ -71,7 +71,7 @@ func (paladin *Paladin) registerSealOfInsight() { // SoJ only procs on white hits, CS, TV and HoW if (spell.ProcMask&core.ProcMaskMeleeWhiteHit == 0 && spell.ClassSpellMask&SpellMaskCanTriggerSealOfInsight == 0) || - !ppmm.Proc(sim, spell.ProcMask, "Seal of Insight"+paladin.Label) { + !dpm.Proc(sim, spell.ProcMask, "Seal of Insight"+paladin.Label) { return } diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index a6df59daaf..c9a2272217 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -3,7 +3,6 @@ package rogue import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -77,8 +76,8 @@ type Rogue struct { lastDeadlyPoisonProcMask core.ProcMask deadlyPoisonProcChanceBonus float64 - instantPoisonPPMM core.PPMManager - woundPoisonPPMM core.PPMManager + instantPoisonPPMM core.DynamicProcManager + woundPoisonPPMM core.DynamicProcManager AdrenalineRushAura *core.Aura BladeFlurryAura *core.Aura @@ -208,7 +207,7 @@ func (rogue *Rogue) Initialize() { rogue.T12ToTLastBuff = 3 // re-configure poisons when performing an item swap - rogue.RegisterItemSwapCallback(shared.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { + rogue.RegisterItemSwapCallback(core.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { if !rogue.Options.ApplyPoisonsManually { if rogue.MainHand() == nil || rogue.OffHand() == nil { return diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index 318359a4d8..864ca9452e 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -3,7 +3,6 @@ package enhancement import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" @@ -104,7 +103,7 @@ func (enh *EnhancementShaman) Initialize() { if enh.ItemSwap.IsEnabled() { enh.ApplyFlametongueImbueSwap(enh.getImbueProcMask(proto.ShamanImbue_FlametongueWeapon)) - enh.RegisterItemSwapCallback(shared.WeaponSlots, func(_ *core.Simulation, slot proto.ItemSlot) { + enh.RegisterItemSwapCallback(core.WeaponSlots, func(_ *core.Simulation, slot proto.ItemSlot) { enh.ApplySyncType(proto.ShamanSyncType_Auto) }) } diff --git a/sim/shaman/talents.go b/sim/shaman/talents.go index a26acb1f36..cce7c2fd0b 100644 --- a/sim/shaman/talents.go +++ b/sim/shaman/talents.go @@ -616,7 +616,7 @@ func (shaman *Shaman) applyMaelstromWeapon() { }) // TODO: This was 2% per talent point and max of 10% proc in wotlk. Can't find data on proc chance in cata but the talent was reduced to 3 pts. Guessing it is 3/7/10 like other talents - ppmm := shaman.AutoAttacks.NewPPMManager([]float64{0.0, 3.0, 6.0, 10.0}[shaman.Talents.MaelstromWeapon], core.ProcMaskMelee) + dpm := shaman.AutoAttacks.NewPPMManager([]float64{0.0, 3.0, 6.0, 10.0}[shaman.Talents.MaelstromWeapon], core.ProcMaskMelee) // This aura is hidden, just applies stacks of the proc aura. shaman.RegisterAura(core.Aura{ Label: "MaelstromWeapon", @@ -629,7 +629,7 @@ func (shaman *Shaman) applyMaelstromWeapon() { return } - if ppmm.Proc(sim, spell.ProcMask, "Maelstrom Weapon") { + if dpm.Proc(sim, spell.ProcMask, "Maelstrom Weapon") { shaman.MaelstromWeaponAura.Activate(sim) shaman.MaelstromWeaponAura.AddStack(sim) } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 52ec4b2727..741248fe97 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -3,14 +3,13 @@ package shaman import ( "time" - "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) func (shaman *Shaman) RegisterOnItemSwapWithImbue(effectID int32, procMask *core.ProcMask, aura *core.Aura) { - shaman.RegisterItemSwapCallback(shared.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { + shaman.RegisterItemSwapCallback(core.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { mask := core.ProcMaskUnknown if shaman.MainHand().TempEnchant == effectID { mask |= core.ProcMaskMeleeMH @@ -284,7 +283,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { shaman.OffHand().TempEnchant = 2 } - ppmm := shaman.AutoAttacks.NewPPMManager(9.0, procMask) + dpm := shaman.AutoAttacks.NewPPMManager(9.0, procMask) mhSpell := shaman.newFrostbrandImbueSpell() ohSpell := shaman.newFrostbrandImbueSpell() @@ -302,7 +301,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { return } - if ppmm.Proc(sim, spell.ProcMask, "Frostbrand Weapon") { + if dpm.Proc(sim, spell.ProcMask, "Frostbrand Weapon") { if spell.IsMH() { mhSpell.Cast(sim, result.Target) } else { @@ -313,7 +312,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterEnchantProc(2, aura, shared.WeaponSlots) + shaman.ItemSwap.RegisterEnchantProc(2, aura, core.WeaponSlots) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { diff --git a/ui/core/proto_utils/action_id.ts b/ui/core/proto_utils/action_id.ts index b036aa333d..2ec8b77b29 100644 --- a/ui/core/proto_utils/action_id.ts +++ b/ui/core/proto_utils/action_id.ts @@ -661,6 +661,13 @@ export class ActionId { case 'Virtuous Empowerment': name = 'Battleplate of Radiant Glory - T13 2pc'; break; + case 'Landslide': + if (tag == 1) { + name += ' (Main Hand)'; + } else if (tag == 2) { + name += ' (Off Hand)'; + } + break; default: if (tag) { name += ' (??)'; From 41c72cc848995b971bb5a69128785af6b97957b3 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Tue, 7 Jan 2025 19:02:03 -0800 Subject: [PATCH 075/127] Change the weapon and trinket slot aliases to functions in order to avoid the use of mutable global variables in the code. On branch feature/add-trinket-swapping Changes to be committed: modified: sim/common/cata/damage_procs.go modified: sim/common/cata/enchant_effects.go modified: sim/common/cata/gurthalak.go modified: sim/common/tbc/enchant_ffects.go modified: sim/common/wotlk/enchant_effects.go modified: sim/common/wotlk/other_effects.go modified: sim/core/attack.go modified: sim/core/character.go modified: sim/core/constants.go modified: sim/core/item_swaps.go modified: sim/death_knight/runeforging.go modified: sim/rogue/rogue.go modified: sim/shaman/enhancement/enhancement.go modified: sim/shaman/weapon_imbues.go --- sim/common/cata/damage_procs.go | 8 ++++---- sim/common/cata/enchant_effects.go | 16 ++++++++-------- sim/common/cata/gurthalak.go | 2 +- sim/common/tbc/enchant_effects.go | 8 ++++---- sim/common/wotlk/enchant_effects.go | 12 ++++++------ sim/common/wotlk/other_effects.go | 2 +- sim/core/attack.go | 6 +++--- sim/core/character.go | 2 +- sim/core/constants.go | 12 ++++++++++++ sim/core/item_swaps.go | 4 ---- sim/death_knight/runeforging.go | 6 +++--- sim/rogue/rogue.go | 2 +- sim/shaman/enhancement/enhancement.go | 2 +- sim/shaman/weapon_imbues.go | 4 ++-- 14 files changed, 47 insertions(+), 39 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index d2d1fd49f2..f3eeffbf79 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -16,7 +16,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: core.TrinketSlots, + Slots: core.TrinketSlots(), Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -34,7 +34,7 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: core.TrinketSlots, + Slots: core.TrinketSlots(), Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -95,7 +95,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(68925, aura, core.TrinketSlots) + character.ItemSwap.RegisterProc(68925, aura, core.TrinketSlots()) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -147,7 +147,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(69110, aura, core.TrinketSlots) + character.ItemSwap.RegisterProc(69110, aura, core.TrinketSlots()) }) } diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 75a2ac0acd..da712621ea 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -45,7 +45,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4066, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4066, aura, core.MeleeWeaponSlots()) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -114,7 +114,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4067, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4067, aura, core.MeleeWeaponSlots()) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -149,7 +149,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4074, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4074, aura, core.MeleeWeaponSlots()) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -233,7 +233,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4083, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4083, aura, core.MeleeWeaponSlots()) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -248,7 +248,7 @@ func init() { ProcChance: 0.25, Bonus: stats.Stats{stats.Spirit: 200}, Duration: time.Second * 15, - Slots: core.WeaponSlots, + Slots: core.MeleeWeaponSlots(), }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent @@ -263,7 +263,7 @@ func init() { ProcChance: 1.0 / 3.0, Bonus: stats.Stats{stats.Intellect: 500}, Duration: time.Second * 12, - Slots: core.WeaponSlots, + Slots: core.MeleeWeaponSlots(), }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk @@ -276,7 +276,7 @@ func init() { PPM: 1, // based on old Wowhead comments, TODO: measure in Classic Bonus: stats.Stats{stats.DodgeRating: 600}, Duration: time.Second * 10, - Slots: core.WeaponSlots, + Slots: core.MeleeWeaponSlots(), }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -311,7 +311,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4099, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(4099, aura, core.MeleeWeaponSlots()) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 31f9e316e1..96d3aecfc1 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -87,7 +87,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(gurthalakItemID, aura, core.WeaponSlots) + character.ItemSwap.RegisterProc(gurthalakItemID, aura, core.MeleeWeaponSlots()) }) } } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index f416911e33..b4305e17d9 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -81,7 +81,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(1900, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(1900, aura, core.MeleeWeaponSlots()) }) core.NewEnchantEffect(2929, func(agent core.Agent) { @@ -120,7 +120,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(2673, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(2673, aura, core.MeleeWeaponSlots()) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -162,7 +162,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3225, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3225, aura, core.MeleeWeaponSlots()) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -205,7 +205,7 @@ func init() { // }, // }) - // character.ItemSwap.RegisterEnchantProc(3273, aura, core.WeaponSlots) + // character.ItemSwap.RegisterEnchantProc(3273, aura, core.MeleeWeaponSlots()) // } // core.NewEnchantEffect(3273, func(agent core.Agent) { // character := agent.GetCharacter() diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 350821262d..2c474c4f64 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -53,7 +53,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3251, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3251, aura, core.MeleeWeaponSlots()) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -93,7 +93,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3239, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3239, aura, core.MeleeWeaponSlots()) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -180,7 +180,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3789, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3789, aura, core.MeleeWeaponSlots()) }) // TODO: These are stand-in values without any real reference. @@ -208,7 +208,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3241, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3241, aura, core.MeleeWeaponSlots()) }) // Enchant: 3790, Spell: 59630 - Black Magic @@ -225,7 +225,7 @@ func init() { Bonus: stats.Stats{stats.HasteRating: 250}, Duration: time.Second * 10, IgnoreSpellIDs: []int32{47465, 12867}, - Slots: core.WeaponSlots, + Slots: core.MeleeWeaponSlots(), }) // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope @@ -411,6 +411,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3870, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3870, aura, core.MeleeWeaponSlots()) }) } diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 5a94eaf843..5d2f24e24f 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -998,7 +998,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(itemID, aura, core.WeaponSlots) + character.ItemSwap.RegisterProc(itemID, aura, core.MeleeWeaponSlots()) }) }) diff --git a/sim/core/attack.go b/sim/core/attack.go index 26f4414873..16daf223ce 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -832,7 +832,7 @@ func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *DynamicPro dpm := aa.newDynamicProcManager(ppm, 0, procMask) if aa.character != nil { - aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, 0, procMask) }) } @@ -849,7 +849,7 @@ func (aa *AutoAttacks) NewDynamicProcManagerForEnchant(effectID int32, ppm float dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) if aa.character != nil { - aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { procMask := aa.character.GetDefaultProcMaskForWeaponEnchant(effectID) dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMask) }) @@ -868,7 +868,7 @@ func (aa *AutoAttacks) NewPPMManagerForWeaponEffect(itemID int32, ppm float64) * if aa.character != nil { if aa.character != nil { - aa.character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, 0, getProcMask()) }) } diff --git a/sim/core/character.go b/sim/core/character.go index f830e36c71..c82e12cb7c 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -601,7 +601,7 @@ func (character *Character) HasRangedWeapon() bool { func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask { procMask := character.GetDefaultProcMaskForWeaponEnchant(effectID) - character.RegisterItemSwapCallback(PpmmSlots, func(sim *Simulation, slot proto.ItemSlot) { + character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { procMask = character.GetDefaultProcMaskForWeaponEnchant(effectID) }) diff --git a/sim/core/constants.go b/sim/core/constants.go index e28e7eb530..67e6d30950 100644 --- a/sim/core/constants.go +++ b/sim/core/constants.go @@ -40,3 +40,15 @@ const OffHand Hand = false const CombatTableCoverageCap = 1.024 // 102.4% chance to avoid an attack const NumItemSlots = proto.ItemSlot_ItemSlotRanged + 1 + +func TrinketSlots() []proto.ItemSlot { + return []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2} +} + +func MeleeWeaponSlots() []proto.ItemSlot { + return []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand} +} + +func AllWeaponSlots() []proto.ItemSlot { + return []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged} +} diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index f53f9fc90c..7484a40210 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -7,10 +7,6 @@ import ( "github.com/wowsims/cata/sim/core/stats" ) -var WeaponSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand} -var TrinketSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotTrinket1, proto.ItemSlot_ItemSlotTrinket2} -var PpmmSlots = []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged} - type OnItemSwap func(*Simulation, proto.ItemSlot) type ItemSwap struct { diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index ec02a15bf3..ec57fdc135 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -99,7 +99,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3368, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3368, aura, core.MeleeWeaponSlots()) }) // Rune of Cinderglacier @@ -159,7 +159,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3369, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3369, aura, core.MeleeWeaponSlots()) }) // Rune of Razorice @@ -252,6 +252,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3370, aura, core.WeaponSlots) + character.ItemSwap.RegisterEnchantProc(3370, aura, core.MeleeWeaponSlots()) }) } diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index c9a2272217..f06d1d7bff 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -207,7 +207,7 @@ func (rogue *Rogue) Initialize() { rogue.T12ToTLastBuff = 3 // re-configure poisons when performing an item swap - rogue.RegisterItemSwapCallback(core.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { + rogue.RegisterItemSwapCallback(core.MeleeWeaponSlots(), func(sim *core.Simulation, slot proto.ItemSlot) { if !rogue.Options.ApplyPoisonsManually { if rogue.MainHand() == nil || rogue.OffHand() == nil { return diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index 864ca9452e..a4740fb9aa 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -103,7 +103,7 @@ func (enh *EnhancementShaman) Initialize() { if enh.ItemSwap.IsEnabled() { enh.ApplyFlametongueImbueSwap(enh.getImbueProcMask(proto.ShamanImbue_FlametongueWeapon)) - enh.RegisterItemSwapCallback(core.WeaponSlots, func(_ *core.Simulation, slot proto.ItemSlot) { + enh.RegisterItemSwapCallback(core.MeleeWeaponSlots(), func(_ *core.Simulation, slot proto.ItemSlot) { enh.ApplySyncType(proto.ShamanSyncType_Auto) }) } diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 741248fe97..8dcc8b51a0 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -9,7 +9,7 @@ import ( ) func (shaman *Shaman) RegisterOnItemSwapWithImbue(effectID int32, procMask *core.ProcMask, aura *core.Aura) { - shaman.RegisterItemSwapCallback(core.WeaponSlots, func(sim *core.Simulation, slot proto.ItemSlot) { + shaman.RegisterItemSwapCallback(core.MeleeWeaponSlots(), func(sim *core.Simulation, slot proto.ItemSlot) { mask := core.ProcMaskUnknown if shaman.MainHand().TempEnchant == effectID { mask |= core.ProcMaskMeleeMH @@ -312,7 +312,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterEnchantProc(2, aura, core.WeaponSlots) + shaman.ItemSwap.RegisterEnchantProc(2, aura, core.MeleeWeaponSlots()) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { From cd3b52264da9db6f9b7a3c29c0de0daa44f4cfee Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 18:10:39 +0100 Subject: [PATCH 076/127] Add missing trinket --- sim/common/cata/stat_bonus_procs.go | 12 ++++++++++++ ui/druid/balance/sim.ts | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 703733ffef..0ca188b227 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -1146,6 +1146,18 @@ func init() { ICD: time.Second * 115, }) + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ + Name: "Seal of the Seven Signs" + labelSuffix, + ItemID: []int32{77969, 77204, 77989}[version], + AuraID: []int32{109803, 109804, 109805}[version], + Bonus: stats.Stats{stats.HasteRating: []float64{2573, 2904, 3278}[version]}, + Duration: time.Second * 20, + Callback: core.CallbackOnHealDealt | core.CallbackOnPeriodicHealDealt, + ProcMask: core.ProcMaskSpellHealing, + ProcChance: 0.15, + ICD: time.Second * 115, + }) + shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Soulshifter Vortex" + labelSuffix, ItemID: []int32{77970, 77206, 77990}[version], diff --git a/ui/druid/balance/sim.ts b/ui/druid/balance/sim.ts index f42ba26e9e..ba8b57911f 100644 --- a/ui/druid/balance/sim.ts +++ b/ui/druid/balance/sim.ts @@ -83,7 +83,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecBalanceDruid, { otherInputs: { inputs: [BalanceInputs.OkfUptime, OtherInputs.TankAssignment, OtherInputs.InputDelay, OtherInputs.DistanceFromTarget, OtherInputs.DarkIntentUptime], }, - itemSwapSlots: [ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, From 98956ee8d3f592c21d67655c29a02f4c4cc777b0 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 20:08:14 +0100 Subject: [PATCH 077/127] PR Feedback --- sim/common/cata/gurthalak.go | 7 +- sim/common/cata/other_effects.go | 12 +- sim/common/cata/stat_bonus_procs.go | 3 +- sim/common/shared/shared_utils.go | 34 ++-- sim/common/tbc/enchant_effects.go | 175 +++++++++--------- sim/common/tbc/melee_items.go | 27 ++- sim/core/attack.go | 30 ++- sim/core/character.go | 26 ++- sim/core/item_sets.go | 20 +- sim/core/item_swaps.go | 8 +- sim/death_knight/blood/TestBlood.results | 24 +++ sim/death_knight/frost/TestFrost.results | 24 +++ sim/death_knight/unholy/TestUnholy.results | 26 ++- sim/druid/balance/TestBalance.results | 21 +++ sim/druid/feral/TestFeral.results | 21 +++ sim/druid/guardian/TestGuardian.results | 24 +++ sim/hunter/beast_mastery/TestBM.results | 21 +++ sim/hunter/marksmanship/TestMM.results | 21 +++ sim/hunter/survival/TestSV.results | 21 +++ sim/mage/arcane/TestArcane.results | 21 +++ sim/mage/fire/TestFire.results | 21 +++ sim/paladin/protection/TestProtection.results | 21 +++ .../retribution/TestRetribution.results | 21 +++ sim/priest/shadow/TestShadow.results | 21 +++ .../assassination/TestAssassination.results | 21 +++ sim/rogue/combat/TestCombat.results | 21 +++ sim/rogue/items.go | 9 +- sim/rogue/poisons.go | 4 +- sim/rogue/rogue.go | 4 +- sim/rogue/subtlety/TestSubtlety.results | 21 +++ sim/shaman/elemental/TestElemental.results | 21 +++ .../enhancement/TestEnhancement.results | 21 +++ sim/shaman/items.go | 4 +- sim/warlock/affliction/TestAffliction.results | 21 +++ sim/warlock/demonology/TestDemonology.results | 21 +++ .../destruction/TestDestruction.results | 21 +++ sim/warlock/items.go | 10 +- sim/warrior/arms/TestArms.results | 21 +++ sim/warrior/fury/TestFury.results | 21 +++ .../protection/TestProtectionWarrior.results | 21 +++ 40 files changed, 743 insertions(+), 169 deletions(-) diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 96d3aecfc1..773d0ef2c1 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -62,7 +62,7 @@ func init() { }, }) - procMask := character.GetDefaultProcMaskForWeaponEffect(gurthalakItemID) + procMask := character.GetDynamicProcMaskForWeaponEffect(gurthalakItemID) aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Gurthalak Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: gurthalakItemID}, @@ -71,7 +71,7 @@ func init() { Outcome: core.OutcomeLanded, Harmful: true, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(procMask) && !ignore { + if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(*procMask) && !ignore { return } @@ -80,7 +80,8 @@ func init() { } if sim.Log != nil { - character.Log(sim, "Gurthalak procced by %s", spell.ActionID) + slotLabel := core.Ternary(spell.IsMH(), "Main Hand", "Off Hand") + character.Log(sim, "Gurthalak (%s) procced by %s", slotLabel, spell.ActionID) } summonSpell.Cast(sim, result.Target) diff --git a/sim/common/cata/other_effects.go b/sim/common/cata/other_effects.go index 5d69204779..ae3cac8ace 100644 --- a/sim/common/cata/other_effects.go +++ b/sim/common/cata/other_effects.go @@ -1126,7 +1126,9 @@ func init() { character := agent.GetCharacter() actionID := core.ActionID{SpellID: []int32{109828, 108022, 109831}[version]} hpModifier := []float64{0.013, 0.015, 0.017}[version] - procMask := character.GetDefaultProcMaskForWeaponEffect(souldrinkerItemID) | core.ProcMaskMeleeProc + + defaultProcMask := core.ProcMaskMeleeProc + procMask := character.GetDynamicProcMaskForWeaponEffect(souldrinkerItemID) var damageDealt float64 drainLifeHeal := character.RegisterSpell(core.SpellConfig{ @@ -1171,7 +1173,7 @@ func init() { return } - if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(procMask) && !ignore { + if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(*procMask|defaultProcMask) && !ignore { return } @@ -1189,7 +1191,9 @@ func init() { core.NewItemEffect(nokaledItemID, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(nokaledItemID) | core.ProcMaskMeleeProc + defaultProcMask := core.ProcMaskMeleeProc + procMask := character.GetDynamicProcMaskForWeaponEffect(nokaledItemID) + minDamage := []float64{6781, 7654, 8640}[version] maxDamage := []float64{10171, 11481, 12960}[version] @@ -1235,7 +1239,7 @@ func init() { return } - if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(procMask) && !ignore { + if _, ignore := ignoresSlot[spell.ActionID.SpellID]; !spell.ProcMask.Matches(*procMask|defaultProcMask) && !ignore { return } diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 0ca188b227..252dfc1d23 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -5,7 +5,6 @@ import ( "github.com/wowsims/cata/sim/common/shared" "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" "github.com/wowsims/cata/sim/core/stats" ) @@ -1275,7 +1274,7 @@ func init() { var ItemSetAgonyAndTorment = core.NewItemSet(core.ItemSet{ Name: "Agony and Torment", - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, + Slots: core.MeleeWeaponSlots(), Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { character := agent.GetCharacter() diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 300a88f406..001479f34a 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -112,8 +112,13 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } procAura := character.NewTemporaryStatsAura(config.Name+" Proc", procID, config.Bonus, config.Duration) - if isEnchant && config.PPM != 0 && config.ProcMask == core.ProcMaskUnknown { - config.ProcMask = character.GetDefaultProcMaskForWeaponEnchant(config.EnchantID) + var dpm *core.DynamicProcManager + if (config.PPM != 0) && (config.ProcMask == core.ProcMaskUnknown) { + if isEnchant { + dpm = character.AutoAttacks.NewDynamicProcManagerForEnchant(effectID, config.PPM, 0) + } else { + dpm = character.AutoAttacks.NewPPMManagerForWeaponEffect(effectID, config.PPM) + } } var itemSwapProcCondition core.CustomStatBuffProcCondition @@ -123,21 +128,12 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } } + procAura.CustomProcCondition = core.Ternary(config.CustomProcCondition == nil, itemSwapProcCondition, func(sim *core.Simulation, aura *core.Aura) bool { + return config.CustomProcCondition(sim, aura) && ((itemSwapProcCondition == nil) || itemSwapProcCondition(sim, aura)) + }) + var customHandler CustomProcHandler if config.CustomProcCondition != nil { - if itemSwapProcCondition != nil { - procAura.CustomProcCondition = func(sim *core.Simulation, aura *core.Aura) bool { - return itemSwapProcCondition(sim, aura) && config.CustomProcCondition(sim, aura) - } - } else { - procAura.CustomProcCondition = config.CustomProcCondition - } - - } else if itemSwapProcCondition != nil { - procAura.CustomProcCondition = itemSwapProcCondition - } - - if procAura.CustomProcCondition != nil { customHandler = func(sim *core.Simulation, procAura *core.StatBuffAura) { if procAura.CanProc(sim) { procAura.Activate(sim) @@ -192,6 +188,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c Harmful: config.Harmful, ProcChance: config.ProcChance, PPM: config.PPM, + DPM: dpm, ICD: config.ICD, Handler: handler, }) @@ -542,6 +539,11 @@ func NewProcDamageEffect(config ProcDamageEffect) { } triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) - character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + if isEnchant { + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + } else { + eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(effectID), false) + character.ItemSwap.RegisterProc(effectID, triggerAura, eligibleSlotsForItem) + } }) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index b4305e17d9..b223a75fc8 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -166,98 +166,89 @@ func init() { }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 - // applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { - // icd := core.Cooldown{ - // Timer: character.NewTimer(), - // Duration: time.Second * 25, - // } - - // label := "Deathfrost-" - // if isMH { - // label += "MH" - // } else { - // label += "OH" - // } - // procMask := core.ProcMaskMelee - // dpm := character.AutoAttacks.NewPPMManager(2.15, procMask) - - // aura := character.GetOrRegisterAura(core.Aura{ - // Label: label, - // 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.Damage == 0 { - // return - // } - - // if spell.ProcMask.Matches(core.ProcMaskMelee) { - // if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { - // procSpell.Cast(sim, result.Target) - // } - // } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { - // if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { - // icd.Use(sim) - // procSpell.Cast(sim, result.Target) - // } - // } - // }, - // }) - - // character.ItemSwap.RegisterEnchantProc(3273, aura, core.MeleeWeaponSlots()) - // } - // core.NewEnchantEffect(3273, func(agent core.Agent) { - // character := agent.GetCharacter() - - // procMask := character.GetDefaultProcMaskForWeaponEnchant(3273) - // if procMask == core.ProcMaskUnknown { - // return - // } - - // actionID := core.ActionID{SpellID: 46579} - // if spell := character.GetSpell(actionID); spell != nil { - // // This function gets called twice when dual wielding this enchant, but we - // // handle both in one call. - // return - // } - - // debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) - // for i, target := range character.Env.Encounter.TargetUnits { - // aura := target.GetOrRegisterAura(core.Aura{ - // Label: "Deathfrost", - // ActionID: actionID, - // Duration: time.Second * 8, - // }) - // core.AtkSpeedReductionEffect(aura, 1.15) - // debuffs[i] = aura - // } - - // procSpell := character.RegisterSpell(core.SpellConfig{ - // ActionID: actionID, - // SpellSchool: core.SpellSchoolFrost, - // ProcMask: core.ProcMaskEmpty, - - // DamageMultiplier: 1, - // CritMultiplier: character.DefaultSpellCritMultiplier(), - // ThreatMultiplier: 1, - - // ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - // result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) - // if result.Landed() { - // debuffs[target.Index].Activate(sim) - // } - // spell.DealDamage(sim, result) - // }, - // }) - - // if procMask.Matches(core.ProcMaskMeleeMH) { - // applyDeathfrostForWeapon(character, procSpell, true) - // } - // if procMask.Matches(core.ProcMaskMeleeOH) { - // applyDeathfrostForWeapon(character, procSpell, false) - // } - // }) + applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { + icd := core.Cooldown{ + Timer: character.NewTimer(), + Duration: time.Second * 25, + } + + label := "Deathfrost-" + if isMH { + label += "MH" + } else { + label += "OH" + } + dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(3273, 2.15) + + aura := character.GetOrRegisterAura(core.Aura{ + Label: label, + 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.Damage == 0 { + return + } + + if spell.ProcMask.Matches(core.ProcMaskMelee) { + if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { + procSpell.Cast(sim, result.Target) + } + } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { + if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { + icd.Use(sim) + procSpell.Cast(sim, result.Target) + } + } + }, + }) + + character.ItemSwap.RegisterEnchantProc(3273, aura, core.MeleeWeaponSlots()) + } + + core.NewEnchantEffect(3273, func(agent core.Agent) { + character := agent.GetCharacter() + + actionID := core.ActionID{SpellID: 46579} + if spell := character.GetSpell(actionID); spell != nil { + // This function gets called twice when dual wielding this enchant, but we + // handle both in one call. + return + } + + debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) + for i, target := range character.Env.Encounter.TargetUnits { + aura := target.GetOrRegisterAura(core.Aura{ + Label: "Deathfrost", + ActionID: actionID, + Duration: time.Second * 8, + }) + core.AtkSpeedReductionEffect(aura, 1.15) + debuffs[i] = aura + } + + procSpell := character.RegisterSpell(core.SpellConfig{ + ActionID: actionID, + SpellSchool: core.SpellSchoolFrost, + ProcMask: core.ProcMaskEmpty, + + DamageMultiplier: 1, + CritMultiplier: character.DefaultSpellCritMultiplier(), + ThreatMultiplier: 1, + + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) + if result.Landed() { + debuffs[target.Index].Activate(sim) + } + spell.DealDamage(sim, result) + }, + }) + + applyDeathfrostForWeapon(character, procSpell, true) + applyDeathfrostForWeapon(character, procSpell, false) + }) core.AddEffectsToTest = true } diff --git a/sim/common/tbc/melee_items.go b/sim/common/tbc/melee_items.go index ea6841bc54..f19b25ca99 100644 --- a/sim/common/tbc/melee_items.go +++ b/sim/common/tbc/melee_items.go @@ -22,8 +22,7 @@ func init() { core.NewItemEffect(19019, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(19019) - dpm := character.AutoAttacks.NewPPMManager(6.0, procMask) + dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(19019, 6.0) procActionID := core.ActionID{SpellID: 21992} @@ -174,8 +173,7 @@ func init() { core.NewItemEffect(29996, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(29996) - pppm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(29996, 1.0) actionID := core.ActionID{ItemID: 29996} @@ -199,7 +197,7 @@ func init() { return } - if pppm.Proc(sim, spell.ProcMask, "Rod of the Sun King") { + if dpm.Proc(sim, spell.ProcMask, "Rod of the Sun King") { switch spell.Unit.GetCurrentPowerBar() { case core.RageBar: spell.Unit.AddRage(sim, 5, resourceMetricsRage) @@ -214,7 +212,7 @@ func init() { core.NewItemEffect(31193, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(31193) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(31193, 0, 0.02) procSpell := character.GetOrRegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 24585}, @@ -234,12 +232,11 @@ func init() { }) core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Blade of Unquenched Thirst Trigger", - ActionID: core.ActionID{ItemID: 31193}, - Callback: core.CallbackOnSpellHitDealt, - ProcMask: procMask, - Outcome: core.OutcomeLanded, - ProcChance: 0.02, + Name: "Blade of Unquenched Thirst Trigger", + ActionID: core.ActionID{ItemID: 31193}, + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + DPM: dpm, Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { procSpell.Cast(sim, result.Target) }, @@ -249,8 +246,7 @@ func init() { core.NewItemEffect(32262, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(32262) - dpm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) procSpell := character.GetOrRegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 40291}, @@ -355,8 +351,7 @@ func init() { core.NewItemEffect(12590, func(agent core.Agent) { character := agent.GetCharacter() - procMask := character.GetDefaultProcMaskForWeaponEffect(12590) - dpm := character.AutoAttacks.NewPPMManager(1.0, procMask) + dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(12590, 1.0) effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) diff --git a/sim/core/attack.go b/sim/core/attack.go index 16daf223ce..7d3ec24490 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -843,14 +843,14 @@ func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *DynamicPro // PPMManager for dynamic ProcMasks on weapon enchants func (aa *AutoAttacks) NewDynamicProcManagerForEnchant(effectID int32, ppm float64, fixedProcChance float64) *DynamicProcManager { getProcMask := func() ProcMask { - return aa.character.GetDefaultProcMaskForWeaponEnchant(effectID) + return aa.character.getDefaultProcMaskForWeaponEnchant(effectID) } dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) if aa.character != nil { aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - procMask := aa.character.GetDefaultProcMaskForWeaponEnchant(effectID) + procMask := aa.character.getDefaultProcMaskForWeaponEnchant(effectID) dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMask) }) } @@ -861,7 +861,7 @@ func (aa *AutoAttacks) NewDynamicProcManagerForEnchant(effectID int32, ppm float // PPMManager for dynamic ProcMasks on weapon effects func (aa *AutoAttacks) NewPPMManagerForWeaponEffect(itemID int32, ppm float64) *DynamicProcManager { getProcMask := func() ProcMask { - return aa.character.GetDefaultProcMaskForWeaponEffect(itemID) + return aa.character.getDefaultProcMaskForWeaponEffect(itemID) } dpm := aa.newDynamicProcManager(ppm, 0, getProcMask()) @@ -877,7 +877,31 @@ func (aa *AutoAttacks) NewPPMManagerForWeaponEffect(itemID int32, ppm float64) * return &dpm } +// PPMManager for dynamic ProcMasks on weapon effects +func (aa *AutoAttacks) NewDynamicProcManagerForWeaponEffect(itemID int32, ppm float64, fixedProcChance float64) *DynamicProcManager { + getProcMask := func() ProcMask { + return aa.character.getDefaultProcMaskForWeaponEffect(itemID) + } + + dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) + + if aa.character != nil { + if aa.character != nil { + aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) + }) + } + } + + return &dpm + +} + func (aa *AutoAttacks) newDynamicProcManager(ppm float64, fixedProcChance float64, procMask ProcMask) DynamicProcManager { + if (ppm != 0) && (fixedProcChance != 0) { + panic("Cannot simultaneously specify both a ppm and a fixed proc chance!") + } + if !aa.AutoSwingMelee && !aa.AutoSwingRanged { return DynamicProcManager{} } diff --git a/sim/core/character.go b/sim/core/character.go index c82e12cb7c..e8e01bed6b 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -599,22 +599,40 @@ func (character *Character) HasRangedWeapon() bool { } func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask { - procMask := character.GetDefaultProcMaskForWeaponEnchant(effectID) + getProcMask := func() ProcMask { + return character.getDefaultProcMaskForWeaponEnchant(effectID) + } + + procMask := getProcMask() character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - procMask = character.GetDefaultProcMaskForWeaponEnchant(effectID) + procMask = getProcMask() }) return &procMask } -func (character *Character) GetDefaultProcMaskForWeaponEnchant(effectID int32) ProcMask { +func (character *Character) getDefaultProcMaskForWeaponEnchant(effectID int32) ProcMask { return character.getDefaultProcMaskFor(func(weapon *Item) bool { return weapon.Enchant.EffectID == effectID }) } -func (character *Character) GetDefaultProcMaskForWeaponEffect(itemID int32) ProcMask { +func (character *Character) GetDynamicProcMaskForWeaponEffect(itemID int32) *ProcMask { + getProcMask := func() ProcMask { + return character.getDefaultProcMaskForWeaponEffect(itemID) + } + + procMask := getProcMask() + + character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { + procMask = getProcMask() + }) + + return &procMask +} + +func (character *Character) getDefaultProcMaskForWeaponEffect(itemID int32) ProcMask { return character.getDefaultProcMaskFor(func(weapon *Item) bool { return weapon.ID == itemID }) diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index efad0941e1..23626be0bc 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -25,12 +25,14 @@ type ItemSet struct { Slots []proto.ItemSlot } -var DefaultItemSetSlots = []proto.ItemSlot{ - proto.ItemSlot_ItemSlotHead, - proto.ItemSlot_ItemSlotShoulder, - proto.ItemSlot_ItemSlotChest, - proto.ItemSlot_ItemSlotHands, - proto.ItemSlot_ItemSlotLegs, +func DefaultItemSetSlots() []proto.ItemSlot { + return []proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotLegs, + } } func (set ItemSet) Items() []Item { @@ -59,7 +61,7 @@ func NewItemSet(set ItemSet) *ItemSet { foundAlternativeName := set.AlternativeName == "" if len(set.Slots) == 0 { - set.Slots = DefaultItemSetSlots + set.Slots = DefaultItemSetSlots() } for _, item := range ItemsByID { @@ -266,11 +268,11 @@ func (character *Character) RegisterPvPGloveMod(itemIDs []int32, config SpellMod } } + checkGloves() + if character.ItemSwap.IsEnabled() { character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *Simulation, _ proto.ItemSlot) { checkGloves() }) - } else { - checkGloves() } } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 7484a40210..21c2d6930e 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,6 +1,7 @@ package core import ( + "fmt" "time" "github.com/wowsims/cata/sim/core/proto" @@ -13,6 +14,7 @@ type ItemSwap struct { character *Character onSwapCallbacks [NumItemSlots][]OnItemSwap + isFuryWarrior bool mhCritMultiplier float64 ohCritMultiplier float64 rangedCritMultiplier float64 @@ -64,6 +66,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti } character.ItemSwap = ItemSwap{ + isFuryWarrior: character.Spec == proto.Spec_SpecFuryWarrior, mhCritMultiplier: mhCritMultiplier, ohCritMultiplier: ohCritMultiplier, rangedCritMultiplier: rangedCritMultiplier, @@ -128,6 +131,7 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { if isItemProc { isItemSlotMatch = swap.HasEquippedItem(config.ItemID, config.Slots) + fmt.Println("RegisterProc", sim.CurrentTime, config.ItemID, slot) } else if isEnchantEffectProc { isItemSlotMatch = swap.HasEquippedEnchant(config.EnchantId, config.Slots) } @@ -266,7 +270,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } //will swap both on the MainHand Slot for 2H. - if slot == proto.ItemSlot_ItemSlotOffHand && has2H { + if has2H && slot == proto.ItemSlot_ItemSlotOffHand && !swap.isFuryWarrior { continue } @@ -316,7 +320,7 @@ func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (b newStats := newItemStats.Subtract(oldItemStats) //2H will swap out the offhand also. - if has2H && slot == proto.ItemSlot_ItemSlotMainHand { + if has2H && slot == proto.ItemSlot_ItemSlotMainHand && !swap.isFuryWarrior { _, ohStats := swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H, isReset) newStats = newStats.Add(ohStats) } diff --git a/sim/death_knight/blood/TestBlood.results b/sim/death_knight/blood/TestBlood.results index 9e8860c33a..31f579c2a7 100644 --- a/sim/death_knight/blood/TestBlood.results +++ b/sim/death_knight/blood/TestBlood.results @@ -1603,6 +1603,30 @@ dps_results: { hps: 5300.29889 } } +dps_results: { + key: "TestBlood-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 22115.12597 + tps: 111531.13752 + hps: 5457.04271 + } +} +dps_results: { + key: "TestBlood-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 22009.66333 + tps: 110377.7788 + hps: 5456.37743 + } +} +dps_results: { + key: "TestBlood-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 22378.91459 + tps: 112308.53866 + hps: 5467.11498 + } +} dps_results: { key: "TestBlood-AllItems-Shadowmourne-49623" value: { diff --git a/sim/death_knight/frost/TestFrost.results b/sim/death_knight/frost/TestFrost.results index 98bffdbc1c..6b49864dfc 100644 --- a/sim/death_knight/frost/TestFrost.results +++ b/sim/death_knight/frost/TestFrost.results @@ -1635,6 +1635,30 @@ dps_results: { hps: 521.88199 } } +dps_results: { + key: "TestFrost-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 38688.87584 + tps: 36488.59781 + hps: 539.77064 + } +} +dps_results: { + key: "TestFrost-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 38762.29847 + tps: 36523.18172 + hps: 535.10404 + } +} +dps_results: { + key: "TestFrost-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 38942.55976 + tps: 36736.21674 + hps: 531.99297 + } +} dps_results: { key: "TestFrost-AllItems-Shadowmourne-49623" value: { diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index f974dff11e..e3462ae22a 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -304,7 +304,7 @@ dps_results: { value: { dps: 43120.17978 tps: 32013.58168 - hps: 601.25407 + hps: 601.25406 } } dps_results: { @@ -1611,6 +1611,30 @@ dps_results: { hps: 646.50919 } } +dps_results: { + key: "TestUnholy-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 39915.83599 + tps: 29462.91364 + hps: 659.8312 + } +} +dps_results: { + key: "TestUnholy-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 39920.37289 + tps: 29491.48114 + hps: 653.56202 + } +} +dps_results: { + key: "TestUnholy-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 40160.97481 + tps: 29701.00924 + hps: 662.96579 + } +} dps_results: { key: "TestUnholy-AllItems-Shadowmourne-49623" value: { diff --git a/sim/druid/balance/TestBalance.results b/sim/druid/balance/TestBalance.results index ab065d9eb1..8b35cef2e4 100644 --- a/sim/druid/balance/TestBalance.results +++ b/sim/druid/balance/TestBalance.results @@ -1445,6 +1445,27 @@ dps_results: { tps: 27667.93127 } } +dps_results: { + key: "TestBalance-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 28379.82347 + tps: 28395.90986 + } +} +dps_results: { + key: "TestBalance-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 28194.09114 + tps: 28211.00984 + } +} +dps_results: { + key: "TestBalance-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 28588.22921 + tps: 28603.33637 + } +} dps_results: { key: "TestBalance-AllItems-ShardofWoe-60233" value: { diff --git a/sim/druid/feral/TestFeral.results b/sim/druid/feral/TestFeral.results index 27c9cdc23f..f1777948f1 100644 --- a/sim/druid/feral/TestFeral.results +++ b/sim/druid/feral/TestFeral.results @@ -1438,6 +1438,27 @@ dps_results: { tps: 46454.53299 } } +dps_results: { + key: "TestFeral-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 30947.06126 + tps: 46123.89422 + } +} +dps_results: { + key: "TestFeral-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 30947.06126 + tps: 46123.93807 + } +} +dps_results: { + key: "TestFeral-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 30947.06126 + tps: 46123.84446 + } +} dps_results: { key: "TestFeral-AllItems-ShardofWoe-60233" value: { diff --git a/sim/druid/guardian/TestGuardian.results b/sim/druid/guardian/TestGuardian.results index 935fce971b..e4ccfbc446 100644 --- a/sim/druid/guardian/TestGuardian.results +++ b/sim/druid/guardian/TestGuardian.results @@ -1643,6 +1643,30 @@ dps_results: { hps: 314.83292 } } +dps_results: { + key: "TestGuardian-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 9705.01597 + tps: 48591.91358 + hps: 316.2575 + } +} +dps_results: { + key: "TestGuardian-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 9645.52154 + tps: 48295.05416 + hps: 316.2575 + } +} +dps_results: { + key: "TestGuardian-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 9675.68712 + tps: 48446.00079 + hps: 319.10667 + } +} dps_results: { key: "TestGuardian-AllItems-ShardofWoe-60233" value: { diff --git a/sim/hunter/beast_mastery/TestBM.results b/sim/hunter/beast_mastery/TestBM.results index fefc480d6d..295c4bd2c6 100644 --- a/sim/hunter/beast_mastery/TestBM.results +++ b/sim/hunter/beast_mastery/TestBM.results @@ -1508,6 +1508,27 @@ dps_results: { tps: 15118.55967 } } +dps_results: { + key: "TestBM-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 23897.65495 + tps: 15118.55967 + } +} +dps_results: { + key: "TestBM-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 23897.65495 + tps: 15118.55967 + } +} +dps_results: { + key: "TestBM-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 23897.65495 + tps: 15118.55967 + } +} dps_results: { key: "TestBM-AllItems-Shadowmourne-49623" value: { diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index e3c2e0bd83..0007ca63be 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -1508,6 +1508,27 @@ dps_results: { tps: 20372.66012 } } +dps_results: { + key: "TestMM-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 22541.49473 + tps: 20253.42057 + } +} +dps_results: { + key: "TestMM-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 22541.49473 + tps: 20253.42057 + } +} +dps_results: { + key: "TestMM-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 22541.49473 + tps: 20253.42057 + } +} dps_results: { key: "TestMM-AllItems-Shadowmourne-49623" value: { diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 1671770f6a..56f4e61b1a 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -1501,6 +1501,27 @@ dps_results: { tps: 25581.18738 } } +dps_results: { + key: "TestSV-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 28305.30571 + tps: 25581.18738 + } +} +dps_results: { + key: "TestSV-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 28305.30571 + tps: 25581.18738 + } +} +dps_results: { + key: "TestSV-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 28305.30571 + tps: 25581.18738 + } +} dps_results: { key: "TestSV-AllItems-Shadowmourne-49623" value: { diff --git a/sim/mage/arcane/TestArcane.results b/sim/mage/arcane/TestArcane.results index 619d7f470f..f6ad5b63ac 100644 --- a/sim/mage/arcane/TestArcane.results +++ b/sim/mage/arcane/TestArcane.results @@ -1424,6 +1424,27 @@ dps_results: { tps: 33793.42963 } } +dps_results: { + key: "TestArcane-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 38224.56479 + tps: 34925.75513 + } +} +dps_results: { + key: "TestArcane-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 37960.13615 + tps: 34629.68476 + } +} +dps_results: { + key: "TestArcane-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 38476.27966 + tps: 35265.47943 + } +} dps_results: { key: "TestArcane-AllItems-ShardofWoe-60233" value: { diff --git a/sim/mage/fire/TestFire.results b/sim/mage/fire/TestFire.results index 80153672ab..5a753de49c 100644 --- a/sim/mage/fire/TestFire.results +++ b/sim/mage/fire/TestFire.results @@ -1417,6 +1417,27 @@ dps_results: { tps: 32809.92842 } } +dps_results: { + key: "TestFire-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 37874.24137 + tps: 33704.11639 + } +} +dps_results: { + key: "TestFire-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 37916.36631 + tps: 33740.11755 + } +} +dps_results: { + key: "TestFire-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 38087.78658 + tps: 33925.12738 + } +} dps_results: { key: "TestFire-AllItems-ShardofWoe-60233" value: { diff --git a/sim/paladin/protection/TestProtection.results b/sim/paladin/protection/TestProtection.results index 223c1d6c2c..28493654d6 100644 --- a/sim/paladin/protection/TestProtection.results +++ b/sim/paladin/protection/TestProtection.results @@ -1428,6 +1428,27 @@ dps_results: { tps: 53979.21063 } } +dps_results: { + key: "TestProtection-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 10844.79153 + tps: 54531.1142 + } +} +dps_results: { + key: "TestProtection-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 10794.78325 + tps: 54279.49883 + } +} +dps_results: { + key: "TestProtection-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 10819.61801 + tps: 54403.64029 + } +} dps_results: { key: "TestProtection-AllItems-ShardofWoe-60233" value: { diff --git a/sim/paladin/retribution/TestRetribution.results b/sim/paladin/retribution/TestRetribution.results index bf2dd25c8c..362fcd13d9 100644 --- a/sim/paladin/retribution/TestRetribution.results +++ b/sim/paladin/retribution/TestRetribution.results @@ -1445,6 +1445,27 @@ dps_results: { tps: 36374.85563 } } +dps_results: { + key: "TestRetribution-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 36799.47161 + tps: 36800.35779 + } +} +dps_results: { + key: "TestRetribution-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 36681.19199 + tps: 36683.0244 + } +} +dps_results: { + key: "TestRetribution-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 36853.68994 + tps: 36853.07352 + } +} dps_results: { key: "TestRetribution-AllItems-Shadowmourne-49623" value: { diff --git a/sim/priest/shadow/TestShadow.results b/sim/priest/shadow/TestShadow.results index 89efbe84e3..74c2b1e138 100644 --- a/sim/priest/shadow/TestShadow.results +++ b/sim/priest/shadow/TestShadow.results @@ -1431,6 +1431,27 @@ dps_results: { tps: 33025.38649 } } +dps_results: { + key: "TestShadow-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 39351.82253 + tps: 33465.94967 + } +} +dps_results: { + key: "TestShadow-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 39220.15255 + tps: 33344.04899 + } +} +dps_results: { + key: "TestShadow-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 39573.01424 + tps: 33645.34386 + } +} dps_results: { key: "TestShadow-AllItems-ShardofWoe-60233" value: { diff --git a/sim/rogue/assassination/TestAssassination.results b/sim/rogue/assassination/TestAssassination.results index ff2e6aaf69..9b5380dd34 100644 --- a/sim/rogue/assassination/TestAssassination.results +++ b/sim/rogue/assassination/TestAssassination.results @@ -1461,6 +1461,27 @@ dps_results: { tps: 19491.33575 } } +dps_results: { + key: "TestAssassination-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 27452.58556 + tps: 19491.33575 + } +} +dps_results: { + key: "TestAssassination-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 27452.58556 + tps: 19491.33575 + } +} +dps_results: { + key: "TestAssassination-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 27452.58556 + tps: 19491.33575 + } +} dps_results: { key: "TestAssassination-AllItems-ShardofWoe-60233" value: { diff --git a/sim/rogue/combat/TestCombat.results b/sim/rogue/combat/TestCombat.results index f192a4ea2a..b707378191 100644 --- a/sim/rogue/combat/TestCombat.results +++ b/sim/rogue/combat/TestCombat.results @@ -1466,6 +1466,27 @@ dps_results: { tps: 19868.94288 } } +dps_results: { + key: "TestCombat-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 27984.42658 + tps: 19868.94288 + } +} +dps_results: { + key: "TestCombat-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 27984.42658 + tps: 19868.94288 + } +} +dps_results: { + key: "TestCombat-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 27984.42658 + tps: 19868.94288 + } +} dps_results: { key: "TestCombat-AllItems-ShardofWoe-60233" value: { diff --git a/sim/rogue/items.go b/sim/rogue/items.go index 41d349c29d..74c4b64286 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -243,7 +243,8 @@ func getFangsProcRate(character *core.Character) float64 { // Fear + Vengeance var JawsOfRetribution = core.NewItemSet(core.ItemSet{ - Name: "Jaws of Retribution", + Name: "Jaws of Retribution", + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Suffering, increasing your Agility by 2, stacking up to 50 times. 2: func(agent core.Agent, setBonusAura *core.Aura) { @@ -278,7 +279,8 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ // Sleeper + Dreamer var MawOfOblivion = core.NewItemSet(core.ItemSet{ - Name: "Maw of Oblivion", + Name: "Maw of Oblivion", + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Nightmare, increasing your Agility by 5, stacking up to 50 times. 2: func(agent core.Agent, setBonusAura *core.Aura) { @@ -313,7 +315,8 @@ var MawOfOblivion = core.NewItemSet(core.ItemSet{ // Golad + Tiriosh var FangsOfTheFather = core.NewItemSet(core.ItemSet{ - Name: "Fangs of the Father", + Name: "Fangs of the Father", + Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Shadows of the Destroyer, increasing your Agility by 17, stacking up to 50 times. // Each application past 30 grants an increasing chance to trigger Fury of the Destroyer. diff --git a/sim/rogue/poisons.go b/sim/rogue/poisons.go index 3bc569be2f..81d6db8917 100644 --- a/sim/rogue/poisons.go +++ b/sim/rogue/poisons.go @@ -182,7 +182,7 @@ func (rogue *Rogue) applyWoundPoison() { } const basePPM = 0.5 / (1.4 / 60) // ~21.43, the former 50% normalized to a 1.4 speed weapon - rogue.woundPoisonPPMM = *rogue.AutoAttacks.NewPPMManager(basePPM, procMask) + rogue.woundPoisonPPMM = rogue.AutoAttacks.NewPPMManager(basePPM, procMask) rogue.RegisterAura(core.Aura{ Label: "Wound Poison", @@ -331,7 +331,7 @@ func (rogue *Rogue) UpdateInstantPoisonPPM(bonusChance float64) { const basePPM = 0.2 / (1.4 / 60) // ~8.57, the former 20% normalized to a 1.4 speed weapon ppm := basePPM * (1 + core.TernaryFloat64(rogue.Spec == proto.Spec_SpecAssassinationRogue, 0.5, 0) + bonusChance) - rogue.instantPoisonPPMM = *rogue.AutoAttacks.NewPPMManager(ppm, procMask) + rogue.instantPoisonPPMM = rogue.AutoAttacks.NewPPMManager(ppm, procMask) } func (rogue *Rogue) applyInstantPoison() { diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index f06d1d7bff..19658ad6a9 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -76,8 +76,8 @@ type Rogue struct { lastDeadlyPoisonProcMask core.ProcMask deadlyPoisonProcChanceBonus float64 - instantPoisonPPMM core.DynamicProcManager - woundPoisonPPMM core.DynamicProcManager + instantPoisonPPMM *core.DynamicProcManager + woundPoisonPPMM *core.DynamicProcManager AdrenalineRushAura *core.Aura BladeFlurryAura *core.Aura diff --git a/sim/rogue/subtlety/TestSubtlety.results b/sim/rogue/subtlety/TestSubtlety.results index 9f252791b3..7edae030ef 100644 --- a/sim/rogue/subtlety/TestSubtlety.results +++ b/sim/rogue/subtlety/TestSubtlety.results @@ -1424,6 +1424,27 @@ dps_results: { tps: 17060.98753 } } +dps_results: { + key: "TestSubtlety-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 24029.55991 + tps: 17060.98753 + } +} +dps_results: { + key: "TestSubtlety-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 24029.55991 + tps: 17060.98753 + } +} +dps_results: { + key: "TestSubtlety-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 24029.55991 + tps: 17060.98753 + } +} dps_results: { key: "TestSubtlety-AllItems-ShardofWoe-60233" value: { diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index ca4862933e..4d6491df89 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -1445,6 +1445,27 @@ dps_results: { tps: 620.05113 } } +dps_results: { + key: "TestElemental-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 41588.79028 + tps: 641.95969 + } +} +dps_results: { + key: "TestElemental-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 41379.88948 + tps: 639.82667 + } +} +dps_results: { + key: "TestElemental-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 41833.3128 + tps: 644.23854 + } +} dps_results: { key: "TestElemental-AllItems-Shadowmourne-49623" value: { diff --git a/sim/shaman/enhancement/TestEnhancement.results b/sim/shaman/enhancement/TestEnhancement.results index 80350b15a9..f4372856c0 100644 --- a/sim/shaman/enhancement/TestEnhancement.results +++ b/sim/shaman/enhancement/TestEnhancement.results @@ -1445,6 +1445,27 @@ dps_results: { tps: 22349.37608 } } +dps_results: { + key: "TestEnhancement-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 34773.13033 + tps: 22365.80915 + } +} +dps_results: { + key: "TestEnhancement-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 34769.73055 + tps: 22364.72014 + } +} +dps_results: { + key: "TestEnhancement-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 34782.60049 + tps: 22367.67445 + } +} dps_results: { key: "TestEnhancement-AllItems-Shadowmourne-49623" value: { diff --git a/sim/shaman/items.go b/sim/shaman/items.go index cd80c5b89f..33a21503f0 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -271,10 +271,10 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ Kind: core.SpellMod_Custom, ClassMask: SpellMaskSpiritwalkersGrace, ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + 5*time.Second + shaman.SpiritwalkersGraceAura.Duration += 5 * time.Second }, RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - shaman.SpiritwalkersGraceAura.Duration = shaman.spiritwalkersGraceBaseDuration() + shaman.SpiritwalkersGraceAura.Duration -= 5 * time.Second }, }) diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index 05680e7708..61a898a93d 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -1368,6 +1368,27 @@ dps_results: { tps: 25705.79252 } } +dps_results: { + key: "TestAffliction-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 37320.32552 + tps: 26302.20461 + } +} +dps_results: { + key: "TestAffliction-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 37176.66356 + tps: 26096.98817 + } +} +dps_results: { + key: "TestAffliction-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 37703.43715 + tps: 26402.26012 + } +} dps_results: { key: "TestAffliction-AllItems-ShadowflameRegalia" value: { diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 76f90a005d..28959ae952 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1368,6 +1368,27 @@ dps_results: { tps: 19134.85706 } } +dps_results: { + key: "TestDemonology-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 38805.23385 + tps: 19534.4174 + } +} +dps_results: { + key: "TestDemonology-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 38592.39327 + tps: 19399.43662 + } +} +dps_results: { + key: "TestDemonology-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 39025.21601 + tps: 19643.88448 + } +} dps_results: { key: "TestDemonology-AllItems-ShadowflameRegalia" value: { diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index 1d3c0c79a5..424dc39a70 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -1368,6 +1368,27 @@ dps_results: { tps: 23034.23929 } } +dps_results: { + key: "TestDestruction-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 39639.84039 + tps: 23468.41879 + } +} +dps_results: { + key: "TestDestruction-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 39461.98139 + tps: 23366.06473 + } +} +dps_results: { + key: "TestDestruction-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 39836.55782 + tps: 23589.99978 + } +} dps_results: { key: "TestDestruction-AllItems-ShadowflameRegalia" value: { diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 006723e7f2..e598e620c4 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -196,16 +196,10 @@ var ItemSetGladiatorsFelshroud = core.NewItemSet(core.ItemSet{ Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { - agent.(WarlockAgent).GetWarlock().AddStats(stats.Stats{ - stats.Intellect: 70, - }) + setBonusAura.AttachStatBuff(stats.Intellect, 70) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { - lock := agent.(WarlockAgent).GetWarlock() - lock.AddStats(stats.Stats{ - stats.Intellect: 90, - }) - + setBonusAura.AttachStatBuff(stats.Intellect, 90) // TODO: enable if we ever implement death coil // lock.AddStaticMod(core.SpellModConfig{ // Kind: core.SpellMod_Cooldown_Flat, diff --git a/sim/warrior/arms/TestArms.results b/sim/warrior/arms/TestArms.results index 37bc4f2b17..c9231f975d 100644 --- a/sim/warrior/arms/TestArms.results +++ b/sim/warrior/arms/TestArms.results @@ -1452,6 +1452,27 @@ dps_results: { tps: 20907.25644 } } +dps_results: { + key: "TestArms-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 31349.59001 + tps: 20942.45779 + } +} +dps_results: { + key: "TestArms-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 31349.59001 + tps: 20942.45779 + } +} +dps_results: { + key: "TestArms-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 31349.59001 + tps: 20942.45779 + } +} dps_results: { key: "TestArms-AllItems-Shadowmourne-49623" value: { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 0f82721d1b..858f682faa 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -1501,6 +1501,27 @@ dps_results: { tps: 35712.25797 } } +dps_results: { + key: "TestFury-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 44852.98511 + tps: 35790.47192 + } +} +dps_results: { + key: "TestFury-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 44852.98511 + tps: 35790.47192 + } +} +dps_results: { + key: "TestFury-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 44852.98511 + tps: 35790.47192 + } +} dps_results: { key: "TestFury-AllItems-Shadowmourne-49623" value: { diff --git a/sim/warrior/protection/TestProtectionWarrior.results b/sim/warrior/protection/TestProtectionWarrior.results index 8281c4789c..efbcaa8269 100644 --- a/sim/warrior/protection/TestProtectionWarrior.results +++ b/sim/warrior/protection/TestProtectionWarrior.results @@ -1477,6 +1477,27 @@ dps_results: { tps: 27959.98603 } } +dps_results: { + key: "TestProtectionWarrior-AllItems-SealoftheSevenSigns-77204" + value: { + dps: 4560.8072 + tps: 27959.98603 + } +} +dps_results: { + key: "TestProtectionWarrior-AllItems-SealoftheSevenSigns-77969" + value: { + dps: 4560.8072 + tps: 27959.98603 + } +} +dps_results: { + key: "TestProtectionWarrior-AllItems-SealoftheSevenSigns-77989" + value: { + dps: 4560.8072 + tps: 27959.98603 + } +} dps_results: { key: "TestProtectionWarrior-AllItems-ShardofWoe-60233" value: { From 7a7341157f48b3da5c1189d975745df2b714b70c Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 22:12:59 +0100 Subject: [PATCH 078/127] PR Feedback - minor item sets cleanup --- sim/core/item_sets.go | 18 +- sim/death_knight/death_knight.go | 2 - sim/death_knight/items.go | 4 +- sim/death_knight/talents_frost.go | 8 +- sim/death_knight/talents_unholy.go | 13 +- sim/druid/druid.go | 4 +- sim/paladin/items.go | 15 +- .../assassination/TestAssassination.results | 196 +++++++++--------- sim/rogue/assassination/assassination.go | 1 - sim/rogue/assassination/vendetta.go | 66 ------ sim/rogue/combat/adrenaline_rush.go | 8 +- sim/rogue/items.go | 42 +++- sim/rogue/rogue.go | 4 +- sim/rogue/subtlety/shadow_dance.go | 6 +- sim/rogue/vendetta.go | 67 ++++++ sim/shaman/items.go | 2 +- 16 files changed, 238 insertions(+), 218 deletions(-) delete mode 100644 sim/rogue/assassination/vendetta.go create mode 100644 sim/rogue/vendetta.go diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 23626be0bc..815d0cbf4a 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -101,14 +101,15 @@ func (character *Character) HasSetBonus(set *ItemSet, numItems int32) bool { panic(fmt.Sprintf("Item set %s does not have a bonus with %d pieces.", set.Name, numItems)) } - var count int32 - for _, item := range character.Equipment { - if item.SetName == "" { - continue - } - if item.SetName == set.Name || item.SetName == set.AlternativeName || (item.SetID > 0 && item.SetID == set.ID) { - count++ - if count >= numItems { + activeSetBonus := character.HasActiveSetBonus(set.Name, numItems) + if activeSetBonus { + return activeSetBonus + } + + if character.ItemSwap.IsEnabled() { + unequippedSetBonuses := character.GetSetBonuses(character.ItemSwap.unEquippedItems) + for _, unequippedSetBonus := range unequippedSetBonuses { + if unequippedSetBonus.Name == set.Name && unequippedSetBonus.NumPieces >= numItems { return true } } @@ -183,6 +184,7 @@ func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { return activeBonuses } +// Checks whether the character has an equipped set bonus func (character *Character) HasActiveSetBonus(setName string, count int32) bool { activeSetBonuses := character.GetActiveSetBonuses() diff --git a/sim/death_knight/death_knight.go b/sim/death_knight/death_knight.go index be13aeb185..121a9e2f06 100644 --- a/sim/death_knight/death_knight.go +++ b/sim/death_knight/death_knight.go @@ -73,8 +73,6 @@ type DeathKnight struct { // Auras IceBoundFortituteAura *core.Aura - FreezingFogAura *core.Aura - SuddenDoomProcAura *core.Aura // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index e78ee8c80d..c33bda8ed8 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -82,10 +82,10 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ Kind: core.SpellMod_Custom, ClassMask: DeathKnightSpellIceboundFortitude, ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + 6*time.Second + dk.IceBoundFortituteAura.Duration += 6 * time.Second }, RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - dk.IceBoundFortituteAura.Duration = dk.iceBoundFortituteBaseDuration() + dk.IceBoundFortituteAura.Duration -= 6 * time.Second }, }) }, diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index ba1cb38c42..8ce8a2cbf6 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -130,7 +130,7 @@ func (dk *DeathKnight) applyRime() { ClassMask: DeathKnightSpellIcyTouch | DeathKnightSpellHowlingBlast, }) - dk.FreezingFogAura = dk.GetOrRegisterAura(core.Aura{ + freezingFogAura := dk.GetOrRegisterAura(core.Aura{ Label: "Freezing Fog", ActionID: core.ActionID{SpellID: 59052}, Duration: time.Second * 15, @@ -163,13 +163,13 @@ func (dk *DeathKnight) applyRime() { Outcome: core.OutcomeLanded, ProcChance: 0.15 * float64(dk.Talents.Rime), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - dk.FreezingFogAura.Activate(sim) + freezingFogAura.Activate(sim) // T13 2pc: Rime has a 60% chance to grant 2 charges when triggered instead of 1. - dk.FreezingFogAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) + freezingFogAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) if dk.HasT13Dps2pc { stacks := core.TernaryInt32(sim.Proc(0.6, "T13 2pc"), 2, 1) - dk.FreezingFogAura.SetStacks(sim, stacks) + freezingFogAura.SetStacks(sim, stacks) } }, }) diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index a04b23323a..b79bedf4dd 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -101,7 +101,10 @@ func (dk *DeathKnight) applyContagion() { func (dk *DeathKnight) applyRunicEmpowerementCorruption() { var handler func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) - runicMasteryAura := dk.NewTemporaryStatsAura("Runic Mastery", core.ActionID{SpellID: 105647}, stats.Stats{stats.MasteryRating: 710}, time.Second*12) + var runicMasteryAura *core.StatBuffAura + if dk.HasSetBonus(ItemSetNecroticBoneplateBattlegear, 4) { + runicMasteryAura = dk.NewTemporaryStatsAura("Runic Mastery", core.ActionID{SpellID: 105647}, stats.Stats{stats.MasteryRating: 710}, time.Second*12) + } if dk.Talents.RunicCorruption > 0 { dk.AddStaticMod(core.SpellModConfig{ @@ -276,7 +279,7 @@ func (dk *DeathKnight) applySuddenDoom() { FloatValue: -1, }) - dk.SuddenDoomProcAura = dk.GetOrRegisterAura(core.Aura{ + suddenDoomProcAura := dk.GetOrRegisterAura(core.Aura{ Label: "Sudden Doom Proc", ActionID: core.ActionID{SpellID: 81340}, Duration: time.Second * 10, @@ -314,13 +317,13 @@ func (dk *DeathKnight) applySuddenDoom() { PPM: ppm, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - dk.SuddenDoomProcAura.Activate(sim) + suddenDoomProcAura.Activate(sim) // T13 2pc: Sudden Doom has a 30% chance to grant 2 charges when triggered instead of 1. - dk.SuddenDoomProcAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) + suddenDoomProcAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) if dk.HasT13Dps2pc { stacks := core.TernaryInt32(sim.Proc(0.3, "T13 2pc"), 2, 1) - dk.SuddenDoomProcAura.SetStacks(sim, stacks) + suddenDoomProcAura.SetStacks(sim, stacks) } }, }) diff --git a/sim/druid/druid.go b/sim/druid/druid.go index e46e24116b..b9d9bae400 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -379,7 +379,9 @@ func New(char *core.Character, form DruidForm, selfBuffs SelfBuffs, talents stri } } - druid.BurningTreant = druid.NewBurningTreant() + if druid.HasSetBonus(ItemSetObsidianArborweaveRegalia, 2) { + druid.BurningTreant = druid.NewBurningTreant() + } return druid } diff --git a/sim/paladin/items.go b/sim/paladin/items.go index 725a572ad2..cee533172d 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -202,27 +202,20 @@ var ItemSetReinforcedSapphiriumBattlearmor = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { paladin := agent.(PaladinAgent).GetPaladin() - goakBaseDuration := paladin.goakBaseDuration() - acientPowerBaseDuration := paladin.goakBaseDuration() - - applyT11Prot4pcBonus := func(duration time.Duration) time.Duration { - return time.Millisecond * time.Duration(float64(duration.Milliseconds())*1.5) - } - setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_Custom, ClassMask: SpellMaskGuardianOfAncientKings, ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { if paladin.AncientPowerAura != nil { - paladin.AncientPowerAura.Duration = applyT11Prot4pcBonus(acientPowerBaseDuration) + paladin.AncientPowerAura.Duration = core.DurationFromSeconds(paladin.GoakAura.Duration.Seconds() * 1.5) } - paladin.GoakAura.Duration = applyT11Prot4pcBonus(goakBaseDuration) + paladin.GoakAura.Duration = core.DurationFromSeconds(paladin.GoakAura.Duration.Seconds() * 1.5) }, RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { if paladin.AncientPowerAura != nil { - paladin.AncientPowerAura.Duration = acientPowerBaseDuration + paladin.AncientPowerAura.Duration = paladin.goakBaseDuration() } - paladin.GoakAura.Duration = goakBaseDuration + paladin.GoakAura.Duration = paladin.goakBaseDuration() }, }) diff --git a/sim/rogue/assassination/TestAssassination.results b/sim/rogue/assassination/TestAssassination.results index 9b5380dd34..b1647132dd 100644 --- a/sim/rogue/assassination/TestAssassination.results +++ b/sim/rogue/assassination/TestAssassination.results @@ -174,8 +174,8 @@ dps_results: { dps_results: { key: "TestAssassination-AllItems-BlackfangBattleweave" value: { - dps: 27833.11682 - tps: 19761.51294 + dps: 28147.3748 + tps: 19984.6361 } } dps_results: { @@ -2458,169 +2458,169 @@ dps_results: { dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 54499.60733 - tps: 38694.7212 + dps: 55080.59031 + tps: 39107.21912 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 54499.60733 - tps: 38694.7212 + dps: 55080.59031 + tps: 39107.21912 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 69793.2058 - tps: 49553.17612 + dps: 70960.03037 + tps: 50381.62156 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 33205.09094 - tps: 23575.61457 + dps: 33575.82611 + tps: 23838.83654 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 33205.09094 - tps: 23575.61457 + dps: 33575.82611 + tps: 23838.83654 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36442.0357 - tps: 25873.84534 + dps: 37146.99331 + tps: 26374.36525 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 41793.6737 - tps: 29673.50833 + dps: 42240.29222 + tps: 29990.60748 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 41793.6737 - tps: 29673.50833 + dps: 42240.29222 + tps: 29990.60748 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53464.88687 - tps: 37960.06968 + dps: 54387.48528 + tps: 38615.11455 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25534.59521 - tps: 18129.5626 + dps: 25820.56964 + tps: 18332.60444 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25534.59521 - tps: 18129.5626 + dps: 25820.56964 + tps: 18332.60444 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28327.09226 - tps: 20112.2355 + dps: 28893.4139 + tps: 20514.32387 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 55485.05494 - tps: 39394.389 + dps: 56086.35515 + tps: 39821.31215 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 55485.05494 - tps: 39394.389 + dps: 56086.35515 + tps: 39821.31215 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 71209.64337 - tps: 50558.84679 + dps: 72391.8827 + tps: 51398.23672 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 33753.29927 - tps: 23964.84248 + dps: 34132.13202 + tps: 24233.81373 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 33753.29927 - tps: 23964.84248 + dps: 34132.13202 + tps: 24233.81373 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37029.19334 - tps: 26290.72727 + dps: 37750.34904 + tps: 26802.74782 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 28199.69053 - tps: 20021.78028 + dps: 28460.07859 + tps: 20206.6558 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 28199.69053 - tps: 20021.78028 + dps: 28460.07859 + tps: 20206.6558 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 35994.77997 - tps: 25556.29378 + dps: 36445.74832 + tps: 25876.4813 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 16517.95383 - tps: 11727.74722 + dps: 16660.54813 + tps: 11828.98917 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 16517.95383 - tps: 11727.74722 + dps: 16660.54813 + tps: 11828.98917 } } dps_results: { key: "TestAssassination-Settings-Human-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 18812.8833 - tps: 13357.14715 + dps: 19077.58485 + tps: 13545.08525 } } dps_results: { @@ -2962,169 +2962,169 @@ dps_results: { dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 54878.55017 - tps: 38963.77062 + dps: 55459.46132 + tps: 39376.21754 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 54878.55017 - tps: 38963.77062 + dps: 55459.46132 + tps: 39376.21754 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 70531.55198 - tps: 50077.40191 + dps: 71698.23284 + tps: 50905.74531 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 33463.59075 - tps: 23759.14943 + dps: 33834.27785 + tps: 24022.33728 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 33463.59075 - tps: 23759.14943 + dps: 33834.27785 + tps: 24022.33728 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-Assassination-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36868.00399 - tps: 26176.28283 + dps: 37572.86993 + tps: 26676.73765 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 42071.8844 - tps: 29871.03792 + dps: 42518.44916 + tps: 30188.0989 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 42071.8844 - tps: 29871.03792 + dps: 42518.44916 + tps: 30188.0989 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 54023.98863 - tps: 38357.03193 + dps: 54946.47604 + tps: 39011.99799 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 25727.64097 - tps: 18266.62509 + dps: 26013.57937 + tps: 18469.64135 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25727.64097 - tps: 18266.62509 + dps: 26013.57937 + tps: 18469.64135 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Deadly OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28655.80416 - tps: 20345.62095 + dps: 29222.05338 + tps: 20747.6579 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 55869.26282 - tps: 39667.1766 + dps: 56470.48857 + tps: 40094.04688 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 55869.26282 - tps: 39667.1766 + dps: 56470.48857 + tps: 40094.04688 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 71966.77245 - tps: 51096.40844 + dps: 73148.86603 + tps: 51935.69488 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 34015.2566 - tps: 24150.83218 + dps: 34394.0403 + tps: 24419.76861 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 34015.2566 - tps: 24150.83218 + dps: 34394.0403 + tps: 24419.76861 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Deadly-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37465.06298 - tps: 26600.19471 + dps: 38186.12468 + tps: 27112.14852 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 28392.88629 - tps: 20158.94926 + dps: 28653.24362 + tps: 20343.80297 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 28392.88629 - tps: 20158.94926 + dps: 28653.24362 + tps: 20343.80297 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36405.3604 - tps: 25847.80588 + dps: 36856.27563 + tps: 26167.9557 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 16664.21745 - tps: 11831.59439 + dps: 16807.93006 + tps: 11933.63034 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 16664.21745 - tps: 11831.59439 + dps: 16807.93006 + tps: 11933.63034 } } dps_results: { key: "TestAssassination-Settings-Orc-p4_assassination-MH Instant OH Instant-mutilate-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 19050.45258 - tps: 13525.82133 + dps: 19315.07128 + tps: 13713.70061 } } dps_results: { diff --git a/sim/rogue/assassination/assassination.go b/sim/rogue/assassination/assassination.go index b020e446a7..b7de1d27ae 100644 --- a/sim/rogue/assassination/assassination.go +++ b/sim/rogue/assassination/assassination.go @@ -35,7 +35,6 @@ func (sinRogue *AssassinationRogue) Initialize() { sinRogue.registerColdBloodCD() sinRogue.applySealFate() sinRogue.registerVenomousWounds() - sinRogue.registerVendetta() // Apply Mastery // As far as I am able to find, Asn's Mastery is an additive bonus. To be tested. diff --git a/sim/rogue/assassination/vendetta.go b/sim/rogue/assassination/vendetta.go deleted file mode 100644 index 08016b2bc3..0000000000 --- a/sim/rogue/assassination/vendetta.go +++ /dev/null @@ -1,66 +0,0 @@ -package assassination - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" - "github.com/wowsims/cata/sim/rogue" -) - -func (sinRogue *AssassinationRogue) registerVendetta() { - if !sinRogue.Talents.Vendetta { - return - } - - actionID := core.ActionID{SpellID: 79140} - hasGlyph := sinRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) - getDuration := func() time.Duration { - return time.Duration((30.0+core.TernaryFloat64(sinRogue.Has4pcT13, 3.0, 0))*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second - } - - vendettaAura := sinRogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { - return target.GetOrRegisterAura(core.Aura{ - Label: "Vendetta", - ActionID: actionID, - Duration: getDuration(), - OnGain: func(aura *core.Aura, sim *core.Simulation) { - sinRogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier *= 1.2 - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - sinRogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier /= 1.2 - }, - }) - }) - - sinRogue.Vendetta = sinRogue.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolPhysical, - Flags: core.SpellFlagAPL | core.SpellFlagMCD, - ClassSpellMask: rogue.RogueSpellVendetta, - Cast: core.CastConfig{ - DefaultCast: core.Cast{ - GCD: time.Second, - }, - CD: core.Cooldown{ - Timer: sinRogue.NewTimer(), - Duration: time.Minute * 2, - }, - }, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - aura := vendettaAura.Get(target) - aura.Duration = getDuration() - aura.Activate(sim) - }, - }) - - sinRogue.AddMajorCooldown(core.MajorCooldown{ - Spell: sinRogue.Vendetta, - Type: core.CooldownTypeDPS, - Priority: core.CooldownPriorityDefault, - ShouldActivate: func(sim *core.Simulation, character *core.Character) bool { - return sinRogue.ComboPoints() >= 4 - }, - }) -} diff --git a/sim/rogue/combat/adrenaline_rush.go b/sim/rogue/combat/adrenaline_rush.go index de9ac96757..35dfbc5ce4 100644 --- a/sim/rogue/combat/adrenaline_rush.go +++ b/sim/rogue/combat/adrenaline_rush.go @@ -18,15 +18,10 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { speedBonus := 1.2 inverseBonus := 1 / speedBonus - getDuration := func() time.Duration { - return core.TernaryDuration(comRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfAdrenalineRush), time.Second*20, time.Second*15) + - core.TernaryDuration(comRogue.Has4pcT13, time.Second*3, 0) - } - comRogue.AdrenalineRushAura = comRogue.RegisterAura(core.Aura{ Label: "Adrenaline Rush", ActionID: AdrenalineRushActionID, - Duration: getDuration(), + Duration: core.TernaryDuration(comRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfAdrenalineRush), time.Second*20, time.Second*15), OnGain: func(aura *core.Aura, sim *core.Simulation) { comRogue.ApplyAdditiveEnergyRegenBonus(sim, 1.0) comRogue.MultiplyMeleeSpeed(sim, speedBonus) @@ -54,7 +49,6 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { comRogue.BreakStealth(sim) - comRogue.AdrenalineRushAura.Duration = getDuration() comRogue.AdrenalineRushAura.Activate(sim) }, }) diff --git a/sim/rogue/items.go b/sim/rogue/items.go index 74c4b64286..5be0cdf41f 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -217,11 +217,45 @@ var Tier13 = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - rogue.Has4pcT13 = true + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: RogueSpellVendetta, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + for _, aura := range spell.RelatedAuras[0] { + if aura != nil { + aura.Duration = rogue.getVendettaDuration(9) + } + } + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + for _, aura := range spell.RelatedAuras[0] { + if aura != nil { + aura.Duration = rogue.getVendettaDuration(0) + } + } + }, + }) + + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: RogueSpellAdrenalineRush, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + rogue.AdrenalineRushAura.Duration += time.Second * 3 + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + rogue.AdrenalineRushAura.Duration -= time.Second * 3 + }, }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - rogue.Has4pcT13 = false + + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: RogueSpellShadowDance, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + rogue.ShadowDanceAura.Duration += time.Second * 2 + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + rogue.ShadowDanceAura.Duration -= time.Second * 2 + }, }) }, }, diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 19658ad6a9..8a9da7fd73 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -104,9 +104,6 @@ type Rogue struct { ruthlessnessMetrics *core.ResourceMetrics relentlessStrikesMetrics *core.ResourceMetrics - - // Item sets - Has4pcT13 bool } func (rogue *Rogue) GetCharacter() *core.Character { @@ -201,6 +198,7 @@ func (rogue *Rogue) Initialize() { rogue.registerShivSpell() rogue.registerThistleTeaCD() rogue.registerGougeSpell() + rogue.registerVendetta() rogue.SliceAndDiceBonus = 0.4 diff --git a/sim/rogue/subtlety/shadow_dance.go b/sim/rogue/subtlety/shadow_dance.go index 270dbff194..036ef4ea39 100644 --- a/sim/rogue/subtlety/shadow_dance.go +++ b/sim/rogue/subtlety/shadow_dance.go @@ -14,15 +14,12 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { } hasGlyph := subRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfShadowDance) - getDuration := func() time.Duration { - return core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6) + core.TernaryDuration(subRogue.Has4pcT13, time.Second*2, 0) - } actionID := core.ActionID{SpellID: 51713} subRogue.ShadowDanceAura = subRogue.RegisterAura(core.Aura{ Label: "Shadow Dance", ActionID: actionID, - Duration: getDuration(), + Duration: core.TernaryDuration(hasGlyph, time.Second*8, time.Second*6), // Can now cast opening abilities outside of stealth // Covered in rogue.go by IsStealthed() }) @@ -41,7 +38,6 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { subRogue.BreakStealth(sim) - subRogue.ShadowDanceAura.Duration = getDuration() subRogue.ShadowDanceAura.Activate(sim) }, }) diff --git a/sim/rogue/vendetta.go b/sim/rogue/vendetta.go new file mode 100644 index 0000000000..e4535872b0 --- /dev/null +++ b/sim/rogue/vendetta.go @@ -0,0 +1,67 @@ +package rogue + +import ( + "time" + + "github.com/wowsims/cata/sim/core" + "github.com/wowsims/cata/sim/core/proto" +) + +func (rogue *Rogue) getVendettaDuration(baseDuration float64) time.Duration { + hasGlyph := rogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) + return time.Duration((30.0+baseDuration)*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second +} + +func (rogue *Rogue) registerVendetta() { + if !rogue.Talents.Vendetta { + return + } + + actionID := core.ActionID{SpellID: 79140} + duration := rogue.getVendettaDuration(0) + + vendettaAuras := rogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { + return target.GetOrRegisterAura(core.Aura{ + Label: "Vendetta", + ActionID: actionID, + Duration: duration, + OnGain: func(aura *core.Aura, sim *core.Simulation) { + rogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier *= 1.2 + }, + OnExpire: func(aura *core.Aura, sim *core.Simulation) { + rogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier /= 1.2 + }, + }) + }) + + rogue.Vendetta = rogue.RegisterSpell(core.SpellConfig{ + ActionID: actionID, + SpellSchool: core.SpellSchoolPhysical, + Flags: core.SpellFlagAPL | core.SpellFlagMCD, + ClassSpellMask: RogueSpellVendetta, + Cast: core.CastConfig{ + DefaultCast: core.Cast{ + GCD: time.Second, + }, + CD: core.Cooldown{ + Timer: rogue.NewTimer(), + Duration: time.Minute * 2, + }, + }, + + ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { + aura := vendettaAuras.Get(target) + aura.Activate(sim) + }, + RelatedAuras: []core.AuraArray{vendettaAuras}, + }) + + rogue.AddMajorCooldown(core.MajorCooldown{ + Spell: rogue.Vendetta, + Type: core.CooldownTypeDPS, + Priority: core.CooldownPriorityDefault, + ShouldActivate: func(sim *core.Simulation, character *core.Character) bool { + return rogue.ComboPoints() >= 4 + }, + }) +} diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 33a21503f0..93fcd4ea18 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -246,7 +246,7 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ aura := shaman.RegisterAura(core.Aura{ Label: "Item - Shaman T13 Restoration 4P Bonus (Spiritwalker's Grace)", ActionID: core.ActionID{SpellID: 105876}, - Duration: shaman.spiritwalkersGraceBaseDuration() + 5*time.Second, + Duration: shaman.spiritwalkersGraceBaseDuration(), OnGain: func(aura *core.Aura, sim *core.Simulation) { shaman.MultiplyCastSpeed(hasteMulti) shaman.MultiplyAttackSpeed(sim, hasteMulti) From a0d43270a365c6636f1f46ec66ac8c8d251488d5 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 22:18:22 +0100 Subject: [PATCH 079/127] Convert missed spellmod --- sim/warlock/items.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/warlock/items.go b/sim/warlock/items.go index e598e620c4..990ce2ad29 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -13,7 +13,7 @@ var ItemSetMaleficRaiment = core.NewItemSet(core.ItemSet{ Name: "Shadowflame Regalia", Bonuses: map[int32]core.ApplySetBonus{ 2: func(agent core.Agent, setBonusAura *core.Aura) { - agent.(WarlockAgent).GetWarlock().AddStaticMod(core.SpellModConfig{ + setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_CastTime_Pct, ClassMask: WarlockSpellChaosBolt | WarlockSpellHandOfGuldan | WarlockSpellHaunt, FloatValue: -0.1, From 258db3dda2b7207f132733f4bb4ee0883dea0a42 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 22:32:05 +0100 Subject: [PATCH 080/127] Change Warlock T13 2P to SpellMods --- sim/warlock/doomguard.go | 14 ++++---------- sim/warlock/infernal.go | 15 ++++----------- sim/warlock/items.go | 33 +++++++++++++++++++++------------ sim/warlock/warlock.go | 11 ++++++----- 4 files changed, 35 insertions(+), 38 deletions(-) diff --git a/sim/warlock/doomguard.go b/sim/warlock/doomguard.go index 007016e1c7..75caccf980 100644 --- a/sim/warlock/doomguard.go +++ b/sim/warlock/doomguard.go @@ -9,14 +9,10 @@ import ( ) func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { - getDuration := func() time.Duration { - return time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second - } - - summonDoomguardAura := warlock.RegisterAura(core.Aura{ + warlock.SummonDoomguardAura = warlock.RegisterAura(core.Aura{ Label: "Summon Doomguard", ActionID: core.ActionID{SpellID: 18540}, - Duration: getDuration(), + Duration: time.Duration(45+10*warlock.Talents.AncientGrimoire) * time.Second, }) warlock.RegisterSpell(core.SpellConfig{ @@ -36,10 +32,8 @@ func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - duration := getDuration() - warlock.Doomguard.EnableWithTimeout(sim, warlock.Doomguard, duration) - summonDoomguardAura.Duration = duration - summonDoomguardAura.Activate(sim) + warlock.Doomguard.EnableWithTimeout(sim, warlock.Doomguard, warlock.SummonDoomguardAura.Duration) + warlock.SummonDoomguardAura.Activate(sim) }, }) } diff --git a/sim/warlock/infernal.go b/sim/warlock/infernal.go index 6d0a7828ab..f24043b8c3 100644 --- a/sim/warlock/infernal.go +++ b/sim/warlock/infernal.go @@ -10,14 +10,10 @@ import ( ) func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { - getDuration := func() time.Duration { - return time.Duration(45+10*warlock.Talents.AncientGrimoire+warlock.Calc2PT13SummonDuration()) * time.Second - } - - summonInfernalAura := warlock.RegisterAura(core.Aura{ + warlock.SummonInfernalAura = warlock.RegisterAura(core.Aura{ Label: "Summon Infernal", ActionID: core.ActionID{SpellID: 1122}, - Duration: getDuration(), + Duration: time.Duration(45+10*warlock.Talents.AncientGrimoire) * time.Second, }) warlock.RegisterSpell(core.SpellConfig{ @@ -50,12 +46,9 @@ func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { warlock.CalcAndRollDamageRange(sim, 0.48500001431, 0.11999999732) spell.CalcAndDealDamage(sim, aoeTarget, baseDamage, spell.OutcomeMagicHitAndCrit) } - duration := getDuration() - warlock.Infernal.EnableWithTimeout(sim, warlock.Infernal, duration) - + warlock.Infernal.EnableWithTimeout(sim, warlock.Infernal, warlock.SummonInfernalAura.Duration) // fake aura to show duration - summonInfernalAura.Duration = duration - summonInfernalAura.Activate(sim) + warlock.SummonInfernalAura.Activate(sim) }, }) } diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 990ce2ad29..c1ae70c6ba 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -223,11 +223,28 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ ClassMask: WarlockSpellSummonDoomguard | WarlockSpellSummonInfernal, }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - warlock.Has2pcT13 = true + summonDuration := core.TernaryDuration(warlock.Spec == proto.Spec_SpecDemonologyWarlock, 20*time.Second, 30*time.Second) + + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: WarlockSpellSummonDoomguard, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + warlock.SummonDoomguardAura.Duration += summonDuration + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + warlock.SummonDoomguardAura.Duration -= summonDuration + }, }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - warlock.Has2pcT13 = false + + setBonusAura.AttachSpellMod(core.SpellModConfig{ + Kind: core.SpellMod_Custom, + ClassMask: WarlockSpellSummonInfernal, + ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { + warlock.SummonInfernalAura.Duration += summonDuration + }, + RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { + warlock.SummonInfernalAura.Duration -= summonDuration + }, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { @@ -265,11 +282,3 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ }, }, }) - -func (warlock *Warlock) Calc2PT13SummonDuration() int32 { - if warlock.Has2pcT13 { - return core.TernaryInt32(warlock.Spec == proto.Spec_SpecDemonologyWarlock, 20, 30) - } else { - return 0 - } -} diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index c86879938a..818e85e67e 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -32,17 +32,18 @@ type Warlock struct { Imp *WarlockPet Succubus *WarlockPet - Doomguard *DoomguardPet - Infernal *InfernalPet - EbonImp *EbonImpPet - FieryImp *FieryImpPet + SummonDoomguardAura *core.Aura + Doomguard *DoomguardPet + Infernal *InfernalPet + EbonImp *EbonImpPet + SummonInfernalAura *core.Aura + FieryImp *FieryImpPet SoulShards int32 SoulBurnAura *core.Aura // Item sets Has4pcT13 bool - Has2pcT13 bool } func (warlock *Warlock) GetCharacter() *core.Character { From cf7b51d8d02a468fd7cb205a57ffb734450668a6 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 8 Jan 2025 23:02:29 +0100 Subject: [PATCH 081/127] Migrate some manual stacking auras to helper --- sim/death_knight/items.go | 3 +- sim/rogue/items.go | 60 +++++++++++++++++---------------------- sim/shaman/items.go | 35 +++++++++-------------- 3 files changed, 41 insertions(+), 57 deletions(-) diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index c33bda8ed8..ec6337fea6 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -75,7 +75,6 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ }, 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the duration of your Icebound Fortitude ability by 50%. - // Implemented in icebound_fortitude.go dk := agent.(DeathKnightAgent).GetDeathKnight() setBonusAura.AttachSpellMod(core.SpellModConfig{ @@ -162,7 +161,7 @@ var ItemSetElementiumDeathplateBattlegear = core.NewItemSet(core.ItemSet{ Outcome: core.OutcomeLanded, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { damage = result.Damage * 0.06 - if spell.ClassSpellMask == DeathKnightSpellObliterate { + if spell.Matches(DeathKnightSpellObliterate) { flamingTormentSpellForObliterate.Cast(sim, result.Target) } else { flamingTormentSpellForScourgeStrike.Cast(sim, result.Target) diff --git a/sim/rogue/items.go b/sim/rogue/items.go index 5be0cdf41f..a842681296 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -282,18 +282,16 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Suffering, increasing your Agility by 2, stacking up to 50 times. 2: func(agent core.Agent, setBonusAura *core.Aura) { - agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ - Label: "Suffering", - ActionID: core.ActionID{SpellID: 109959}, - MaxStacks: 50, - Duration: 30 * time.Second, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { - aura.Unit.AddStatDynamic(sim, stats.Agility, -2*float64(oldStacks)) - aura.Unit.AddStatDynamic(sim, stats.Agility, 2*float64(newStacks)) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - aura.SetStacks(sim, 0) + character := agent.GetCharacter() + + agiAura := core.MakeStackingAura(character, core.StackingStatAura{ + Aura: core.Aura{ + Label: "Suffering", + ActionID: core.ActionID{SpellID: 109959}, + Duration: time.Second * 30, + MaxStacks: 50, }, + BonusPerStack: stats.Stats{stats.Agility: 2}, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ @@ -301,7 +299,7 @@ var JawsOfRetribution = core.NewItemSet(core.ItemSet{ Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, Outcome: core.OutcomeLanded, - ProcChance: getFangsProcRate(agent.GetCharacter()), + ProcChance: getFangsProcRate(character), Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { agiAura.Activate(sim) agiAura.AddStack(sim) @@ -318,18 +316,16 @@ var MawOfOblivion = core.NewItemSet(core.ItemSet{ Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Nightmare, increasing your Agility by 5, stacking up to 50 times. 2: func(agent core.Agent, setBonusAura *core.Aura) { - agiAura := agent.GetCharacter().GetOrRegisterAura(core.Aura{ - Label: "Nightmare", - ActionID: core.ActionID{SpellID: 109955}, - MaxStacks: 50, - Duration: 30 * time.Second, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { - aura.Unit.AddStatDynamic(sim, stats.Agility, -5*float64(oldStacks)) - aura.Unit.AddStatDynamic(sim, stats.Agility, 5*float64(newStacks)) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - aura.SetStacks(sim, 0) + character := agent.GetCharacter() + + agiAura := core.MakeStackingAura(character, core.StackingStatAura{ + Aura: core.Aura{ + Label: "Nightmare", + ActionID: core.ActionID{SpellID: 109955}, + Duration: time.Second * 30, + MaxStacks: 50, }, + BonusPerStack: stats.Stats{stats.Agility: 5}, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ @@ -362,18 +358,14 @@ var FangsOfTheFather = core.NewItemSet(core.ItemSet{ character := agent.GetCharacter() cpMetrics := character.NewComboPointMetrics(core.ActionID{SpellID: 109950}) - agiAura := character.GetOrRegisterAura(core.Aura{ - Label: "Shadows of the Destroyer", - ActionID: core.ActionID{SpellID: 109941}, - MaxStacks: 50, - Duration: 30 * time.Second, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { - aura.Unit.AddStatDynamic(sim, stats.Agility, -17*float64(oldStacks)) - aura.Unit.AddStatDynamic(sim, stats.Agility, 17*float64(newStacks)) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - aura.SetStacks(sim, 0) + agiAura := core.MakeStackingAura(character, core.StackingStatAura{ + Aura: core.Aura{ + Label: "Shadows of the Destroyer", + ActionID: core.ActionID{SpellID: 109941}, + Duration: time.Second * 30, + MaxStacks: 50, }, + BonusPerStack: stats.Stats{stats.Agility: 17}, }) wingsProc := character.GetOrRegisterAura(core.Aura{ diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 93fcd4ea18..d0fcffe283 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -180,17 +180,11 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() - aura := shaman.RegisterAura(core.Aura{ - Label: "Fury of the Ancestors", - ActionID: core.ActionID{SpellID: 105779}, - Duration: 15 * time.Second, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - shaman.AddStatDynamic(sim, stats.MasteryRating, 2000) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - shaman.AddStatDynamic(sim, stats.MasteryRating, -2000) - }, - }) + aura := shaman.NewTemporaryStatsAura("Fury of the Ancestors", + core.ActionID{SpellID: 105779}, + stats.Stats{stats.MasteryRating: 2000}, + 15*time.Second, + ) setBonusAura.AttachProcTrigger(core.ProcTrigger{ Name: "Item - Shaman T13 Elemental 2P Bonus (Elemental Mastery)", @@ -204,17 +198,16 @@ var ItemSetSpiritwalkersRegalia = core.NewItemSet(core.ItemSet{ }, 4: func(agent core.Agent, setBonusAura *core.Aura) { - shaman := agent.(ShamanAgent).GetShaman() - - procAura := shaman.RegisterAura(core.Aura{ - Label: "Time Rupture", - ActionID: core.ActionID{SpellID: 105821}, - Duration: 4 * time.Second, - MaxStacks: 3, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { - changedHasteRating := (newStacks - oldStacks) * 250 - shaman.AddStatDynamic(sim, stats.HasteRating, float64(changedHasteRating)) + character := agent.(ShamanAgent).GetCharacter() + + procAura := core.MakeStackingAura(character, core.StackingStatAura{ + Aura: core.Aura{ + Label: "Time Rupture", + ActionID: core.ActionID{SpellID: 105821}, + Duration: 4 * time.Second, + MaxStacks: 3, }, + BonusPerStack: stats.Stats{stats.HasteRating: 250}, }) setBonusAura.AttachProcTrigger(core.ProcTrigger{ From bd710cfccef363b941027e2fd94c569c60e94b6f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 9 Jan 2025 10:31:19 +0100 Subject: [PATCH 082/127] Optimise item set logic --- sim/common/shared/shared_utils.go | 2 +- sim/common/tbc/enchant_effects.go | 7 +-- sim/common/tbc/melee_items.go | 6 +-- sim/common/wotlk/other_effects.go | 2 +- sim/core/attack.go | 52 +++++------------- sim/core/character.go | 38 ++++++------- sim/core/item_sets.go | 89 +++++++++++++++++-------------- sim/core/item_swaps.go | 2 - 8 files changed, 87 insertions(+), 111 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 001479f34a..1573b9b928 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -117,7 +117,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c if isEnchant { dpm = character.AutoAttacks.NewDynamicProcManagerForEnchant(effectID, config.PPM, 0) } else { - dpm = character.AutoAttacks.NewPPMManagerForWeaponEffect(effectID, config.PPM) + dpm = character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(effectID, config.PPM, 0) } } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index b223a75fc8..fc5eb34f95 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -178,7 +178,7 @@ func init() { } else { label += "OH" } - dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(3273, 2.15) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(3273, 2.15, 0) aura := character.GetOrRegisterAura(core.Aura{ Label: label, @@ -191,7 +191,7 @@ func init() { return } - if spell.ProcMask.Matches(core.ProcMaskMelee) { + if spell.ProcMask.Matches(core.Ternary(isMH, core.ProcMaskMeleeMH, core.ProcMaskMeleeOH)) { if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { procSpell.Cast(sim, result.Target) } @@ -204,7 +204,8 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3273, aura, core.MeleeWeaponSlots()) + meleeWeaponSlots := core.MeleeWeaponSlots() + character.ItemSwap.RegisterEnchantProc(3273, aura, core.Ternary(isMH, meleeWeaponSlots[:1], meleeWeaponSlots[1:])) } core.NewEnchantEffect(3273, func(agent core.Agent) { diff --git a/sim/common/tbc/melee_items.go b/sim/common/tbc/melee_items.go index f19b25ca99..ce5bfa3e17 100644 --- a/sim/common/tbc/melee_items.go +++ b/sim/common/tbc/melee_items.go @@ -22,7 +22,7 @@ func init() { core.NewItemEffect(19019, func(agent core.Agent) { character := agent.GetCharacter() - dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(19019, 6.0) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(19019, 6.0, 0) procActionID := core.ActionID{SpellID: 21992} @@ -173,7 +173,7 @@ func init() { core.NewItemEffect(29996, func(agent core.Agent) { character := agent.GetCharacter() - dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(29996, 1.0) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(29996, 1.0, 0) actionID := core.ActionID{ItemID: 29996} @@ -351,7 +351,7 @@ func init() { core.NewItemEffect(12590, func(agent core.Agent) { character := agent.GetCharacter() - dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(12590, 1.0) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 5d2f24e24f..18dfe1e97f 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -911,7 +911,7 @@ func init() { core.NewItemEffect(itemID, func(agent core.Agent) { character := agent.GetCharacter() - dpm := character.AutoAttacks.NewPPMManagerForWeaponEffect(itemID, 2.0) + dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(itemID, 2.0, 0) procActionID := core.ActionID{ItemID: itemID} diff --git a/sim/core/attack.go b/sim/core/attack.go index 7d3ec24490..1d3fdf8f4a 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -840,55 +840,27 @@ func (aa *AutoAttacks) NewPPMManager(ppm float64, procMask ProcMask) *DynamicPro return &dpm } -// PPMManager for dynamic ProcMasks on weapon enchants +// Dynamic Proc Manager for dynamic ProcMasks on weapon enchants func (aa *AutoAttacks) NewDynamicProcManagerForEnchant(effectID int32, ppm float64, fixedProcChance float64) *DynamicProcManager { - getProcMask := func() ProcMask { - return aa.character.getDefaultProcMaskForWeaponEnchant(effectID) - } - - dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) - - if aa.character != nil { - aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - procMask := aa.character.getDefaultProcMaskForWeaponEnchant(effectID) - dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMask) - }) - } - - return &dpm -} - -// PPMManager for dynamic ProcMasks on weapon effects -func (aa *AutoAttacks) NewPPMManagerForWeaponEffect(itemID int32, ppm float64) *DynamicProcManager { - getProcMask := func() ProcMask { - return aa.character.getDefaultProcMaskForWeaponEffect(itemID) - } - - dpm := aa.newDynamicProcManager(ppm, 0, getProcMask()) - - if aa.character != nil { - if aa.character != nil { - aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, 0, getProcMask()) - }) - } - } - - return &dpm + return aa.newDynamicProcManagerWithDynamicProcMask(ppm, fixedProcChance, func() ProcMask { + return aa.character.getCurrentProcMaskForWeaponEnchant(effectID) + }) } -// PPMManager for dynamic ProcMasks on weapon effects +// Dynamic Proc Manager for dynamic ProcMasks on weapon effects func (aa *AutoAttacks) NewDynamicProcManagerForWeaponEffect(itemID int32, ppm float64, fixedProcChance float64) *DynamicProcManager { - getProcMask := func() ProcMask { - return aa.character.getDefaultProcMaskForWeaponEffect(itemID) - } + return aa.newDynamicProcManagerWithDynamicProcMask(ppm, fixedProcChance, func() ProcMask { + return aa.character.getCurrentProcMaskForWeaponEffect(itemID) + }) +} - dpm := aa.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) +func (aa *AutoAttacks) newDynamicProcManagerWithDynamicProcMask(ppm float64, fixedProcChance float64, procMaskFn func() ProcMask) *DynamicProcManager { + dpm := aa.newDynamicProcManager(ppm, fixedProcChance, procMaskFn()) if aa.character != nil { if aa.character != nil { aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, getProcMask()) + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMaskFn()) }) } } diff --git a/sim/core/character.go b/sim/core/character.go index e8e01bed6b..c07542c728 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -599,58 +599,52 @@ func (character *Character) HasRangedWeapon() bool { } func (character *Character) GetDynamicProcMaskForWeaponEnchant(effectID int32) *ProcMask { - getProcMask := func() ProcMask { - return character.getDefaultProcMaskForWeaponEnchant(effectID) - } + return character.getDynamicProcMaskPointer(func() ProcMask { + return character.getCurrentProcMaskForWeaponEnchant(effectID) + }) +} - procMask := getProcMask() +func (character *Character) getDynamicProcMaskPointer(procMaskFn func() ProcMask) *ProcMask { + procMask := procMaskFn() character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - procMask = getProcMask() + procMask = procMaskFn() }) return &procMask } -func (character *Character) getDefaultProcMaskForWeaponEnchant(effectID int32) ProcMask { - return character.getDefaultProcMaskFor(func(weapon *Item) bool { +func (character *Character) getCurrentProcMaskForWeaponEnchant(effectID int32) ProcMask { + return character.getCurrentProcMaskFor(func(weapon *Item) bool { return weapon.Enchant.EffectID == effectID }) } func (character *Character) GetDynamicProcMaskForWeaponEffect(itemID int32) *ProcMask { - getProcMask := func() ProcMask { - return character.getDefaultProcMaskForWeaponEffect(itemID) - } - - procMask := getProcMask() - - character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - procMask = getProcMask() + return character.getDynamicProcMaskPointer(func() ProcMask { + return character.getCurrentProcMaskForWeaponEffect(itemID) }) - - return &procMask } -func (character *Character) getDefaultProcMaskForWeaponEffect(itemID int32) ProcMask { - return character.getDefaultProcMaskFor(func(weapon *Item) bool { +func (character *Character) getCurrentProcMaskForWeaponEffect(itemID int32) ProcMask { + return character.getCurrentProcMaskFor(func(weapon *Item) bool { return weapon.ID == itemID }) } func (character *Character) GetProcMaskForTypes(weaponTypes ...proto.WeaponType) ProcMask { - return character.getDefaultProcMaskFor(func(weapon *Item) bool { + return character.getCurrentProcMaskFor(func(weapon *Item) bool { return weapon != nil && slices.Contains(weaponTypes, weapon.WeaponType) }) } func (character *Character) GetProcMaskForTypesAndHand(twohand bool, weaponTypes ...proto.WeaponType) ProcMask { - return character.getDefaultProcMaskFor(func(weapon *Item) bool { + return character.getCurrentProcMaskFor(func(weapon *Item) bool { return weapon != nil && (weapon.HandType == proto.HandType_HandTypeTwoHand) == twohand && slices.Contains(weaponTypes, weapon.WeaponType) }) } -func (character *Character) getDefaultProcMaskFor(pred func(item *Item) bool) ProcMask { +func (character *Character) getCurrentProcMaskFor(pred func(item *Item) bool) ProcMask { mask := ProcMaskUnknown if character == nil { diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 815d0cbf4a..63e4fa55f6 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -101,45 +101,21 @@ func (character *Character) HasSetBonus(set *ItemSet, numItems int32) bool { panic(fmt.Sprintf("Item set %s does not have a bonus with %d pieces.", set.Name, numItems)) } - activeSetBonus := character.HasActiveSetBonus(set.Name, numItems) - if activeSetBonus { - return activeSetBonus + if character.hasActiveSetBonus(set.Name, numItems) { + return true } if character.ItemSwap.IsEnabled() { - unequippedSetBonuses := character.GetSetBonuses(character.ItemSwap.unEquippedItems) - for _, unequippedSetBonus := range unequippedSetBonuses { - if unequippedSetBonus.Name == set.Name && unequippedSetBonus.NumPieces >= numItems { - return true - } - } + return character.hasUnequippedSetBonus(set.Name, numItems) } return false } -type SetBonus struct { - // Name of the set. - Name string - - // Number of pieces required for this bonus. - NumPieces int32 - - // Function for applying the effects of this set bonus. - BonusEffect ApplySetBonus - - // Optional field to override the DefaultItemSetSlots - // For Example: The set contains of 2 weapons - Slots []proto.ItemSlot -} - -// Returns a list describing all active set bonuses. -func (character *Character) GetActiveSetBonuses() []SetBonus { - return character.GetSetBonuses(character.Equipment) -} +type SetBonusCollection []SetBonus -func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { - var activeBonuses []SetBonus +func (equipment Equipment) getSetBonuses() SetBonusCollection { + var activeBonuses SetBonusCollection setItemCount := make(map[*ItemSet]int32) for _, item := range equipment { @@ -184,12 +160,9 @@ func (character *Character) GetSetBonuses(equipment Equipment) []SetBonus { return activeBonuses } -// Checks whether the character has an equipped set bonus -func (character *Character) HasActiveSetBonus(setName string, count int32) bool { - activeSetBonuses := character.GetActiveSetBonuses() - - for _, activeSetBonus := range activeSetBonuses { - if activeSetBonus.Name == setName && activeSetBonus.NumPieces >= count { +func (collection SetBonusCollection) ContainsBonus(setName string, count int32) bool { + for _, bonus := range collection { + if (bonus.Name == setName) && (bonus.NumPieces >= count) { return true } } @@ -197,6 +170,41 @@ func (character *Character) HasActiveSetBonus(setName string, count int32) bool return false } +// Returns a list describing all active set bonuses. +func (character *Character) GetActiveSetBonuses() SetBonusCollection { + return character.Equipment.getSetBonuses() +} + +func (character *Character) getUnequippedSetBonuses() SetBonusCollection { + return character.ItemSwap.unEquippedItems.getSetBonuses() +} + +func (character *Character) hasUnequippedSetBonus(setName string, count int32) bool { + unequippedSetBonuses := character.getUnequippedSetBonuses() + return unequippedSetBonuses.ContainsBonus(setName, count) +} + +type SetBonus struct { + // Name of the set. + Name string + + // Number of pieces required for this bonus. + NumPieces int32 + + // Function for applying the effects of this set bonus. + BonusEffect ApplySetBonus + + // Optional field to override the DefaultItemSetSlots + // For Example: The set contains of 2 weapons + Slots []proto.ItemSlot +} + +// Checks whether the character has an equipped set bonus +func (character *Character) hasActiveSetBonus(setName string, count int32) bool { + activeSetBonuses := character.GetActiveSetBonuses() + return activeSetBonuses.ContainsBonus(setName, count) +} + // Apply effects from item set bonuses. func (character *Character) applyItemSetBonusEffects(agent Agent) { activeSetBonuses := character.GetActiveSetBonuses() @@ -207,11 +215,14 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { } if character.ItemSwap.IsEnabled() { - unequippedSetBonuses := FilterSlice(character.GetSetBonuses(character.ItemSwap.unEquippedItems), func(unequippedBonus SetBonus) bool { - return !character.HasActiveSetBonus(unequippedBonus.Name, unequippedBonus.NumPieces) + unequippedSetBonuses := FilterSlice(character.ItemSwap.unEquippedItems.getSetBonuses(), func(unequippedBonus SetBonus) bool { + return !character.hasActiveSetBonus(unequippedBonus.Name, unequippedBonus.NumPieces) }) for _, unequippedSetBonus := range unequippedSetBonuses { + if activeSetBonuses.ContainsBonus(unequippedSetBonus.Name, unequippedSetBonus.NumPieces) { + continue + } setBonusAura := character.makeSetBonusStatusAura(unequippedSetBonus.Name, unequippedSetBonus.NumPieces, unequippedSetBonus.Slots, false) unequippedSetBonus.BonusEffect(agent, setBonusAura) } @@ -231,7 +242,7 @@ func (character *Character) makeSetBonusStatusAura(setName string, numPieces int if character.ItemSwap.IsEnabled() { character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { - if character.HasActiveSetBonus(setName, numPieces) { + if character.hasActiveSetBonus(setName, numPieces) { statusAura.Activate(sim) } else { statusAura.Deactivate(sim) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 21c2d6930e..b20790d2cd 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,7 +1,6 @@ package core import ( - "fmt" "time" "github.com/wowsims/cata/sim/core/proto" @@ -131,7 +130,6 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { if isItemProc { isItemSlotMatch = swap.HasEquippedItem(config.ItemID, config.Slots) - fmt.Println("RegisterProc", sim.CurrentTime, config.ItemID, slot) } else if isEnchantEffectProc { isItemSlotMatch = swap.HasEquippedEnchant(config.EnchantId, config.Slots) } From 846ef9458199e633fe7b858e65c3e1f39659c115 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 9 Jan 2025 14:38:50 +0100 Subject: [PATCH 083/127] Refactor set bonuses to use buff duration spell mods --- sim/death_knight/death_knight.go | 3 --- sim/death_knight/icebound_fortitude.go | 5 +++-- sim/death_knight/items.go | 12 +++--------- sim/paladin/items.go | 10 +++------- sim/paladin/talents_retribution.go | 4 +++- sim/rogue/combat/adrenaline_rush.go | 3 ++- sim/rogue/items.go | 24 ++++++++---------------- sim/rogue/subtlety/shadow_dance.go | 1 + sim/rogue/subtlety/shadowstep.go | 3 ++- sim/rogue/vendetta.go | 2 +- sim/shaman/items.go | 11 +++-------- sim/shaman/shaman.go | 7 +++---- sim/shaman/spiritwalkers_grace.go | 7 ++++--- sim/warlock/doomguard.go | 8 +++++--- sim/warlock/infernal.go | 7 ++++--- sim/warlock/items.go | 20 ++++++-------------- sim/warlock/warlock.go | 10 ++++------ 17 files changed, 55 insertions(+), 82 deletions(-) diff --git a/sim/death_knight/death_knight.go b/sim/death_knight/death_knight.go index 121a9e2f06..bd626ce2c3 100644 --- a/sim/death_knight/death_knight.go +++ b/sim/death_knight/death_knight.go @@ -71,9 +71,6 @@ type DeathKnight struct { // Runic power decay, used during pre pull RunicPowerDecayAura *core.Aura - // Auras - IceBoundFortituteAura *core.Aura - // Cached Gurthalak tentacles gurthalakTentacles []*cata.TentacleOfTheOldOnesPet diff --git a/sim/death_knight/icebound_fortitude.go b/sim/death_knight/icebound_fortitude.go index 2b77c56df7..5cd41ef56e 100644 --- a/sim/death_knight/icebound_fortitude.go +++ b/sim/death_knight/icebound_fortitude.go @@ -15,7 +15,7 @@ func (dk *DeathKnight) registerIceboundFortitudeSpell() { dmgTakenMult := 0.8 - 0.15*float64(dk.Talents.SanguineFortitude) - dk.IceBoundFortituteAura = dk.RegisterAura(core.Aura{ + iceBoundFortituteAura := dk.RegisterAura(core.Aura{ Label: "Icebound Fortitude", ActionID: actionID, Duration: dk.iceBoundFortituteBaseDuration(), @@ -44,8 +44,9 @@ func (dk *DeathKnight) registerIceboundFortitudeSpell() { }, }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - dk.IceBoundFortituteAura.Activate(sim) + spell.RelatedSelfBuff.Activate(sim) }, + RelatedSelfBuff: iceBoundFortituteAura, }) if !dk.Inputs.IsDps { diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index ec6337fea6..adb4361060 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -75,17 +75,11 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ }, 4: func(agent core.Agent, setBonusAura *core.Aura) { // Increases the duration of your Icebound Fortitude ability by 50%. - dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: DeathKnightSpellIceboundFortitude, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - dk.IceBoundFortituteAura.Duration += 6 * time.Second - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - dk.IceBoundFortituteAura.Duration -= 6 * time.Second - }, + KeyValue: "Icebound Fortitude", + TimeValue: 6 * time.Second, }) }, }, diff --git a/sim/paladin/items.go b/sim/paladin/items.go index cee533172d..dbcbe095e3 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -66,14 +66,10 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ paladin := agent.(PaladinAgent).GetPaladin() setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: SpellMaskZealotry, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - paladin.ZealotryAura.Duration += time.Second * 15 - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - paladin.ZealotryAura.Duration -= time.Second * 15 - }, + KeyValue: "Zealotry" + paladin.Label, + TimeValue: time.Second * 15, }) setBonusAura.ExposeToAPL(99116) diff --git a/sim/paladin/talents_retribution.go b/sim/paladin/talents_retribution.go index 0e6e31505c..95ac192a87 100644 --- a/sim/paladin/talents_retribution.go +++ b/sim/paladin/talents_retribution.go @@ -369,7 +369,9 @@ func (paladin *Paladin) applyZealotry() { ThreatMultiplier: 1, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - paladin.ZealotryAura.Activate(sim) + spell.RelatedSelfBuff.Activate(sim) }, + + RelatedSelfBuff: paladin.ZealotryAura, }) } diff --git a/sim/rogue/combat/adrenaline_rush.go b/sim/rogue/combat/adrenaline_rush.go index 35dfbc5ce4..ab7b74f103 100644 --- a/sim/rogue/combat/adrenaline_rush.go +++ b/sim/rogue/combat/adrenaline_rush.go @@ -49,8 +49,9 @@ func (comRogue *CombatRogue) registerAdrenalineRushCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { comRogue.BreakStealth(sim) - comRogue.AdrenalineRushAura.Activate(sim) + spell.RelatedSelfBuff.Activate(sim) }, + RelatedSelfBuff: comRogue.AdrenalineRushAura, }) comRogue.AddMajorCooldown(core.MajorCooldown{ diff --git a/sim/rogue/items.go b/sim/rogue/items.go index a842681296..b4490b5cbc 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -221,14 +221,14 @@ var Tier13 = core.NewItemSet(core.ItemSet{ Kind: core.SpellMod_Custom, ClassMask: RogueSpellVendetta, ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - for _, aura := range spell.RelatedAuras[0] { + for _, aura := range spell.RelatedAuraArrays["Vendetta"] { if aura != nil { aura.Duration = rogue.getVendettaDuration(9) } } }, RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - for _, aura := range spell.RelatedAuras[0] { + for _, aura := range spell.RelatedAuraArrays["Vendetta"] { if aura != nil { aura.Duration = rogue.getVendettaDuration(0) } @@ -237,25 +237,17 @@ var Tier13 = core.NewItemSet(core.ItemSet{ }) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: RogueSpellAdrenalineRush, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - rogue.AdrenalineRushAura.Duration += time.Second * 3 - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - rogue.AdrenalineRushAura.Duration -= time.Second * 3 - }, + KeyValue: "Adrenaline Rush", + TimeValue: time.Second * 3, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: RogueSpellShadowDance, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - rogue.ShadowDanceAura.Duration += time.Second * 2 - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - rogue.ShadowDanceAura.Duration -= time.Second * 2 - }, + KeyValue: "Shadow Dance", + TimeValue: time.Second * 2, }) }, }, diff --git a/sim/rogue/subtlety/shadow_dance.go b/sim/rogue/subtlety/shadow_dance.go index 036ef4ea39..1c3a598ef3 100644 --- a/sim/rogue/subtlety/shadow_dance.go +++ b/sim/rogue/subtlety/shadow_dance.go @@ -40,6 +40,7 @@ func (subRogue *SubtletyRogue) registerShadowDanceCD() { subRogue.BreakStealth(sim) subRogue.ShadowDanceAura.Activate(sim) }, + RelatedSelfBuff: subRogue.ShadowDanceAura, }) subRogue.AddMajorCooldown(core.MajorCooldown{ diff --git a/sim/rogue/subtlety/shadowstep.go b/sim/rogue/subtlety/shadowstep.go index 0651f5b16f..0ecabb539c 100644 --- a/sim/rogue/subtlety/shadowstep.go +++ b/sim/rogue/subtlety/shadowstep.go @@ -52,7 +52,8 @@ func (subRogue *SubtletyRogue) registerShadowstepCD() { }, }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { - subRogue.ShadowstepAura.Activate(sim) + spell.RelatedSelfBuff.Activate(sim) }, + RelatedSelfBuff: subRogue.ShadowstepAura, }) } diff --git a/sim/rogue/vendetta.go b/sim/rogue/vendetta.go index e4535872b0..f093525a44 100644 --- a/sim/rogue/vendetta.go +++ b/sim/rogue/vendetta.go @@ -53,7 +53,7 @@ func (rogue *Rogue) registerVendetta() { aura := vendettaAuras.Get(target) aura.Activate(sim) }, - RelatedAuras: []core.AuraArray{vendettaAuras}, + RelatedAuraArrays: vendettaAuras.ToMap(), }) rogue.AddMajorCooldown(core.MajorCooldown{ diff --git a/sim/shaman/items.go b/sim/shaman/items.go index d0fcffe283..bb25337548 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -261,16 +261,11 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ }) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: SpellMaskSpiritwalkersGrace, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - shaman.SpiritwalkersGraceAura.Duration += 5 * time.Second - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - shaman.SpiritwalkersGraceAura.Duration -= 5 * time.Second - }, + KeyValue: "Spiritwalker's Grace" + shaman.Label, + TimeValue: 5 * time.Second, }) - }, }, }) diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index 95ff96eb37..c3dd299df5 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -117,10 +117,9 @@ type Shaman struct { Stormstrike *core.Spell PrimalStrike *core.Spell - LightningShield *core.Spell - LightningShieldAura *core.Aura - Fulmination *core.Spell - SpiritwalkersGraceAura *core.Aura + LightningShield *core.Spell + LightningShieldAura *core.Aura + Fulmination *core.Spell Earthquake *core.Spell Thunderstorm *core.Spell diff --git a/sim/shaman/spiritwalkers_grace.go b/sim/shaman/spiritwalkers_grace.go index 2858742c1d..3da2bff695 100644 --- a/sim/shaman/spiritwalkers_grace.go +++ b/sim/shaman/spiritwalkers_grace.go @@ -18,7 +18,7 @@ func (shaman *Shaman) registerSpiritwalkersGraceSpell() { ClassMask: SpellMaskNone, }) - shaman.SpiritwalkersGraceAura = shaman.RegisterAura(core.Aura{ + spiritwalkersGraceAura := shaman.RegisterAura(core.Aura{ Label: "Spiritwalker's Grace" + shaman.Label, ActionID: actionID, Duration: 15 * time.Second, @@ -49,8 +49,9 @@ func (shaman *Shaman) registerSpiritwalkersGraceSpell() { Duration: time.Second * 120, }, }, - ApplyEffects: func(sim *core.Simulation, _ *core.Unit, _ *core.Spell) { - shaman.SpiritwalkersGraceAura.Activate(sim) + ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { + spell.RelatedSelfBuff.Activate(sim) }, + RelatedSelfBuff: spiritwalkersGraceAura, }) } diff --git a/sim/warlock/doomguard.go b/sim/warlock/doomguard.go index 75caccf980..94656f9279 100644 --- a/sim/warlock/doomguard.go +++ b/sim/warlock/doomguard.go @@ -9,7 +9,7 @@ import ( ) func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { - warlock.SummonDoomguardAura = warlock.RegisterAura(core.Aura{ + summonDoomguardAura := warlock.RegisterAura(core.Aura{ Label: "Summon Doomguard", ActionID: core.ActionID{SpellID: 18540}, Duration: time.Duration(45+10*warlock.Talents.AncientGrimoire) * time.Second, @@ -32,9 +32,11 @@ func (warlock *Warlock) registerSummonDoomguard(timer *core.Timer) { }, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - warlock.Doomguard.EnableWithTimeout(sim, warlock.Doomguard, warlock.SummonDoomguardAura.Duration) - warlock.SummonDoomguardAura.Activate(sim) + warlock.Doomguard.EnableWithTimeout(sim, warlock.Doomguard, spell.RelatedSelfBuff.Duration) + spell.RelatedSelfBuff.Activate(sim) }, + + RelatedSelfBuff: summonDoomguardAura, }) } diff --git a/sim/warlock/infernal.go b/sim/warlock/infernal.go index f24043b8c3..ec6bae2e9c 100644 --- a/sim/warlock/infernal.go +++ b/sim/warlock/infernal.go @@ -10,7 +10,7 @@ import ( ) func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { - warlock.SummonInfernalAura = warlock.RegisterAura(core.Aura{ + summonInfernalAura := warlock.RegisterAura(core.Aura{ Label: "Summon Infernal", ActionID: core.ActionID{SpellID: 1122}, Duration: time.Duration(45+10*warlock.Talents.AncientGrimoire) * time.Second, @@ -46,10 +46,11 @@ func (warlock *Warlock) registerSummonInfernal(timer *core.Timer) { warlock.CalcAndRollDamageRange(sim, 0.48500001431, 0.11999999732) spell.CalcAndDealDamage(sim, aoeTarget, baseDamage, spell.OutcomeMagicHitAndCrit) } - warlock.Infernal.EnableWithTimeout(sim, warlock.Infernal, warlock.SummonInfernalAura.Duration) + warlock.Infernal.EnableWithTimeout(sim, warlock.Infernal, spell.RelatedSelfBuff.Duration) // fake aura to show duration - warlock.SummonInfernalAura.Activate(sim) + spell.RelatedSelfBuff.Activate(sim) }, + RelatedSelfBuff: summonInfernalAura, }) } diff --git a/sim/warlock/items.go b/sim/warlock/items.go index c1ae70c6ba..ff7fd3f380 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -226,25 +226,17 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ summonDuration := core.TernaryDuration(warlock.Spec == proto.Spec_SpecDemonologyWarlock, 20*time.Second, 30*time.Second) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: WarlockSpellSummonDoomguard, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - warlock.SummonDoomguardAura.Duration += summonDuration - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - warlock.SummonDoomguardAura.Duration -= summonDuration - }, + KeyValue: "Summon Doomguard", + TimeValue: summonDuration, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_BuffDuration_Flat, ClassMask: WarlockSpellSummonInfernal, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - warlock.SummonInfernalAura.Duration += summonDuration - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - warlock.SummonInfernalAura.Duration -= summonDuration - }, + KeyValue: "Summon Infernal", + TimeValue: summonDuration, }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index 818e85e67e..5a1ef2822b 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -32,12 +32,10 @@ type Warlock struct { Imp *WarlockPet Succubus *WarlockPet - SummonDoomguardAura *core.Aura - Doomguard *DoomguardPet - Infernal *InfernalPet - EbonImp *EbonImpPet - SummonInfernalAura *core.Aura - FieryImp *FieryImpPet + Doomguard *DoomguardPet + Infernal *InfernalPet + EbonImp *EbonImpPet + FieryImp *FieryImpPet SoulShards int32 SoulBurnAura *core.Aura From 1d0772a8987650d42a67a7618ba593f1f79637a6 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 9 Jan 2025 19:18:02 +0100 Subject: [PATCH 084/127] Fix tidefury bonus 2p --- sim/shaman/items.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sim/shaman/items.go b/sim/shaman/items.go index bb25337548..003a127905 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -14,16 +14,10 @@ import ( var ItemSetTidefury = core.NewItemSet(core.ItemSet{ Name: "Tidefury Raiment", Bonuses: map[int32]core.ApplySetBonus{ - 2: func(_ core.Agent, _ *core.Aura) { - // Handled in chain_lightning.go - }, - 4: func(agent core.Agent, setBonusAura *core.Aura) { + 2: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() - if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { - setBonusAura.AttachStatBuff(stats.MP5, 3) - } - + // Handled in chain_lightning.go setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { shaman.HasDungeonSet3 = true }) @@ -31,6 +25,13 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ shaman.HasDungeonSet3 = false }) }, + 4: func(agent core.Agent, setBonusAura *core.Aura) { + shaman := agent.(ShamanAgent).GetShaman() + + if shaman.SelfBuffs.Shield == proto.ShamanShield_WaterShield { + setBonusAura.AttachStatBuff(stats.MP5, 3) + } + }, }, }) From 19f81ceda27ba3ec44516e468bdfe4a777624b90 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 9 Jan 2025 21:13:59 +0100 Subject: [PATCH 085/127] Add default Swap set for ret --- sim/common/cata/stat_bonus_procs.go | 2 +- ui/mage/arcane/sim.ts | 3 ++- ui/mage/fire/sim.tsx | 3 ++- ui/paladin/retribution/sim.ts | 3 ++- ui/priest/shadow/sim.ts | 3 ++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sim/common/cata/stat_bonus_procs.go b/sim/common/cata/stat_bonus_procs.go index 252dfc1d23..0ae3cecaff 100644 --- a/sim/common/cata/stat_bonus_procs.go +++ b/sim/common/cata/stat_bonus_procs.go @@ -1148,7 +1148,7 @@ func init() { shared.NewProcStatBonusEffect(shared.ProcStatBonusEffect{ Name: "Seal of the Seven Signs" + labelSuffix, ItemID: []int32{77969, 77204, 77989}[version], - AuraID: []int32{109803, 109804, 109805}[version], + AuraID: []int32{109803, 107984, 109805}[version], Bonus: stats.Stats{stats.HasteRating: []float64{2573, 2904, 3278}[version]}, Duration: time.Second * 20, Callback: core.CallbackOnHealDealt | core.CallbackOnPeriodicHealDealt, diff --git a/ui/mage/arcane/sim.ts b/ui/mage/arcane/sim.ts index 559739973a..4abb027fed 100644 --- a/ui/mage/arcane/sim.ts +++ b/ui/mage/arcane/sim.ts @@ -6,7 +6,7 @@ import { Player } from '../../core/player'; import { PlayerClasses } from '../../core/player_classes'; import { Mage } from '../../core/player_classes/mage'; import { APLRotation } from '../../core/proto/apl'; -import { Faction, IndividualBuffs, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; +import { Faction, IndividualBuffs, ItemSlot, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; import { StatCapType } from '../../core/proto/ui'; import { StatCap, Stats, UnitStat } from '../../core/proto_utils/stats'; import * as ArcaneInputs from './inputs'; @@ -82,6 +82,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecArcaneMage, { otherInputs: { inputs: [ArcaneInputs.FocusMagicUptime, OtherInputs.InputDelay, OtherInputs.DistanceFromTarget, OtherInputs.TankAssignment], }, + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, diff --git a/ui/mage/fire/sim.tsx b/ui/mage/fire/sim.tsx index 272fd26e99..5eb848911c 100644 --- a/ui/mage/fire/sim.tsx +++ b/ui/mage/fire/sim.tsx @@ -5,7 +5,7 @@ import { IndividualSimUI, registerSpecConfig } from '../../core/individual_sim_u import { Player } from '../../core/player'; import { PlayerClasses } from '../../core/player_classes'; import { APLAction, APLListItem, APLRotation, APLRotation_Type, SimpleRotation } from '../../core/proto/apl'; -import { Cooldowns, Faction, IndividualBuffs, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; +import { Cooldowns, Faction, IndividualBuffs, ItemSlot, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; import { StatCapType } from '../../core/proto/ui'; import { StatCap, Stats, UnitStat } from '../../core/proto_utils/stats'; import { TypedEvent } from '../../core/typed_event'; @@ -101,6 +101,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFireMage, { otherInputs: { inputs: [OtherInputs.InputDelay, OtherInputs.DistanceFromTarget, OtherInputs.TankAssignment, OtherInputs.DarkIntentUptime], }, + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, diff --git a/ui/paladin/retribution/sim.ts b/ui/paladin/retribution/sim.ts index 08c3425ce9..aeb57f64b7 100644 --- a/ui/paladin/retribution/sim.ts +++ b/ui/paladin/retribution/sim.ts @@ -175,7 +175,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, { otherInputs: { inputs: [RetributionInputs.StartingHolyPower(), OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget], }, - itemSwapSlots: [ItemSlot.ItemSlotHead, ItemSlot.ItemSlotShoulder, ItemSlot.ItemSlotChest, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotLegs], + itemSwapSlots: [ItemSlot.ItemSlotHead, ItemSlot.ItemSlotShoulder, ItemSlot.ItemSlotChest, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotLegs, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, @@ -188,6 +188,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecRetributionPaladin, { talents: [Presets.DefaultTalents], // Preset gear configurations that the user can quickly select. gear: [Presets.PRERAID_RET_PRESET, Presets.P2_BIS_RET_PRESET, Presets.P3_BIS_RET_PRESET, Presets.P4_BIS_RET_PRESET], + itemSwaps: [Presets.ITEM_SWAP_4P_T11], builds: [Presets.P2_PRESET, Presets.P3_PRESET, Presets.P4_PRESET], }, diff --git a/ui/priest/shadow/sim.ts b/ui/priest/shadow/sim.ts index 3dbfc74071..748d60ce6b 100644 --- a/ui/priest/shadow/sim.ts +++ b/ui/priest/shadow/sim.ts @@ -6,7 +6,7 @@ import { IndividualSimUI, registerSpecConfig } from '../../core/individual_sim_u import { Player } from '../../core/player'; import { PlayerClasses } from '../../core/player_classes'; import { APLRotation } from '../../core/proto/apl'; -import { Faction, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; +import { Faction, ItemSlot, PartyBuffs, PseudoStat, Race, Spec, Stat } from '../../core/proto/common'; import { Stats, UnitStat } from '../../core/proto_utils/stats'; import * as PriestInputs from '../inputs'; // import * as ShadowPriestInputs from './inputs'; @@ -89,6 +89,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecShadowPriest, { OtherInputs.DarkIntentUptime, ], }, + itemSwapSlots: [ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotHands, ItemSlot.ItemSlotTrinket1, ItemSlot.ItemSlotTrinket2], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, From a543f7311fde40f9430c60c12656e1a924cdd435 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Thu, 9 Jan 2025 22:00:19 +0100 Subject: [PATCH 086/127] Remove spellmod keyvalue usage --- sim/death_knight/items.go | 1 - sim/paladin/items.go | 4 ---- sim/rogue/items.go | 2 -- sim/shaman/items.go | 1 - sim/warlock/items.go | 2 -- 5 files changed, 10 deletions(-) diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index adb4361060..1fa9638a2c 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -78,7 +78,6 @@ var ItemSetMagmaPlatedBattlearmor = core.NewItemSet(core.ItemSet{ setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: DeathKnightSpellIceboundFortitude, - KeyValue: "Icebound Fortitude", TimeValue: 6 * time.Second, }) }, diff --git a/sim/paladin/items.go b/sim/paladin/items.go index dbcbe095e3..b5186bb39a 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -62,13 +62,9 @@ var ItemSetBattleplateOfImmolation = core.NewItemSet(core.ItemSet{ }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Handled in talents_retribution.go - paladin := agent.(PaladinAgent).GetPaladin() - setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: SpellMaskZealotry, - KeyValue: "Zealotry" + paladin.Label, TimeValue: time.Second * 15, }) diff --git a/sim/rogue/items.go b/sim/rogue/items.go index b4490b5cbc..305cbf7ec6 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -239,14 +239,12 @@ var Tier13 = core.NewItemSet(core.ItemSet{ setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: RogueSpellAdrenalineRush, - KeyValue: "Adrenaline Rush", TimeValue: time.Second * 3, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: RogueSpellShadowDance, - KeyValue: "Shadow Dance", TimeValue: time.Second * 2, }) }, diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 003a127905..9234bccd3b 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -264,7 +264,6 @@ var ItemSetSpiritwalkersVestments = core.NewItemSet(core.ItemSet{ setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: SpellMaskSpiritwalkersGrace, - KeyValue: "Spiritwalker's Grace" + shaman.Label, TimeValue: 5 * time.Second, }) }, diff --git a/sim/warlock/items.go b/sim/warlock/items.go index ff7fd3f380..752533bc1a 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -228,14 +228,12 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: WarlockSpellSummonDoomguard, - KeyValue: "Summon Doomguard", TimeValue: summonDuration, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ Kind: core.SpellMod_BuffDuration_Flat, ClassMask: WarlockSpellSummonInfernal, - KeyValue: "Summon Infernal", TimeValue: summonDuration, }) }, From 5dace3da15076e35f60e82b90e5c4e0f78ccc43f Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 00:38:47 +0100 Subject: [PATCH 087/127] Performance optimisations --- sim/common/cata/damage_procs.go | 4 +- sim/common/cata/gurthalak.go | 2 +- sim/common/cata/other_effects.go | 71 ++++++++++++++++++++------ sim/common/cata/stat_bonus_stacking.go | 26 +++++----- sim/common/shared/shared_utils.go | 49 ++++++++++-------- sim/common/wotlk/other_effects.go | 2 +- sim/core/aura_helpers.go | 2 +- sim/core/character.go | 35 ++----------- sim/core/database.go | 28 ++++++++++ sim/core/item_effects.go | 3 +- sim/core/item_swaps.go | 35 +++++++++++-- 11 files changed, 163 insertions(+), 94 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index f3eeffbf79..89410adfab 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -95,7 +95,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(68925, aura, core.TrinketSlots()) + character.ItemSwap.RegisterProc(68925, aura) }) core.NewItemEffect(69110, func(agent core.Agent) { @@ -147,7 +147,7 @@ func init() { }, })) - character.ItemSwap.RegisterProc(69110, aura, core.TrinketSlots()) + character.ItemSwap.RegisterProc(69110, aura) }) } diff --git a/sim/common/cata/gurthalak.go b/sim/common/cata/gurthalak.go index 773d0ef2c1..2e5badadd8 100644 --- a/sim/common/cata/gurthalak.go +++ b/sim/common/cata/gurthalak.go @@ -88,7 +88,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(gurthalakItemID, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterProc(gurthalakItemID, aura) }) } } diff --git a/sim/common/cata/other_effects.go b/sim/common/cata/other_effects.go index ae3cac8ace..9c9112a90d 100644 --- a/sim/common/cata/other_effects.go +++ b/sim/common/cata/other_effects.go @@ -90,7 +90,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Vengful Wisp", ActionID: core.ActionID{ItemID: 63839}, Callback: core.CallbackOnSpellHitDealt, @@ -101,6 +101,8 @@ func init() { trinketDot.Dot(result.Target).Apply(sim) }, }) + + character.ItemSwap.RegisterProc(63839, triggerAura) }) core.NewItemEffect(64645, func(agent core.Agent) { @@ -166,7 +168,7 @@ func init() { MaxStacks: 5, }) - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Raw Fury Aura", ActionID: core.ActionID{ItemID: 59461}, Callback: core.CallbackOnSpellHitDealt, @@ -180,6 +182,8 @@ func init() { }, })) + character.ItemSwap.RegisterProc(59461, triggerAura) + buffAura := character.NewTemporaryStatsAura("Forged Fury", core.ActionID{SpellID: 91836}, stats.Stats{stats.Strength: 1926}, time.Second*20) sharedCD := character.GetOffensiveTrinketCD() trinketSpell := character.RegisterSpell(core.SpellConfig{ @@ -354,7 +358,7 @@ func init() { BonusPerStack: stats.Stats{stats.SpellPower: core.TernaryFloat64(heroic, 87, 77)}, }) - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Heart of Ignacious Aura" + labelSuffix, ActionID: core.ActionID{ItemID: heartItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -368,6 +372,8 @@ func init() { }, })) + character.ItemSwap.RegisterProc(heartItemID, triggerAura) + hastePerStack := core.TernaryFloat64(heroic, 363, 321) buffAura := character.RegisterAura(core.Aura{ Label: "Heart's Judgement" + labelSuffix, @@ -435,7 +441,7 @@ func init() { BonusPerStack: stats.Stats{stats.Spirit: core.TernaryFloat64(heroic, 116, 103)}, }) - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Jar of Ancient Remedies Aura" + labelSuffix, ActionID: core.ActionID{ItemID: jarItemID}, Callback: core.CallbackOnHealDealt, @@ -451,6 +457,8 @@ func init() { }, })) + character.ItemSwap.RegisterProc(jarItemID, triggerAura) + manaMetric := character.NewManaMetrics(core.ActionID{SpellID: core.TernaryInt32(heroic, 92331, 91322)}) trinketSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{ItemID: jarItemID}, @@ -509,7 +517,7 @@ func init() { procAuraHaste.Icd = &icd procAuraMastery.Icd = &icd - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Matrix Restabilizer Trigger" + labelSuffix, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeOrRanged, @@ -533,6 +541,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(matrixItemID, triggerAura) }) apparatusItemID := core.TernaryInt32(heroic, 69113, 68972) @@ -589,7 +599,7 @@ func init() { 1680: true, // Whirlwind } - core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakePermanent(core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Titanic Power Trigger" + labelSuffix, ActionID: core.ActionID{SpellID: 96924}, Callback: core.CallbackOnSpellHitDealt, @@ -616,6 +626,8 @@ func init() { }, })) + character.ItemSwap.RegisterProc(apparatusItemID, triggerAura) + trinketSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{ItemID: apparatusItemID}, SpellSchool: core.SpellSchoolPhysical, @@ -686,7 +698,7 @@ func init() { 1680: true, // Whirlwind } - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ ActionID: core.ActionID{ItemID: vesselItemID}, Name: "Vessel of Acceleration" + labelSuffix, Callback: core.CallbackOnSpellHitDealt, @@ -704,6 +716,8 @@ func init() { procAura.AddStack(sim) }, }) + + character.ItemSwap.RegisterProc(vesselItemID, triggerAura) }) jawsItemID := core.TernaryInt32(heroic, 69111, 68926) @@ -804,7 +818,7 @@ func init() { Duration: time.Minute, } - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Spidersilk Spindle Trigger" + labelSuffix, Callback: core.CallbackOnSpellHitTaken, Outcome: core.OutcomeLanded, @@ -819,6 +833,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(spindleItemID, triggerAura) }) scalesOfLifeItemID := core.TernaryInt32(heroic, 69109, 68915) @@ -904,7 +920,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Vial of Shadows Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: vialItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -917,6 +933,9 @@ func init() { lightningStrike.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(vialItemID, triggerAura) + }) fetishItemID := []int32{77982, 77210, 78002}[version] @@ -954,7 +973,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Bone-Link Fetish Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: fetishItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -967,6 +986,8 @@ func init() { whirlingMaw.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(fetishItemID, triggerAura) }) cunningItemID := []int32{77980, 77208, 78000}[version] @@ -1008,7 +1029,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Cunning of the Cruel Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: cunningItemID}, Callback: core.CallbackOnSpellHitDealt | core.CallbackOnPeriodicDamageDealt, @@ -1021,6 +1042,9 @@ func init() { shadowboltVolley.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(cunningItemID, triggerAura) + }) prideItemID := []int32{77983, 77211, 78003}[version] @@ -1041,7 +1065,7 @@ func init() { Duration: time.Minute, } - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Indomitable Pride Trigger" + labelSuffix, Callback: core.CallbackOnSpellHitTaken, Outcome: core.OutcomeLanded, @@ -1058,6 +1082,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(prideItemID, triggerAura) }) // Kiril, Fury of Beasts @@ -1097,7 +1123,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Fury of the Beast Trigger" + labelSuffix, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeOrRanged | core.ProcMaskMeleeProc, @@ -1108,6 +1134,8 @@ func init() { furyOfTheBeastAura.Activate(sim) }, }) + + character.ItemSwap.RegisterProc(kirilItemID, triggerAura) }) // These spells ignore the slot the weapon is in. @@ -1164,7 +1192,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Drain Life Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: souldrinkerItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -1182,6 +1210,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(souldrinkerItemID, triggerAura) }) // No'Kaled, the Elements of Death @@ -1230,7 +1260,7 @@ func init() { spells := []*core.Spell{flameblast, iceblast, shadowblast} - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "No'Kaled Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: nokaledItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -1249,6 +1279,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(nokaledItemID, triggerAura) }) // Rathrak, the Poisonous Mind @@ -1297,7 +1329,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Rathrak Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: rathrakItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -1309,6 +1341,9 @@ func init() { blastOfCorruption.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(rathrakItemID, triggerAura) + }) // Vishanka, Jaws of the Earth @@ -1355,7 +1390,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Vishanka Trigger" + labelSuffix, ActionID: core.ActionID{ItemID: vishankaItemID}, Callback: core.CallbackOnSpellHitDealt, @@ -1367,6 +1402,8 @@ func init() { speakingOfRage.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(vishankaItemID, triggerAura) }) } } diff --git a/sim/common/cata/stat_bonus_stacking.go b/sim/common/cata/stat_bonus_stacking.go index 13a01ef00b..9cef0f507c 100644 --- a/sim/common/cata/stat_bonus_stacking.go +++ b/sim/common/cata/stat_bonus_stacking.go @@ -27,7 +27,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Gale of Shadows", - ID: 56138, + ItemID: 56138, AuraID: 90953, Bonus: stats.Stats{stats.SpellPower: 15}, MaxStacks: 20, @@ -41,7 +41,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Gale of Shadows (Heroic)", - ID: 56462, + ItemID: 56462, AuraID: 90985, Bonus: stats.Stats{stats.SpellPower: 17}, MaxStacks: 20, @@ -55,7 +55,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Tia's Grace", - ID: 55874, + ItemID: 55874, AuraID: 92085, Bonus: stats.Stats{stats.Agility: 30}, MaxStacks: 10, @@ -68,7 +68,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Tia's Grace (Heroic)", - ID: 56394, + ItemID: 56394, AuraID: 92089, Bonus: stats.Stats{stats.Agility: 34}, MaxStacks: 10, @@ -81,7 +81,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Darkmoon Card: Tsunami", - ID: 62050, + ItemID: 62050, AuraID: 92090, Bonus: stats.Stats{stats.Spirit: 80}, MaxStacks: 5, @@ -95,7 +95,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Fluid Death", - ID: 58181, + ItemID: 58181, AuraID: 92104, Bonus: stats.Stats{stats.Agility: 38}, MaxStacks: 10, @@ -108,7 +108,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "License to Slay", - ID: 58180, + ItemID: 58180, AuraID: 91810, Bonus: stats.Stats{stats.Strength: 38}, MaxStacks: 10, @@ -121,7 +121,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Necromantic Focus", - ID: 68982, + ItemID: 68982, AuraID: 96962, Bonus: stats.Stats{stats.MasteryRating: 39}, MaxStacks: 10, @@ -135,7 +135,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Necromantic Focus Heroic", - ID: 69139, + ItemID: 69139, AuraID: 97131, Bonus: stats.Stats{stats.MasteryRating: 44}, MaxStacks: 10, @@ -152,7 +152,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Eye of Unmaking" + labelSuffix, - ID: []int32{77977, 77200, 77997}[version], + ItemID: []int32{77977, 77200, 77997}[version], AuraID: []int32{109748, 107966, 109750}[version], Bonus: stats.Stats{stats.Strength: []float64{78, 88, 99}[version]}, MaxStacks: 10, @@ -165,7 +165,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Resolve of Undying" + labelSuffix, - ID: []int32{77978, 77201, 77998}[version], + ItemID: []int32{77978, 77201, 77998}[version], AuraID: []int32{109780, 107968, 109782}[version], Bonus: stats.Stats{stats.DodgeRating: []float64{78, 88, 99}[version]}, MaxStacks: 10, @@ -178,7 +178,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Will of Unbinding" + labelSuffix, - ID: []int32{77975, 77198, 77995}[version], + ItemID: []int32{77975, 77198, 77995}[version], AuraID: []int32{109793, 107970, 109795}[version], Bonus: stats.Stats{stats.Intellect: []float64{78, 88, 99}[version]}, MaxStacks: 10, @@ -191,7 +191,7 @@ func init() { shared.NewStackingStatBonusEffect(shared.StackingStatBonusEffect{ Name: "Wrath of Unchaining" + labelSuffix, - ID: []int32{77974, 77197, 77994}[version], + ItemID: []int32{77974, 77197, 77994}[version], AuraID: []int32{109717, 107960, 109719}[version], Bonus: stats.Stats{stats.Agility: []float64{78, 88, 99}[version]}, MaxStacks: 10, diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 1573b9b928..c42921ed58 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -89,10 +89,10 @@ func NewProcStatBonusEffectWithDamageProc(config ProcStatBonusEffect, damage Dam func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent core.Agent) ExtraSpellInfo) { isEnchant := config.EnchantID != 0 + var effectFn func(id int32, effect core.ApplyEffect) var effectID int32 var triggerActionID core.ActionID - if isEnchant { effectID = config.EnchantID effectFn = core.NewEnchantEffect @@ -105,6 +105,14 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c effectFn(effectID, func(agent core.Agent) { character := agent.GetCharacter() + itemSwapIsEnabled := character.ItemSwap.IsEnabled() + itemExistsInMainEquip := true + + var eligibleSlotsForItem []proto.ItemSlot + if !isEnchant { + eligibleSlotsForItem = character.ItemSwap.EligibleSlotsForItem(effectID) + itemExistsInMainEquip = !itemSwapIsEnabled || itemSwapIsEnabled && character.ItemSwap.ItemExistsInMainEquip(effectID, eligibleSlotsForItem) + } procID := core.ActionID{SpellID: config.AuraID} if procID.IsEmptyAction() { @@ -121,16 +129,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } } - var itemSwapProcCondition core.CustomStatBuffProcCondition - if !isEnchant && character.ItemSwap.IsEnabled() && character.ItemSwap.ItemExistsInSwapSet(effectID) { - itemSwapProcCondition = func(_ *core.Simulation, aura *core.Aura) bool { - return character.HasItemEquipped(effectID) - } - } - - procAura.CustomProcCondition = core.Ternary(config.CustomProcCondition == nil, itemSwapProcCondition, func(sim *core.Simulation, aura *core.Aura) bool { - return config.CustomProcCondition(sim, aura) && ((itemSwapProcCondition == nil) || itemSwapProcCondition(sim, aura)) - }) + procAura.CustomProcCondition = config.CustomProcCondition var customHandler CustomProcHandler if config.CustomProcCondition != nil { @@ -200,11 +199,10 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c if isEnchant { character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) } else { - eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(effectID), false) - if slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { + if itemExistsInMainEquip && (slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) || slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket2)) { character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) } - character.ItemSwap.RegisterProc(effectID, triggerAura, eligibleSlotsForItem) + character.ItemSwap.RegisterProc(effectID, triggerAura) } }) } @@ -388,7 +386,7 @@ func NewStackingStatBonusCD(config StackingStatBonusCD) { type StackingStatBonusEffect struct { Name string - ID int32 + ItemID int32 AuraID int32 Bonus stats.Stats Duration time.Duration @@ -403,12 +401,16 @@ type StackingStatBonusEffect struct { } func NewStackingStatBonusEffect(config StackingStatBonusEffect) { - core.NewItemEffect(config.ID, func(agent core.Agent) { + core.NewItemEffect(config.ItemID, func(agent core.Agent) { character := agent.GetCharacter() + itemSwapIsEnabled := character.ItemSwap.IsEnabled() + eligibleSlotsForItem := character.ItemSwap.EligibleSlotsForItem(config.ItemID) + itemExistsInMainEquip := !itemSwapIsEnabled || itemSwapIsEnabled && character.ItemSwap.ItemExistsInMainEquip(config.ItemID, eligibleSlotsForItem) + auraID := core.ActionID{SpellID: config.AuraID} if auraID.IsEmptyAction() { - auraID = core.ActionID{ItemID: config.ID} + auraID = core.ActionID{ItemID: config.ItemID} } procAura := core.MakeStackingAura(character, core.StackingStatAura{ Aura: core.Aura{ @@ -420,8 +422,8 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { BonusPerStack: config.Bonus, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - ActionID: core.ActionID{ItemID: config.ID}, + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + ActionID: core.ActionID{ItemID: config.ItemID}, Name: config.Name, Callback: config.Callback, ProcMask: config.ProcMask, @@ -436,7 +438,11 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { }, }) - character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + if itemExistsInMainEquip && slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { + character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) + } + + character.ItemSwap.RegisterProc(config.ItemID, triggerAura) }) } @@ -542,8 +548,7 @@ func NewProcDamageEffect(config ProcDamageEffect) { if isEnchant { character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) } else { - eligibleSlotsForItem := core.EligibleSlotsForItem(core.GetItemByID(effectID), false) - character.ItemSwap.RegisterProc(effectID, triggerAura, eligibleSlotsForItem) + character.ItemSwap.RegisterProc(effectID, triggerAura) } }) } diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 18dfe1e97f..18d030f86d 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -998,7 +998,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(itemID, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterProc(itemID, aura) }) }) diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index 3942285582..5826c9226d 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -239,7 +239,7 @@ func MakeStackingAura(character *Character, config StackingStatAura) *StatBuffAu character.AddStatsDynamic(sim, bonusPerStack.Multiply(float64(newStacks-oldStacks))) } return &StatBuffAura{ - Aura: character.RegisterAura(config.Aura), + Aura: character.GetOrRegisterAura(config.Aura), BuffedStatTypes: bonusPerStack.GetBuffedStatTypes(), } } diff --git a/sim/core/character.go b/sim/core/character.go index c07542c728..2f1ec34444 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -325,40 +325,13 @@ func (character *Character) CalculateMasteryPoints() float64 { // Apply effects from all equipped core. func (character *Character) applyItemEffects(agent Agent) { - for slot, eq := range character.Equipment { - if applyItemEffect, ok := itemEffects[eq.ID]; ok { - applyItemEffect(agent) - } - - for _, g := range eq.Gems { - if applyGemEffect, ok := itemEffects[g.ID]; ok { - applyGemEffect(agent) - } - } + registeredItemEffects := make(map[int32]bool) + registeredItemEnchantEffects := make(map[int32]bool) - if applyEnchantEffect, ok := enchantEffects[eq.Enchant.EffectID]; ok { - applyEnchantEffect(agent) - } - - if applyWeaponEffect, ok := weaponEffects[eq.Enchant.EffectID]; ok { - applyWeaponEffect(agent, proto.ItemSlot(slot)) - } - } + character.Equipment.applyItemEffects(agent, registeredItemEffects, registeredItemEnchantEffects, true) if character.ItemSwap.IsEnabled() { - for i, item := range character.ItemSwap.unEquippedItems { - if applyItemEffect, ok := itemEffects[item.ID]; ok { - applyItemEffect(agent) - } - - if applyEnchantEffect, ok := enchantEffects[item.Enchant.EffectID]; ok { - applyEnchantEffect(agent) - } - - if applyWeaponEffect, ok := weaponEffects[item.Enchant.EffectID]; ok { - applyWeaponEffect(agent, proto.ItemSlot(i)) - } - } + character.ItemSwap.unEquippedItems.applyItemEffects(agent, registeredItemEffects, registeredItemEnchantEffects, false) } } diff --git a/sim/core/database.go b/sim/core/database.go index f4bd7a0c55..683f069e1d 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -315,6 +315,34 @@ func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec { } } +func (equipment *Equipment) applyItemEffects(agent Agent, registeredItemEffects map[int32]bool, registeredItemEnchantEffects map[int32]bool, includeGemEffects bool) { + for slot, eq := range equipment { + if applyItemEffect, ok := itemEffects[eq.ID]; ok && !registeredItemEffects[eq.ID] { + applyItemEffect(agent) + registeredItemEffects[eq.ID] = true + } + + if includeGemEffects { + for _, g := range eq.Gems { + if applyGemEffect, ok := itemEffects[g.ID]; ok { + applyGemEffect(agent) + } + } + } + + if applyEnchantEffect, ok := enchantEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { + applyEnchantEffect(agent) + registeredItemEnchantEffects[eq.Enchant.EffectID] = true + } + + if applyWeaponEffect, ok := weaponEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { + applyWeaponEffect(agent, proto.ItemSlot(slot)) + registeredItemEnchantEffects[eq.Enchant.EffectID] = true + } + + } +} + // Structs used for looking up items/gems/enchants type EquipmentSpec [proto.ItemSlot_ItemSlotRanged + 1]ItemSpec diff --git a/sim/core/item_effects.go b/sim/core/item_effects.go index 0877ddce06..a85decbed2 100644 --- a/sim/core/item_effects.go +++ b/sim/core/item_effects.go @@ -118,7 +118,8 @@ func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration tim if otherEffects != nil { otherEffects(agent) } - agent.GetCharacter().ItemSwap.RegisterActive(itemID, EligibleSlotsForItem(GetItemByID(itemID), false)) + character := agent.GetCharacter() + character.ItemSwap.RegisterActive(itemID, character.ItemSwap.EligibleSlotsForItem(itemID)) }) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index b20790d2cd..fb24f66c22 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -97,7 +97,9 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } // Helper for handling Item Effects that use the itemID to toggle the aura on and off -func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura) { + slots := swap.EligibleSlotsForItem(itemID) + // fmt.Println("RegisterProc") swap.registerProcInternal(ItemSwapProcConfig{ ItemID: itemID, Aura: aura, @@ -107,6 +109,7 @@ func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura, slots []proto.ItemS // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []proto.ItemSlot) { + // fmt.Println("RegisterEnchantroc") swap.registerProcInternal(ItemSwapProcConfig{ EnchantId: effectID, Aura: aura, @@ -125,16 +128,19 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isItemProc := config.ItemID != 0 isEnchantEffectProc := config.EnchantId != 0 + // fmt.Println("Registered", config.ItemID, config.Slots) + swap.character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { var isItemSlotMatch = false if isItemProc { - isItemSlotMatch = swap.HasEquippedItem(config.ItemID, config.Slots) + isItemSlotMatch = swap.HasItemEquipped(config.ItemID, config.Slots) } else if isEnchantEffectProc { - isItemSlotMatch = swap.HasEquippedEnchant(config.EnchantId, config.Slots) + isItemSlotMatch = swap.HasEnchantEquipped(config.EnchantId, config.Slots) } if isItemSlotMatch { + // fmt.Println("Activating aura", sim.CurrentTime, config.ItemID, slot) if !config.Aura.IsActive() { config.Aura.Activate(sim) // Enchant effects such as Weapon/Back do not trigger an ICD @@ -143,6 +149,7 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { } } } else { + // fmt.Println("Deactivating aura", sim.CurrentTime, config.ItemID, slot) config.Aura.Deactivate(sim) } }) @@ -212,7 +219,7 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) HasEquippedItem(itemID int32, possibleSlots []proto.ItemSlot) bool { +func (swap *ItemSwap) HasItemEquipped(itemID int32, possibleSlots []proto.ItemSlot) bool { for _, slot := range possibleSlots { if swap.character.Equipment[slot].ID == itemID { return true @@ -221,7 +228,7 @@ func (swap *ItemSwap) HasEquippedItem(itemID int32, possibleSlots []proto.ItemSl return false } -func (swap *ItemSwap) HasEquippedEnchant(effectID int32, possibleSlots []proto.ItemSlot) bool { +func (swap *ItemSwap) HasEnchantEquipped(effectID int32, possibleSlots []proto.ItemSlot) bool { for _, slot := range possibleSlots { if swap.character.Equipment[slot].Enchant.EffectID == effectID { return true @@ -230,6 +237,15 @@ func (swap *ItemSwap) HasEquippedEnchant(effectID int32, possibleSlots []proto.I return false } +func (swap *ItemSwap) ItemExistsInMainEquip(itemID int32, possibleSlots []proto.ItemSlot) bool { + for _, slot := range possibleSlots { + if swap.originalEquip[slot].ID == itemID { + return true + } + } + return false +} + func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { for _, item := range swap.swapEquip { if item.ID == itemID { @@ -239,6 +255,14 @@ func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { return false } +func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot { + item := GetItemByID(itemID) + eligibleSlots := EligibleSlotsForItem(item, swap.isFuryWarrior) + return FilterSlice(eligibleSlots, func(slot proto.ItemSlot) bool { + return !swap.IsEnabled() || swap.IsEnabled() && (swap.originalEquip[slot].ID == itemID || swap.swapEquip[slot].ID == itemID) + }) +} + func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { newStats := stats.Stats{} for _, slot := range slots { @@ -273,6 +297,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } if ok, swapStats := swap.swapItem(slot, has2H, isReset); ok { + // fmt.Println("Swapping item", sim.CurrentTime, slot) newStats = newStats.Add(swapStats) weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped From a35633edb3ea1a1c53aca171ee5ebe4123ca3206 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Thu, 9 Jan 2025 17:45:08 -0800 Subject: [PATCH 088/127] Update tests after performance optimizations commit On branch feature/add-trinket-swapping Changes to be committed: modified: sim/death_knight/unholy/TestUnholy.results modified: sim/warrior/fury/TestFury.results --- sim/death_knight/unholy/TestUnholy.results | 2 +- sim/warrior/fury/TestFury.results | 768 ++++++++++----------- 2 files changed, 385 insertions(+), 385 deletions(-) diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index e3462ae22a..281932b6f3 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -304,7 +304,7 @@ dps_results: { value: { dps: 43120.17978 tps: 32013.58168 - hps: 601.25406 + hps: 601.25407 } } dps_results: { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 858f682faa..f29245d517 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2169,1345 +2169,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98887.81989 - tps: 107054.24593 + dps: 98888.90073 + tps: 107055.32677 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38810.7966 - tps: 32814.34956 + dps: 38814.29564 + tps: 32817.8486 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51355.34743 - tps: 42382.05966 + dps: 51358.13863 + tps: 42384.85085 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.22073 - tps: 73569.93172 + dps: 67110.82154 + tps: 73570.53254 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24114.19778 - tps: 19933.16614 + dps: 24117.45036 + tps: 19936.41873 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27982.35164 - tps: 22019.91402 + dps: 27984.11105 + tps: 22021.67343 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99105.53322 - tps: 107290.96447 + dps: 99106.61406 + tps: 107292.04531 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38893.36603 - tps: 32887.90408 + dps: 38896.86507 + tps: 32891.40312 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51722.32517 - tps: 42710.82967 + dps: 51725.11636 + tps: 42713.62087 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67235.05694 - tps: 73707.6747 + dps: 67235.65776 + tps: 73708.27552 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24154.57024 - tps: 19967.47425 + dps: 24157.82282 + tps: 19970.72684 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28164.23729 - tps: 22176.23139 + dps: 28165.99671 + tps: 22177.99081 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98887.81989 - tps: 107054.24593 + dps: 98888.90073 + tps: 107055.32677 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38266.35589 - tps: 31829.58661 + dps: 38271.40999 + tps: 31834.64071 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50206.02497 - tps: 41342.12494 + dps: 50209.93766 + tps: 41346.03763 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.22073 - tps: 73569.93172 + dps: 67110.82154 + tps: 73570.53254 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23748.00265 - tps: 19272.88466 + dps: 23750.68626 + tps: 19275.56827 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28006.36719 - tps: 21769.96818 + dps: 28009.91954 + tps: 21773.52053 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99105.53322 - tps: 107290.96447 + dps: 99106.61406 + tps: 107292.04531 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38348.74075 - tps: 31902.3635 + dps: 38353.79485 + tps: 31907.4176 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50567.903 - tps: 41664.28923 + dps: 50571.81569 + tps: 41668.20191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67235.05694 - tps: 73707.6747 + dps: 67235.65776 + tps: 73708.27552 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23788.20355 - tps: 19306.83166 + dps: 23790.88716 + tps: 19309.51527 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28187.64125 - tps: 21924.38967 + dps: 28191.1936 + tps: 21927.94203 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.06325 - tps: 89485.65167 + dps: 82060.79741 + tps: 89486.38582 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31262.65923 - tps: 27045.0494 + dps: 31267.80304 + tps: 27050.19321 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41611.54503 - tps: 35316.91885 + dps: 41613.64642 + tps: 35319.02024 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55658.57676 - tps: 61517.35993 + dps: 55659.17795 + tps: 61517.96113 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19268.75451 - tps: 16475.71182 + dps: 19270.91275 + tps: 16477.87006 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22471.24113 - tps: 18056.17924 + dps: 22473.90264 + tps: 18058.84076 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82241.69132 - tps: 89684.11505 + dps: 82242.42548 + tps: 89684.84921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31330.40352 - tps: 27106.79128 + dps: 31335.54733 + tps: 27111.93509 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41910.35398 - tps: 35590.5811 + dps: 41912.45536 + tps: 35592.68248 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55761.63647 - tps: 61631.94824 + dps: 55762.23766 + tps: 61632.54943 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19301.4294 - tps: 16504.22387 + dps: 19303.58764 + tps: 16506.38211 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22615.21353 - tps: 18182.69341 + dps: 22617.87505 + tps: 18185.35493 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.06325 - tps: 89485.65167 + dps: 82060.79741 + tps: 89486.38582 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31087.97165 - tps: 26279.56785 + dps: 31091.7174 + tps: 26283.3136 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41118.47499 - tps: 34374.89787 + dps: 41119.56849 + tps: 34375.99137 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55658.57676 - tps: 61517.35993 + dps: 55659.17795 + tps: 61517.96113 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19269.07237 - tps: 15988.07656 + dps: 19271.82208 + tps: 15990.82627 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22380.39051 - tps: 17703.80634 + dps: 22382.54176 + tps: 17705.95759 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82241.69132 - tps: 89684.11505 + dps: 82242.42548 + tps: 89684.84921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31156.00352 - tps: 26340.76971 + dps: 31159.74927 + tps: 26344.51546 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41412.50291 - tps: 34640.5138 + dps: 41413.59642 + tps: 34641.60731 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55761.63647 - tps: 61631.94824 + dps: 55762.23766 + tps: 61632.54943 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19301.48946 - tps: 16015.98529 + dps: 19304.23917 + tps: 16018.735 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22524.3463 - tps: 17828.3763 + dps: 22526.49756 + tps: 17830.52755 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149813.74911 - tps: 164678.90378 + dps: 149815.38398 + tps: 164680.53866 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49774.78201 - tps: 40921.85154 + dps: 49787.21742 + tps: 40934.28696 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65021.43894 - tps: 52392.72805 + dps: 65035.14411 + tps: 52406.43323 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105701.41887 - tps: 117796.13886 + dps: 105702.97422 + tps: 117797.69421 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31934.52639 - tps: 25492.70807 + dps: 31941.76399 + tps: 25499.94568 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36715.65575 - tps: 27909.36768 + dps: 36711.92915 + tps: 27905.64109 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150141.41173 - tps: 165039.02046 + dps: 150143.0466 + tps: 165040.65533 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49882.45494 - tps: 41013.62475 + dps: 49894.89035 + tps: 41026.06017 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65487.54969 - tps: 52792.26071 + dps: 65501.25487 + tps: 52805.96588 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105898.88745 - tps: 118016.48332 + dps: 105900.4428 + tps: 118018.03867 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31989.66908 - tps: 25536.86901 + dps: 31996.90669 + tps: 25544.10661 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36958.42174 - tps: 28104.59281 + dps: 36954.69515 + tps: 28100.86622 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149813.74911 - tps: 164678.90378 + dps: 149815.38398 + tps: 164680.53866 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49870.87292 - tps: 40011.3371 + dps: 49885.48595 + tps: 40025.95013 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64542.50847 - tps: 51351.43837 + dps: 64552.24743 + tps: 51361.17732 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105701.41887 - tps: 117796.13886 + dps: 105702.97422 + tps: 117797.69421 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31947.42553 - tps: 24921.22162 + dps: 31953.42657 + tps: 24927.22266 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36549.52175 - tps: 27079.59927 + dps: 36547.55694 + tps: 27077.63446 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150141.41173 - tps: 165039.02046 + dps: 150143.0466 + tps: 165040.65533 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49977.36774 - tps: 40101.21522 + dps: 49991.98078 + tps: 40115.82826 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65005.00072 - tps: 51744.66185 + dps: 65014.73967 + tps: 51754.4008 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105898.88745 - tps: 118016.48332 + dps: 105900.4428 + tps: 118018.03867 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32001.97344 - tps: 24963.94452 + dps: 32007.97448 + tps: 24969.94557 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36789.00919 - tps: 27269.1941 + dps: 36787.04438 + tps: 27267.22929 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123158.1685 - tps: 136446.8879 + dps: 123160.06666 + tps: 136448.78606 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39882.63146 - tps: 33789.84039 + dps: 39891.04195 + tps: 33798.25088 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52257.9849 - tps: 43512.22396 + dps: 52265.77412 + tps: 43520.01318 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87595.74306 - tps: 98330.3153 + dps: 87597.68954 + tps: 98332.26178 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25232.94724 - tps: 20923.97327 + dps: 25238.89348 + tps: 20929.91951 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29589.44215 - tps: 23494.1087 + dps: 29584.24658 + tps: 23488.91313 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123427.596 - tps: 136744.73211 + dps: 123429.49416 + tps: 136746.63027 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39967.97246 - tps: 33864.13845 + dps: 39976.38295 + tps: 33872.54893 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52636.84672 - tps: 43845.19959 + dps: 52644.63594 + tps: 43852.98881 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87759.86981 - tps: 98515.05036 + dps: 87761.81629 + tps: 98516.99683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25276.97208 - tps: 20960.48438 + dps: 25282.91832 + tps: 20966.43062 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29784.34138 - tps: 23657.2324 + dps: 29779.14582 + tps: 23652.03683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123158.1685 - tps: 136446.8879 + dps: 123160.06666 + tps: 136448.78606 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40222.88907 - tps: 32857.8519 + dps: 40231.6731 + tps: 32866.63592 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52523.43929 - tps: 42398.48408 + dps: 52528.70063 + tps: 42403.74542 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87595.74306 - tps: 98330.3153 + dps: 87597.68954 + tps: 98332.26178 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25558.37236 - tps: 20492.7556 + dps: 25564.05137 + tps: 20498.4346 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29811.93433 - tps: 22859.64569 + dps: 29809.41823 + tps: 22857.12959 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123427.596 - tps: 136744.73211 + dps: 123429.49416 + tps: 136746.63027 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40308.10796 - tps: 32930.84096 + dps: 40316.89198 + tps: 32939.62499 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52903.18984 - tps: 42726.40679 + dps: 52908.45118 + tps: 42731.66812 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87759.86981 - tps: 98515.05036 + dps: 87761.81629 + tps: 98516.99683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25602.62164 - tps: 20528.63072 + dps: 25608.30064 + tps: 20534.30973 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30005.54268 - tps: 23017.89168 + dps: 30003.02659 + tps: 23015.37558 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99224.08409 - tps: 107461.26842 + dps: 99225.04115 + tps: 107462.22548 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38770.44353 - tps: 32509.62022 + dps: 38775.04658 + tps: 32514.22327 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50472.40298 - tps: 41540.55502 + dps: 50477.1596 + tps: 41545.31165 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68091.92113 - tps: 74708.53953 + dps: 68092.74471 + tps: 74709.3631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24076.92545 - tps: 19883.15222 + dps: 24079.57245 + tps: 19885.79922 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27647.22019 - tps: 21773.65029 + dps: 27649.9399 + tps: 21776.37001 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99437.84531 - tps: 107694.07724 + dps: 99438.80237 + tps: 107695.0343 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38850.23709 - tps: 32580.60607 + dps: 38854.84015 + tps: 32585.20912 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50827.95811 - tps: 41858.18646 + dps: 50832.71473 + tps: 41862.94309 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68212.80487 - tps: 74842.02394 + dps: 68213.62845 + tps: 74842.84752 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24115.87964 - tps: 19916.2661 + dps: 24118.52664 + tps: 19918.9131 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27823.43728 - tps: 21925.29961 + dps: 27826.157 + tps: 21928.01933 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99224.08409 - tps: 107461.26842 + dps: 99225.04115 + tps: 107462.22548 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38091.89919 - tps: 31505.11509 + dps: 38096.47091 + tps: 31509.68681 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49708.04665 - tps: 40744.72082 + dps: 49712.97316 + tps: 40749.64733 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68091.92113 - tps: 74708.53953 + dps: 68092.74471 + tps: 74709.3631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23931.70297 - tps: 19428.52595 + dps: 23933.52347 + tps: 19430.34646 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26901.66593 - tps: 20771.16486 + dps: 26902.7494 + tps: 20772.24833 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99437.84531 - tps: 107694.07724 + dps: 99438.80237 + tps: 107695.0343 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38170.47938 - tps: 31574.39966 + dps: 38175.0511 + tps: 31578.97138 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50056.31232 - tps: 41053.27252 + dps: 50061.23882 + tps: 41058.19902 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68212.80487 - tps: 74842.02394 + dps: 68213.62845 + tps: 74842.84752 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23970.0548 - tps: 19460.72306 + dps: 23971.87531 + tps: 19462.54357 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27072.66398 - tps: 20915.73959 + dps: 27073.74745 + tps: 20916.82306 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82579.71692 - tps: 89897.81121 + dps: 82580.97143 + tps: 89899.06572 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31176.0995 - tps: 26849.12803 + dps: 31179.40778 + tps: 26852.43631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40829.71169 - tps: 34507.11576 + dps: 40832.39118 + tps: 34509.79525 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55858.67331 - tps: 61795.25036 + dps: 55859.41566 + tps: 61795.99272 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19508.61716 - tps: 16651.07871 + dps: 19510.94075 + tps: 16653.4023 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22407.5844 - tps: 17939.76188 + dps: 22409.10013 + tps: 17941.2776 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82756.666 - tps: 90091.51882 + dps: 82757.92051 + tps: 90092.77333 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31240.66679 - tps: 26907.7608 + dps: 31243.97506 + tps: 26911.06907 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41118.52952 - tps: 34771.22726 + dps: 41121.20901 + tps: 34773.90675 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55958.90924 - tps: 61906.75915 + dps: 55959.65159 + tps: 61907.50151 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19540.31688 - tps: 16678.74651 + dps: 19542.64048 + tps: 16681.0701 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22548.5223 - tps: 18063.88557 + dps: 22550.03802 + tps: 18065.4013 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82579.71692 - tps: 89897.81121 + dps: 82580.97143 + tps: 89899.06572 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30867.69781 - tps: 26003.5782 + dps: 30870.56727 + tps: 26006.44766 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40920.31553 - tps: 34267.05495 + dps: 40922.78571 + tps: 34269.52512 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55858.67331 - tps: 61795.25036 + dps: 55859.41566 + tps: 61795.99272 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19427.64913 - tps: 16035.30727 + dps: 19429.90339 + tps: 16037.56153 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22240.34083 - tps: 17477.74027 + dps: 22241.54687 + tps: 17478.94631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82756.666 - tps: 90091.51882 + dps: 82757.92051 + tps: 90092.77333 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30933.23825 - tps: 26062.40212 + dps: 30936.10771 + tps: 26065.27158 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41207.47354 - tps: 34526.06248 + dps: 41209.94372 + tps: 34528.53266 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55958.90924 - tps: 61906.75915 + dps: 55959.65159 + tps: 61907.50151 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19458.73691 - tps: 16061.8308 + dps: 19460.99118 + tps: 16064.08507 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22380.05906 - tps: 17598.93269 + dps: 22381.2651 + tps: 17600.13872 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147775.83879 - tps: 162640.6411 + dps: 147777.7612 + tps: 162642.56352 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49280.29294 - tps: 40313.20349 + dps: 49291.41398 + tps: 40324.32453 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64065.69295 - tps: 51286.63528 + dps: 64075.8898 + tps: 51296.83212 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105909.54524 - tps: 117934.76794 + dps: 105911.2622 + tps: 117936.4849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31943.60646 - tps: 25530.60336 + dps: 31951.67202 + tps: 25538.66892 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36262.17811 - tps: 27669.44428 + dps: 36266.95495 + tps: 27674.22113 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148092.42485 - tps: 162989.58637 + dps: 148094.34726 + tps: 162991.50879 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49380.89775 - tps: 40397.69904 + dps: 49392.01879 + tps: 40408.82008 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64513.50772 - tps: 51666.27822 + dps: 64523.70456 + tps: 51676.47506 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106104.17476 - tps: 118152.35689 + dps: 106105.89173 + tps: 118154.07386 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31997.21747 - tps: 25573.26421 + dps: 32005.28304 + tps: 25581.32978 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36496.66512 - tps: 27857.63924 + dps: 36501.44196 + tps: 27862.41609 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147775.83879 - tps: 162640.6411 + dps: 147777.7612 + tps: 162642.56352 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49704.23188 - tps: 39685.675 + dps: 49717.31127 + tps: 39698.75439 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63611.092 - tps: 49926.32656 + dps: 63623.37169 + tps: 49938.60625 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105909.54524 - tps: 117934.76794 + dps: 105911.2622 + tps: 117936.4849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32155.63178 - tps: 24997.81836 + dps: 32162.07441 + tps: 25004.26099 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36298.80706 - tps: 27032.87484 + dps: 36305.47485 + tps: 27039.54263 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148092.42485 - tps: 162989.58637 + dps: 148094.34726 + tps: 162991.50879 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49805.03672 - tps: 39769.41848 + dps: 49818.11611 + tps: 39782.49787 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64059.27433 - tps: 50301.67693 + dps: 64071.55402 + tps: 50313.95662 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106104.17476 - tps: 118152.35689 + dps: 106105.89173 + tps: 118154.07386 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32208.93361 - tps: 25039.53553 + dps: 32215.37624 + tps: 25045.97816 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36531.20247 - tps: 27216.90437 + dps: 36537.87027 + tps: 27223.57216 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123451.25268 - tps: 136830.95365 + dps: 123453.58534 + tps: 136833.28631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39355.76581 - tps: 33210.76338 + dps: 39366.42523 + tps: 33221.42281 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51931.65543 - tps: 43125.25178 + dps: 51939.77411 + tps: 43133.37046 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87933.11305 - tps: 98731.62948 + dps: 87934.92963 + tps: 98733.44606 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25090.47009 - tps: 20669.6011 + dps: 25096.5741 + tps: 20675.70511 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29074.38592 - tps: 22540.6554 + dps: 29079.83188 + tps: 22546.10137 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123713.78897 - tps: 137121.67416 + dps: 123716.12163 + tps: 137124.00682 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39436.83424 - tps: 33280.89407 + dps: 39447.49366 + tps: 33291.5535 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52302.11532 - tps: 43450.66748 + dps: 52310.23401 + tps: 43458.78616 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88093.93391 - tps: 98912.70701 + dps: 88095.75049 + tps: 98914.52359 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25134.02893 - tps: 20705.19503 + dps: 25140.13293 + tps: 20711.29904 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29261.64265 - tps: 22694.36023 + dps: 29267.08862 + tps: 22699.8062 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123451.25268 - tps: 136830.95365 + dps: 123453.58534 + tps: 136833.28631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39982.38366 - tps: 32742.68646 + dps: 39992.07736 + tps: 32752.38016 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51279.42587 - tps: 41441.81326 + dps: 51284.50141 + tps: 41446.8888 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87933.11305 - tps: 98731.62948 + dps: 87934.92963 + tps: 98733.44606 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25823.77666 - tps: 20609.08679 + dps: 25829.50361 + tps: 20614.81374 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28931.9428 - tps: 21833.55648 + dps: 28936.01012 + tps: 21837.62379 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123713.78897 - tps: 137121.67416 + dps: 123716.12163 + tps: 137124.00682 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40063.6205 - tps: 32811.63288 + dps: 40073.3142 + tps: 32821.32658 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51637.2913 - tps: 41749.03785 + dps: 51642.36685 + tps: 41754.1134 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88093.93391 - tps: 98912.70701 + dps: 88095.75049 + tps: 98914.52359 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25866.82628 - tps: 20643.60672 + dps: 25872.55323 + tps: 20649.33367 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29118.53665 - tps: 21984.03245 + dps: 29122.60397 + tps: 21988.09976 } } dps_results: { From 92581380f6fa2277837abd0c026dbe4cf1735ece Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 09:39:27 +0100 Subject: [PATCH 089/127] Added Elemental Item Swap presets --- sim/core/item_swaps.go | 7 ---- ui/shaman/elemental/apls/aoe.apl.json | 16 +++++++- ui/shaman/elemental/apls/default.apl.json | 40 ++++++++++++------- .../gear_sets/p3_item_swap.gear.json | 27 +++++++++++++ .../elemental/gear_sets/p4.default.gear.json | 21 ++++++++++ .../gear_sets/p4_item_swap.gear.json | 40 +++++++++++++++++++ ui/shaman/elemental/presets.ts | 7 ++++ ui/shaman/elemental/sim.ts | 2 + 8 files changed, 137 insertions(+), 23 deletions(-) create mode 100644 ui/shaman/elemental/gear_sets/p3_item_swap.gear.json create mode 100644 ui/shaman/elemental/gear_sets/p4.default.gear.json create mode 100644 ui/shaman/elemental/gear_sets/p4_item_swap.gear.json diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index fb24f66c22..fdfa196a91 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -99,7 +99,6 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal // Helper for handling Item Effects that use the itemID to toggle the aura on and off func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura) { slots := swap.EligibleSlotsForItem(itemID) - // fmt.Println("RegisterProc") swap.registerProcInternal(ItemSwapProcConfig{ ItemID: itemID, Aura: aura, @@ -109,7 +108,6 @@ func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura) { // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []proto.ItemSlot) { - // fmt.Println("RegisterEnchantroc") swap.registerProcInternal(ItemSwapProcConfig{ EnchantId: effectID, Aura: aura, @@ -128,8 +126,6 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isItemProc := config.ItemID != 0 isEnchantEffectProc := config.EnchantId != 0 - // fmt.Println("Registered", config.ItemID, config.Slots) - swap.character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { var isItemSlotMatch = false @@ -140,7 +136,6 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { } if isItemSlotMatch { - // fmt.Println("Activating aura", sim.CurrentTime, config.ItemID, slot) if !config.Aura.IsActive() { config.Aura.Activate(sim) // Enchant effects such as Weapon/Back do not trigger an ICD @@ -149,7 +144,6 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { } } } else { - // fmt.Println("Deactivating aura", sim.CurrentTime, config.ItemID, slot) config.Aura.Deactivate(sim) } }) @@ -297,7 +291,6 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } if ok, swapStats := swap.swapItem(slot, has2H, isReset); ok { - // fmt.Println("Swapping item", sim.CurrentTime, slot) newStats = newStats.Add(swapStats) weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped diff --git a/ui/shaman/elemental/apls/aoe.apl.json b/ui/shaman/elemental/apls/aoe.apl.json index fdd99a5257..92b97ce50d 100644 --- a/ui/shaman/elemental/apls/aoe.apl.json +++ b/ui/shaman/elemental/apls/aoe.apl.json @@ -1,8 +1,20 @@ { "type": "TypeAPL", "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, + {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109844}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":107804}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109842}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109805}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":107984}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":421}}},"doAtValue":{"const":{"val":"-1s"}}} ], "priorityList": [ diff --git a/ui/shaman/elemental/apls/default.apl.json b/ui/shaman/elemental/apls/default.apl.json index 5b2c99317c..ed1feab1cf 100644 --- a/ui/shaman/elemental/apls/default.apl.json +++ b/ui/shaman/elemental/apls/default.apl.json @@ -1,19 +1,31 @@ { "type": "TypeAPL", - "prepullActions": [ - {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":403}}},"doAtValue":{"const":{"val":"-1s"}}} + "prepullActions": [ + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, + {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109844}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":107804}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109842}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109805}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":107984}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"castSpell":{"spellId":{"spellId":403}}},"doAtValue":{"const":{"val":"-1s"}}} ], "priorityList": [ - {"action":{"autocastOtherCooldowns":{}}}, - {"action":{"castSpell":{"spellId":{"spellId":2825}}}}, - {"action":{"condition":{"or":{"vals":[{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"math":{"op":"OpAdd","lhs":{"currentTime":{}},"rhs":{"remainingTime":{}}}},"rhs":{"math":{"op":"OpAdd","lhs":{"shamanFireElementalDuration":{}},"rhs":{"const":{"val":"20s"}}}}}},{"auraIsActive":{"auraId":{"spellId":64701}}}]}},{"and":{"vals":[{"or":{"vals":[{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numEquippedStatProcTrinkets":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"0"}}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":2894}}},{"or":{"vals":[{"shamanCanSnapshotStrongerFireElemental":{}},{"cmp":{"op":"OpLe","lhs":{"totemRemainingTime":{"totemType":"Fire"}},"rhs":{"const":{"val":"30s"}}}}]}}]}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, - {"action":{"condition":{"and":{"vals":[{"and":{"vals":[{"or":{"vals":[{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numEquippedStatProcTrinkets":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"0"}}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":2894}}},{"or":{"vals":[{"shamanCanSnapshotStrongerFireElemental":{}},{"cmp":{"op":"OpLe","lhs":{"totemRemainingTime":{"totemType":"Fire"}},"rhs":{"const":{"val":"30s"}}}}]}}]}},{"or":{"vals":[{"cmp":{"op":"OpGe","lhs":{"math":{"op":"OpAdd","lhs":{"currentTime":{}},"rhs":{"remainingTime":{}}}},"rhs":{"math":{"op":"OpAdd","lhs":{"shamanFireElementalDuration":{}},"rhs":{"const":{"val":"20s"}}}}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"30s"}}}}]}}]}},"castSpell":{"spellId":{"spellId":66843}}}}, - {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":2894}}}}},{"not":{"val":{"dotIsActive":{"spellId":{"spellId":3599}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15"}}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"20"}}}}]}},"castSpell":{"spellId":{"spellId":3599}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGt","lhs":{"dotRemainingTime":{"spellId":{"spellId":8050,"tag":1}}},"rhs":{"const":{"val":"2"}}}},{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":51505}}}}, - {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}},"multidot":{"spellId":{"spellId":8050},"maxDots":2,"maxOverlap":{"const":{"val":"3"}}}}}, - {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":324}}},"rhs":{"const":{"val":"9"}}}},{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"dotRemainingTime":{"spellId":{"spellId":8050}}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":8042}}}}, - {"action":{"castSpell":{"spellId":{"spellId":403}}}} + {"action":{"autocastOtherCooldowns":{}}}, + {"action":{"castSpell":{"spellId":{"spellId":2825}}}}, + {"action":{"condition":{"or":{"vals":[{"and":{"vals":[{"cmp":{"op":"OpLt","lhs":{"math":{"op":"OpAdd","lhs":{"currentTime":{}},"rhs":{"remainingTime":{}}}},"rhs":{"math":{"op":"OpAdd","lhs":{"shamanFireElementalDuration":{}},"rhs":{"const":{"val":"20s"}}}}}},{"auraIsActive":{"auraId":{"spellId":64701}}}]}},{"and":{"vals":[{"or":{"vals":[{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numEquippedStatProcTrinkets":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"0"}}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":2894}}},{"or":{"vals":[{"shamanCanSnapshotStrongerFireElemental":{}},{"cmp":{"op":"OpLe","lhs":{"totemRemainingTime":{"totemType":"Fire"}},"rhs":{"const":{"val":"30s"}}}}]}}]}}]}},"castSpell":{"spellId":{"itemId":58091}}}}, + {"action":{"condition":{"and":{"vals":[{"and":{"vals":[{"or":{"vals":[{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"anyTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"or":{"vals":[{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"cmp":{"op":"OpLe","lhs":{"trinketProcsMinRemainingTime":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"1.7s"}}}}]}},{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"numEquippedStatProcTrinkets":{"statType1":3,"statType2":14,"statType3":-1}},"rhs":{"const":{"val":"0"}}}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}},{"and":{"vals":[{"allTrinketStatProcsActive":{"statType1":3,"statType2":14,"statType3":-1}},{"auraIsActive":{"auraId":{"spellId":75170}}},{"auraIsActive":{"auraId":{"spellId":74241}}}]}}]}},{"spellCanCast":{"spellId":{"spellId":2894}}},{"or":{"vals":[{"shamanCanSnapshotStrongerFireElemental":{}},{"cmp":{"op":"OpLe","lhs":{"totemRemainingTime":{"totemType":"Fire"}},"rhs":{"const":{"val":"30s"}}}}]}}]}},{"or":{"vals":[{"cmp":{"op":"OpGe","lhs":{"math":{"op":"OpAdd","lhs":{"currentTime":{}},"rhs":{"remainingTime":{}}}},"rhs":{"math":{"op":"OpAdd","lhs":{"shamanFireElementalDuration":{}},"rhs":{"const":{"val":"20s"}}}}}},{"cmp":{"op":"OpLe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"30s"}}}}]}}]}},"castSpell":{"spellId":{"spellId":66843}}}}, + {"action":{"condition":{"and":{"vals":[{"not":{"val":{"auraIsActive":{"auraId":{"spellId":2894}}}}},{"not":{"val":{"dotIsActive":{"spellId":{"spellId":3599}}}}},{"cmp":{"op":"OpGt","lhs":{"remainingTime":{}},"rhs":{"const":{"val":"15"}}}},{"cmp":{"op":"OpGe","lhs":{"currentTime":{}},"rhs":{"const":{"val":"20"}}}}]}},"castSpell":{"spellId":{"spellId":3599}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpGt","lhs":{"dotRemainingTime":{"spellId":{"spellId":8050,"tag":1}}},"rhs":{"const":{"val":"2"}}}},{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}}]}},"castSpell":{"spellId":{"spellId":51505}}}}, + {"action":{"condition":{"cmp":{"op":"OpLe","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"2"}}}},"multidot":{"spellId":{"spellId":8050},"maxDots":2,"maxOverlap":{"const":{"val":"3"}}}}}, + {"action":{"condition":{"and":{"vals":[{"cmp":{"op":"OpEq","lhs":{"auraNumStacks":{"auraId":{"spellId":324}}},"rhs":{"const":{"val":"9"}}}},{"cmp":{"op":"OpEq","lhs":{"numberTargets":{}},"rhs":{"const":{"val":"1"}}}},{"cmp":{"op":"OpGe","lhs":{"dotRemainingTime":{"spellId":{"spellId":8050}}},"rhs":{"const":{"val":"3"}}}}]}},"castSpell":{"spellId":{"spellId":8042}}}}, + {"action":{"castSpell":{"spellId":{"spellId":403}}}} ] - } \ No newline at end of file + } diff --git a/ui/shaman/elemental/gear_sets/p3_item_swap.gear.json b/ui/shaman/elemental/gear_sets/p3_item_swap.gear.json new file mode 100644 index 0000000000..2bf1d4a630 --- /dev/null +++ b/ui/shaman/elemental/gear_sets/p3_item_swap.gear.json @@ -0,0 +1,27 @@ +{ + "items": [ + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + { + "id": 62467 + }, + { + "id": 71797, + "enchant": 4083, + "gems": [0] + }, + {}, + {} + ] +} diff --git a/ui/shaman/elemental/gear_sets/p4.default.gear.json b/ui/shaman/elemental/gear_sets/p4.default.gear.json new file mode 100644 index 0000000000..d8ab3a0618 --- /dev/null +++ b/ui/shaman/elemental/gear_sets/p4.default.gear.json @@ -0,0 +1,21 @@ +{ + "items": [ + { "id": 78685, "enchant": 4207, "gems": [68780, 71881] }, + { "id": 78364, "reforging": 119 }, + { "id": 78741, "enchant": 4200, "gems": [71881, 71881], "reforging": 119 }, + { "id": 77096, "enchant": 4115, "gems": [71881], "reforging": 119 }, + { "id": 78723, "enchant": 4102, "gems": [71881, 71881, 71881], "reforging": 119 }, + { "id": 78393, "enchant": 4257, "gems": [71881, 0], "reforging": 117 }, + { "id": 78666, "enchant": 4068, "gems": [71881, 0], "reforging": 148 }, + { "id": 78463, "gems": [71881, 71881, 71881], "reforging": 119 }, + { "id": 78718, "enchant": 4114, "gems": [52207, 52207, 52208], "reforging": 119 }, + { "id": 78405, "enchant": 4069, "gems": [71881, 71881], "reforging": 117 }, + { "id": 78491, "gems": [71881], "reforging": 119 }, + { "id": 78419, "gems": [71881] }, + { "id": 77995 }, + { "id": 78000 }, + { "id": 71086, "enchant": 4097, "gems": [71881, 71881, 71881], "reforging": 140 }, + {}, + { "id": 77083, "gems": [71881], "reforging": 117 } + ] +} diff --git a/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json b/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json new file mode 100644 index 0000000000..da17c12c84 --- /dev/null +++ b/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json @@ -0,0 +1,40 @@ +{ + "items": [ + { + "id": 78691, + "gems": [0, 0] + }, + {}, + { + "id": 78739, + "gems": [0, 0] + }, + {}, + { + "id": 78725, + "gems": [0, 0, 0] + }, + {}, + {}, + {}, + { + "id": 78718, + "gems": [0, 0, 0] + }, + {}, + {}, + {}, + { + "id": 62467 + }, + { + "id": 56339 + }, + { + "id": 78477, + "enchant": 4083 + }, + {}, + {} + ] +} diff --git a/ui/shaman/elemental/presets.ts b/ui/shaman/elemental/presets.ts index 1b0d863c51..ce20137975 100644 --- a/ui/shaman/elemental/presets.ts +++ b/ui/shaman/elemental/presets.ts @@ -20,6 +20,9 @@ import AoEApl from './apls/aoe.apl.json'; import DefaultApl from './apls/default.apl.json'; import P1Gear from './gear_sets/p1.gear.json'; import P3GearDefault from './gear_sets/p3.default.gear.json'; +import ItemSwapP3 from './gear_sets/p3_item_swap.gear.json'; +import P4GearDefault from './gear_sets/p4.default.gear.json'; +import ItemSwapP4 from './gear_sets/p4_item_swap.gear.json'; import PreraidGear from './gear_sets/preraid.gear.json'; // Preset options for this spec. @@ -29,6 +32,10 @@ import PreraidGear from './gear_sets/preraid.gear.json'; export const PRERAID_PRESET = PresetUtils.makePresetGear('Pre-raid', PreraidGear); export const P1_PRESET = PresetUtils.makePresetGear('P1 - Default', P1Gear); export const P3_PRESET = PresetUtils.makePresetGear('P3 - Default', P3GearDefault); +export const P4_PRESET = PresetUtils.makePresetGear('P4 - WIP', P4GearDefault); + +export const P3_ITEM_SWAP = PresetUtils.makePresetItemSwapGear('P3 - Item Swap', ItemSwapP3); +export const P4_ITEM_SWAP = PresetUtils.makePresetItemSwapGear('P4 - Item Swap', ItemSwapP4); export const ROTATION_PRESET_DEFAULT = PresetUtils.makePresetAPLRotation('Default', DefaultApl); export const ROTATION_PRESET_AOE = PresetUtils.makePresetAPLRotation('AoE', AoEApl); diff --git a/ui/shaman/elemental/sim.ts b/ui/shaman/elemental/sim.ts index 5602569265..0d3a5884bb 100644 --- a/ui/shaman/elemental/sim.ts +++ b/ui/shaman/elemental/sim.ts @@ -142,6 +142,8 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecElementalShaman, { rotations: [Presets.ROTATION_PRESET_DEFAULT, Presets.ROTATION_PRESET_AOE], // Preset gear configurations that the user can quickly select. gear: [Presets.PRERAID_PRESET, Presets.P1_PRESET, Presets.P3_PRESET], + itemSwaps: [Presets.P3_ITEM_SWAP, Presets.P4_ITEM_SWAP], + builds: [Presets.P3_PRESET_BUILD_DEFAULT, Presets.P3_PRESET_BUILD_CLEAVE], }, From c48061a58ae79db2dcab5effa2ff214c1c091e7b Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 09:40:56 +0100 Subject: [PATCH 090/127] Update tests --- sim/shaman/elemental/TestElemental.results | 766 ++++++++++---------- sim/warrior/fury/TestFury.results | 768 ++++++++++----------- 2 files changed, 767 insertions(+), 767 deletions(-) diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index 4d6491df89..66d96cfc45 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -39,84 +39,84 @@ dps_results: { key: "TestElemental-AllItems-AgileShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1838.86864 + tps: 1839.71704 } } dps_results: { key: "TestElemental-AllItems-AgonyandTorment" value: { dps: 27598.73356 - tps: 1680.3836 + tps: 1681.29574 } } dps_results: { key: "TestElemental-AllItems-Althor'sAbacus-50366" value: { dps: 40435.01561 - tps: 630.81048 + tps: 631.72669 } } dps_results: { key: "TestElemental-AllItems-AncientPetrifiedSeed-69001" value: { dps: 40275.64501 - tps: 635.60037 + tps: 636.01927 } } dps_results: { key: "TestElemental-AllItems-Anhuur'sHymnal-55889" value: { dps: 40283.64156 - tps: 629.74953 + tps: 630.189 } } dps_results: { key: "TestElemental-AllItems-Anhuur'sHymnal-56407" value: { dps: 40594.14068 - tps: 625.53981 + tps: 626.44841 } } dps_results: { key: "TestElemental-AllItems-ApparatusofKhaz'goroth-68972" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ApparatusofKhaz'goroth-69113" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ArrowofTime-72897" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-AustereShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1824.48069 + tps: 1825.32909 } } dps_results: { key: "TestElemental-AllItems-BattlegearoftheRagingElements" value: { dps: 28974.9924 - tps: 1622.70701 + tps: 1623.40576 } } dps_results: { key: "TestElemental-AllItems-BaubleofTrueBlood-50726" value: { dps: 39613.7366 - tps: 622.1178 + tps: 622.89621 hps: 100.80938 } } @@ -124,1295 +124,1295 @@ dps_results: { key: "TestElemental-AllItems-BedrockTalisman-58182" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-BellofEnragingResonance-59326" value: { dps: 41063.68737 - tps: 622.57703 + tps: 623.43839 } } dps_results: { key: "TestElemental-AllItems-BellofEnragingResonance-65053" value: { dps: 41243.30175 - tps: 622.41156 + tps: 623.27293 } } dps_results: { key: "TestElemental-AllItems-BindingPromise-67037" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-BlackBruise-50692" value: { dps: 27039.90883 - tps: 1638.68829 + tps: 1639.48148 } } dps_results: { key: "TestElemental-AllItems-Blood-SoakedAleMug-63843" value: { dps: 39928.70642 - tps: 631.46903 + tps: 631.93276 } } dps_results: { key: "TestElemental-AllItems-BloodofIsiset-55995" value: { dps: 39973.61736 - tps: 637.25142 + tps: 637.92011 } } dps_results: { key: "TestElemental-AllItems-BloodofIsiset-56414" value: { dps: 39982.80674 - tps: 639.36289 + tps: 640.03158 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { dps: 39686.38116 - tps: 620.27335 + tps: 621.64345 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { dps: 40876.01224 - tps: 620.23379 + tps: 621.6039 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { dps: 40098.2307 - tps: 623.72555 + tps: 624.58692 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { dps: 39753.79389 - tps: 623.89176 + tps: 624.651 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { dps: 40394.27854 - tps: 626.12424 + tps: 626.59891 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-77210" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-77982" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-78002" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-BottledLightning-66879" value: { dps: 40512.1665 - tps: 626.9297 + tps: 628.37633 } } dps_results: { key: "TestElemental-AllItems-BottledWishes-77114" value: { dps: 42470.0539 - tps: 640.06764 + tps: 640.89573 } } dps_results: { key: "TestElemental-AllItems-BracingShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1804.27407 + tps: 1805.19003 } } dps_results: { key: "TestElemental-AllItems-Brawler'sTrophy-232015" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Bryntroll,theBoneArbiter-50709" value: { dps: 42765.90612 - tps: 1844.4635 + tps: 1845.37946 } } dps_results: { key: "TestElemental-AllItems-BurningShadowspiritDiamond" value: { dps: 42765.90612 - tps: 1844.4635 + tps: 1845.37946 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { dps: 41599.53261 - tps: 620.97105 + tps: 622.34116 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { dps: 41098.68775 - tps: 624.1756 + tps: 624.90506 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ChaoticShadowspiritDiamond" value: { dps: 42574.1908 - tps: 1840.36126 + tps: 1841.11361 } } dps_results: { key: "TestElemental-AllItems-Coren'sChilledChromiumCoaster-232012" value: { dps: 40106.40489 - tps: 623.72555 + tps: 624.58692 } } dps_results: { key: "TestElemental-AllItems-CoreofRipeness-58184" value: { dps: 40995.03142 - tps: 632.62822 + tps: 633.99066 } } dps_results: { key: "TestElemental-AllItems-CorpseTongueCoin-50349" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77205" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77972" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77992" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CrushingWeight-59506" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CrushingWeight-65118" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-77208" value: { dps: 42359.06924 - tps: 1580.42612 + tps: 1581.35592 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-77980" value: { dps: 41919.64389 - tps: 1463.70101 + tps: 1464.47633 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-78000" value: { dps: 42769.04964 - tps: 1705.36136 + tps: 1706.35241 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Earthquake-62048" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Hurricane-62049" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Hurricane-62051" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Tsunami-62050" value: { dps: 41049.74438 - tps: 636.57147 + tps: 637.62645 } } dps_results: { key: "TestElemental-AllItems-Deathbringer'sWill-50363" value: { dps: 39943.91152 - tps: 623.68046 + tps: 624.40993 } } dps_results: { key: "TestElemental-AllItems-DestructiveShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.01118 + tps: 1826.76353 } } dps_results: { key: "TestElemental-AllItems-DislodgedForeignObject-50348" value: { dps: 40874.0154 - tps: 634.94946 + tps: 635.6348 } } dps_results: { key: "TestElemental-AllItems-Dwyer'sCaber-70141" value: { dps: 40219.86879 - tps: 623.16339 + tps: 623.93969 } } dps_results: { key: "TestElemental-AllItems-EffulgentShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1824.48069 + tps: 1825.32909 } } dps_results: { key: "TestElemental-AllItems-ElectrosparkHeartstarter-67118" value: { dps: 40267.49835 - tps: 631.20242 + tps: 631.96269 } } dps_results: { key: "TestElemental-AllItems-EmberShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1837.15115 + tps: 1838.17308 } } dps_results: { key: "TestElemental-AllItems-EnigmaticShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.01118 + tps: 1826.76353 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheCyclone-59473" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheCyclone-65140" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheEternalFlame-69002" value: { dps: 40275.64501 - tps: 635.60037 + tps: 636.01927 } } dps_results: { key: "TestElemental-AllItems-EternalShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1824.48069 + tps: 1825.32909 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77200" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77977" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77997" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-FallofMortality-59500" value: { dps: 41049.74438 - tps: 636.57147 + tps: 637.62645 } } dps_results: { key: "TestElemental-AllItems-FallofMortality-65124" value: { dps: 41208.02121 - tps: 638.20735 + tps: 639.26846 } } dps_results: { key: "TestElemental-AllItems-FieryQuintessence-69000" value: { dps: 41185.5067 - tps: 662.24426 + tps: 662.36765 } } dps_results: { key: "TestElemental-AllItems-Figurine-DemonPanther-52199" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-Figurine-DreamOwl-52354" value: { dps: 40849.81899 - tps: 631.1731 + tps: 632.57726 } } dps_results: { key: "TestElemental-AllItems-Figurine-EarthenGuardian-52352" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Figurine-JeweledSerpent-52353" value: { dps: 41958.71156 - tps: 631.50456 + tps: 632.90872 } } dps_results: { key: "TestElemental-AllItems-Figurine-KingofBoars-52351" value: { dps: 39882.85908 - tps: 637.07204 + tps: 638.12331 } } dps_results: { key: "TestElemental-AllItems-FireoftheDeep-77117" value: { dps: 40596.89301 - tps: 645.26285 + tps: 646.02809 } } dps_results: { key: "TestElemental-AllItems-FleetShadowspiritDiamond" value: { dps: 41656.77205 - tps: 1816.97918 + tps: 1817.95523 } } dps_results: { key: "TestElemental-AllItems-FluidDeath-58181" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ForlornShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1829.87778 + tps: 1830.79374 } } dps_results: { key: "TestElemental-AllItems-FoulGiftoftheDemonLord-72898" value: { dps: 42035.54169 - tps: 655.76607 + tps: 657.16271 } } dps_results: { key: "TestElemental-AllItems-FuryofAngerforge-59461" value: { dps: 40133.19088 - tps: 623.67872 + tps: 624.54009 } } dps_results: { key: "TestElemental-AllItems-GaleofShadows-56138" value: { dps: 40595.11732 - tps: 639.24644 + tps: 640.15342 } } dps_results: { key: "TestElemental-AllItems-GaleofShadows-56462" value: { dps: 40922.46003 - tps: 640.78654 + tps: 641.47942 } } dps_results: { key: "TestElemental-AllItems-GearDetector-61462" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-GlowingTwilightScale-54589" value: { dps: 40482.37675 - tps: 631.29557 + tps: 632.22766 } } dps_results: { key: "TestElemental-AllItems-GraceoftheHerald-55266" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-GraceoftheHerald-56295" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HarmlightToken-63839" value: { dps: 40675.98076 - tps: 803.67247 + tps: 804.71822 } } dps_results: { key: "TestElemental-AllItems-Harrison'sInsigniaofPanache-65803" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HeartofIgnacious-59514" value: { dps: 41170.64357 - tps: 649.71727 + tps: 650.29179 } } dps_results: { key: "TestElemental-AllItems-HeartofIgnacious-65110" value: { dps: 41321.7168 - tps: 649.20733 + tps: 650.01592 } } dps_results: { key: "TestElemental-AllItems-HeartofRage-59224" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HeartofRage-65072" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HeartofSolace-55868" value: { dps: 40372.06955 - tps: 632.94364 + tps: 633.85248 } } dps_results: { key: "TestElemental-AllItems-HeartofSolace-56393" value: { dps: 40256.46949 - tps: 634.32847 + tps: 635.07515 } } dps_results: { key: "TestElemental-AllItems-HeartofThunder-55845" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HeartofThunder-56370" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-HeartoftheVile-66969" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Heartpierce-50641" value: { dps: 42765.90612 - tps: 1844.4635 + tps: 1845.37946 } } dps_results: { key: "TestElemental-AllItems-ImpassiveShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.01118 + tps: 1826.76353 } } dps_results: { key: "TestElemental-AllItems-ImpatienceofYouth-62464" value: { dps: 39959.66762 - tps: 636.24497 + tps: 637.32573 } } dps_results: { key: "TestElemental-AllItems-ImpatienceofYouth-62469" value: { dps: 39959.66762 - tps: 636.24497 + tps: 637.32573 } } dps_results: { key: "TestElemental-AllItems-ImpetuousQuery-55881" value: { dps: 39973.61736 - tps: 637.25142 + tps: 637.92011 } } dps_results: { key: "TestElemental-AllItems-ImpetuousQuery-56406" value: { dps: 39982.80674 - tps: 639.36289 + tps: 640.03158 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-77211" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-77983" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-78003" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-InsigniaofDiplomacy-61433" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77203" value: { dps: 42335.73024 - tps: 664.81086 + tps: 666.1176 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77971" value: { dps: 42365.13502 - tps: 656.16528 + tps: 657.32037 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77991" value: { dps: 42716.07461 - tps: 674.79921 + tps: 676.04259 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheEarthenLord-61429" value: { dps: 40602.42499 - tps: 633.6247 + tps: 634.20082 } } dps_results: { key: "TestElemental-AllItems-JarofAncientRemedies-59354" value: { dps: 39753.79389 - tps: 643.56492 + tps: 644.7276 } } dps_results: { key: "TestElemental-AllItems-JarofAncientRemedies-65029" value: { dps: 39753.79389 - tps: 646.01367 + tps: 646.89305 } } dps_results: { key: "TestElemental-AllItems-JawsofDefeat-68926" value: { dps: 41235.88579 - tps: 623.965 + tps: 624.76379 } } dps_results: { key: "TestElemental-AllItems-JawsofDefeat-69111" value: { dps: 41430.79481 - tps: 625.2557 + tps: 626.21876 } } dps_results: { key: "TestElemental-AllItems-JujuofNimbleness-63840" value: { dps: 39928.70642 - tps: 631.46903 + tps: 631.93276 } } dps_results: { key: "TestElemental-AllItems-KeytotheEndlessChamber-55795" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-KeytotheEndlessChamber-56328" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-KiroptyricSigil-77113" value: { dps: 40618.933 - tps: 635.46368 + tps: 636.29177 } } dps_results: { key: "TestElemental-AllItems-KvaldirBattleStandard-59685" value: { dps: 39761.9463 - tps: 630.83592 + tps: 631.00851 } } dps_results: { key: "TestElemental-AllItems-KvaldirBattleStandard-59689" value: { dps: 39761.9463 - tps: 630.83592 + tps: 631.00851 } } dps_results: { key: "TestElemental-AllItems-LadyLa-La'sSingingShell-67152" value: { dps: 39988.76108 - tps: 620.8571 + tps: 621.73065 } } dps_results: { key: "TestElemental-AllItems-LastWord-50708" value: { dps: 42765.90612 - tps: 1844.4635 + tps: 1845.37946 } } dps_results: { key: "TestElemental-AllItems-LeadenDespair-55816" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-LeadenDespair-56347" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-LeftEyeofRajh-56102" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-LeftEyeofRajh-56427" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-LicensetoSlay-58180" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-MagnetiteMirror-55814" value: { dps: 39688.30392 - tps: 619.80548 + tps: 620.35243 } } dps_results: { key: "TestElemental-AllItems-MagnetiteMirror-56345" value: { dps: 39688.30392 - tps: 619.80548 + tps: 620.35243 } } dps_results: { key: "TestElemental-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 38845.46309 - tps: 630.34664 + dps: 40008.90842 + tps: 630.02257 } } dps_results: { key: "TestElemental-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 38845.46309 - tps: 630.34664 + dps: 40008.90842 + tps: 630.02257 } } dps_results: { key: "TestElemental-AllItems-MarkofKhardros-56132" value: { dps: 40145.53153 - tps: 639.18471 + tps: 639.62152 } } dps_results: { key: "TestElemental-AllItems-MarkofKhardros-56458" value: { dps: 40297.96539 - tps: 635.86166 + tps: 636.34982 } } dps_results: { key: "TestElemental-AllItems-MatrixRestabilizer-68994" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-MatrixRestabilizer-69150" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-MightoftheOcean-55251" value: { dps: 39688.30392 - tps: 619.80548 + tps: 620.35243 } } dps_results: { key: "TestElemental-AllItems-MightoftheOcean-56285" value: { dps: 39688.30392 - tps: 619.80548 + tps: 620.35243 } } dps_results: { key: "TestElemental-AllItems-MirrorofBrokenImages-62466" value: { dps: 40043.4944 - tps: 638.16753 + tps: 638.86665 } } dps_results: { key: "TestElemental-AllItems-MirrorofBrokenImages-62471" value: { dps: 40043.4944 - tps: 638.16753 + tps: 638.86665 } } dps_results: { key: "TestElemental-AllItems-MithrilStopwatch-232013" value: { dps: 41170.50784 - tps: 627.62915 + tps: 628.53377 } } dps_results: { key: "TestElemental-AllItems-MoonwellChalice-70142" value: { dps: 41513.73782 - tps: 652.91313 + tps: 654.31555 } } dps_results: { key: "TestElemental-AllItems-MoonwellPhial-70143" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-NecromanticFocus-68982" value: { dps: 41770.95956 - tps: 655.10245 + tps: 656.12252 } } dps_results: { key: "TestElemental-AllItems-NecromanticFocus-69139" value: { dps: 42217.11999 - tps: 661.5328 + tps: 662.53113 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-77188" value: { dps: 42802.96938 - tps: 1957.85152 + tps: 1958.75993 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-78472" value: { dps: 42819.33752 - tps: 1974.21966 + tps: 1975.12807 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-78481" value: { dps: 42788.47388 - tps: 1943.35602 + tps: 1944.26443 } } dps_results: { key: "TestElemental-AllItems-Oremantle'sFavor-61448" value: { dps: 39911.22325 - tps: 620.14984 + tps: 621.57729 } } dps_results: { key: "TestElemental-AllItems-PetrifiedPickledEgg-232014" value: { dps: 40972.85225 - tps: 635.92486 + tps: 636.97806 } } dps_results: { key: "TestElemental-AllItems-PetrifiedTwilightScale-54591" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-PhylacteryoftheNamelessLich-50365" value: { dps: 40423.19003 - tps: 623.49323 + tps: 624.15003 } } dps_results: { key: "TestElemental-AllItems-PorcelainCrab-55237" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-PorcelainCrab-56280" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-PowerfulShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1824.48069 + tps: 1825.32909 } } dps_results: { key: "TestElemental-AllItems-Prestor'sTalismanofMachination-59441" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Prestor'sTalismanofMachination-65026" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Rainsong-55854" value: { dps: 39753.79389 - tps: 623.90878 + tps: 624.65951 } } dps_results: { key: "TestElemental-AllItems-Rainsong-56377" value: { dps: 39753.79389 - tps: 623.89493 + tps: 624.65258 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-77195" value: { dps: 36609.31247 - tps: 2250.36627 + tps: 2250.72616 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-78475" value: { dps: 37868.19687 - tps: 2381.66505 + tps: 2382.04555 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-78484" value: { dps: 35643.06533 - tps: 2209.98079 + tps: 2210.44207 } } dps_results: { key: "TestElemental-AllItems-ReflectionoftheLight-77115" value: { dps: 41487.25371 - tps: 624.67813 + tps: 625.27038 } } dps_results: { key: "TestElemental-AllItems-RegaliaoftheRagingElements" value: { dps: 34964.29363 - tps: 1750.93101 + tps: 1751.61606 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77201" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77978" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77998" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ReverberatingShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1838.86864 + tps: 1839.71704 } } dps_results: { key: "TestElemental-AllItems-RevitalizingShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1838.85492 + tps: 1839.7088 } } dps_results: { key: "TestElemental-AllItems-Ricket'sMagneticFireball-70144" value: { dps: 40098.09046 - tps: 619.91904 + tps: 621.34649 } } dps_results: { key: "TestElemental-AllItems-RightEyeofRajh-56100" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RightEyeofRajh-56431" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RosaryofLight-72901" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RottingSkull-77116" value: { dps: 40216.88382 - tps: 619.62752 + tps: 620.29943 } } dps_results: { key: "TestElemental-AllItems-RuneofZeth-68998" value: { dps: 41668.8509 - tps: 656.15722 + tps: 656.43999 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { dps: 41285.65837 - tps: 620.65122 + tps: 622.02132 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { dps: 41378.21103 - tps: 620.74553 + tps: 622.11563 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { dps: 40634.05106 - tps: 627.54343 + tps: 628.20197 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { dps: 40974.71896 - tps: 626.8156 + tps: 627.47627 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ScalesofLife-68915" value: { dps: 39610.91078 - tps: 622.31957 + tps: 623.08952 hps: 322.18377 } } @@ -1420,7 +1420,7 @@ dps_results: { key: "TestElemental-AllItems-ScalesofLife-69109" value: { dps: 39610.91078 - tps: 622.31957 + tps: 623.08952 hps: 363.42027 } } @@ -1428,791 +1428,791 @@ dps_results: { key: "TestElemental-AllItems-Schnottz'sMedallionofCommand-65805" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-SeaStar-55256" value: { dps: 40297.27683 - tps: 620.4434 + tps: 621.83733 } } dps_results: { key: "TestElemental-AllItems-SeaStar-56290" value: { dps: 40799.55569 - tps: 620.05113 + tps: 621.45551 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77204" value: { - dps: 41588.79028 - tps: 641.95969 + dps: 41939.3486 + tps: 646.52435 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77969" value: { - dps: 41379.88948 - tps: 639.82667 + dps: 41609.8855 + tps: 644.47385 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77989" value: { - dps: 41833.3128 - tps: 644.23854 + dps: 42147.53579 + tps: 655.79942 } } dps_results: { key: "TestElemental-AllItems-Shadowmourne-49623" value: { dps: 43299.35489 - tps: 1872.14752 + tps: 1873.11504 } } dps_results: { key: "TestElemental-AllItems-ShardofWoe-60233" value: { dps: 40176.17317 - tps: 612.29212 + tps: 613.32603 } } dps_results: { key: "TestElemental-AllItems-Shrine-CleansingPurifier-63838" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Sindragosa'sFlawlessFang-50364" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Skardyn'sGrace-56115" value: { dps: 40096.71698 - tps: 641.39992 + tps: 642.33476 } } dps_results: { key: "TestElemental-AllItems-Skardyn'sGrace-56440" value: { dps: 40151.81144 - tps: 639.69445 + tps: 640.98869 } } dps_results: { key: "TestElemental-AllItems-Sorrowsong-55879" value: { dps: 40650.78628 - tps: 635.01448 + tps: 635.68317 } } dps_results: { key: "TestElemental-AllItems-Sorrowsong-56400" value: { dps: 40736.11575 - tps: 640.42652 + tps: 641.09521 } } dps_results: { key: "TestElemental-AllItems-Soul'sAnguish-66994" value: { dps: 39688.30392 - tps: 619.80548 + tps: 620.35243 } } dps_results: { key: "TestElemental-AllItems-SoulCasket-58183" value: { dps: 41496.58361 - tps: 638.13677 + tps: 639.21753 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77206" value: { dps: 40949.8228 - tps: 647.94645 + tps: 649.11003 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77970" value: { dps: 40788.30289 - tps: 648.75329 + tps: 649.84539 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77990" value: { dps: 40909.8369 - tps: 649.41174 + tps: 650.70155 } } dps_results: { key: "TestElemental-AllItems-SpidersilkSpindle-68981" value: { dps: 40317.63646 - tps: 638.64268 + tps: 639.40792 } } dps_results: { key: "TestElemental-AllItems-SpidersilkSpindle-69138" value: { dps: 40446.55829 - tps: 644.43022 + tps: 645.19545 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sBattlegear" value: { dps: 28364.09538 - tps: 1617.20815 + tps: 1617.80777 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sRegalia" value: { dps: 36240.86039 - tps: 1746.63005 + tps: 1747.39196 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sVestments" value: { - dps: 34715.09325 - tps: 1731.74858 + dps: 34997.45683 + tps: 1756.78837 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77202" value: { dps: 40631.41919 - tps: 639.83096 + tps: 640.56449 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77973" value: { dps: 40670.34354 - tps: 641.00453 + tps: 641.90112 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77993" value: { dps: 40542.05189 - tps: 645.18151 + tps: 646.41355 } } dps_results: { key: "TestElemental-AllItems-StayofExecution-68996" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-Stonemother'sKiss-61411" value: { dps: 40824.90522 - tps: 630.6843 + tps: 631.61854 } } dps_results: { key: "TestElemental-AllItems-StumpofTime-62465" value: { dps: 40680.36577 - tps: 626.45364 + tps: 627.03628 } } dps_results: { key: "TestElemental-AllItems-StumpofTime-62470" value: { dps: 40669.75225 - tps: 628.52442 + tps: 629.06597 } } dps_results: { key: "TestElemental-AllItems-SymbioticWorm-59332" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-SymbioticWorm-65048" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-TalismanofSinisterOrder-65804" value: { dps: 41108.64007 - tps: 644.56577 + tps: 646.07506 } } dps_results: { key: "TestElemental-AllItems-Tank-CommanderInsignia-63841" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-TearofBlood-55819" value: { dps: 40616.82047 - tps: 632.35378 + tps: 633.32869 } } dps_results: { key: "TestElemental-AllItems-TearofBlood-56351" value: { dps: 40899.57502 - tps: 635.16796 + tps: 636.21916 } } dps_results: { key: "TestElemental-AllItems-TendrilsofBurrowingDark-55810" value: { dps: 40653.71761 - tps: 639.59591 + tps: 640.59099 } } dps_results: { key: "TestElemental-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 41075.62025 - tps: 637.37871 + dps: 41495.00258 + tps: 640.07967 } } dps_results: { key: "TestElemental-AllItems-TheHungerer-68927" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-TheHungerer-69112" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Theralion'sMirror-59519" value: { dps: 41925.58212 - tps: 654.215 + tps: 655.24761 } } dps_results: { key: "TestElemental-AllItems-Theralion'sMirror-65105" value: { dps: 41956.0386 - tps: 655.97059 + tps: 657.0447 } } dps_results: { key: "TestElemental-AllItems-Throngus'sFinger-56121" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Throngus'sFinger-56449" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-77190" value: { - dps: 55082.58002 - tps: 1927.84941 + dps: 55309.61029 + tps: 1905.35953 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-78477" value: { - dps: 56663.86829 - tps: 1904.02947 + dps: 56725.0825 + tps: 1914.71163 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-78486" value: { - dps: 53713.43828 - tps: 1903.98582 + dps: 53925.09022 + tps: 1899.37646 } } dps_results: { key: "TestElemental-AllItems-Tia'sGrace-55874" value: { dps: 39973.61736 - tps: 637.25142 + tps: 637.92011 } } dps_results: { key: "TestElemental-AllItems-Tia'sGrace-56394" value: { dps: 39982.80674 - tps: 639.36289 + tps: 640.03158 } } dps_results: { key: "TestElemental-AllItems-TidefuryRaiment" value: { dps: 25120.7735 - tps: 1424.32474 + tps: 1425.3294 } } dps_results: { key: "TestElemental-AllItems-TinyAbominationinaJar-50706" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 40502.12256 - tps: 716.91882 + dps: 40504.54803 + tps: 720.95744 } } dps_results: { key: "TestElemental-AllItems-UnheededWarning-59520" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-UnquenchableFlame-67101" value: { dps: 39687.78416 - tps: 619.82573 + tps: 621.21688 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-62463" value: { dps: 39959.66762 - tps: 636.24497 + tps: 637.32573 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-62468" value: { dps: 39959.66762 - tps: 636.24497 + tps: 637.32573 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-68709" value: { dps: 39959.66762 - tps: 636.24497 + tps: 637.32573 } } dps_results: { key: "TestElemental-AllItems-Val'anyr,HammerofAncientKings-46017" value: { dps: 29265.25165 - tps: 1674.0487 + tps: 1674.90547 } } dps_results: { key: "TestElemental-AllItems-VariablePulseLightningCapacitor-68925" value: { dps: 42439.57936 - tps: 1700.32062 + tps: 1701.34053 } } dps_results: { key: "TestElemental-AllItems-Varo'then'sBrooch-72899" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VeilofLies-72900" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VesselofAcceleration-68995" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VesselofAcceleration-69167" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77207" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77979" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77999" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VialofStolenMemories-59515" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VialofStolenMemories-65109" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { dps: 40944.42072 - tps: 620.3035 + tps: 621.67361 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { dps: 41096.52901 - tps: 620.4585 + tps: 621.8286 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { dps: 39687.78416 - tps: 619.88932 + tps: 621.25942 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { dps: 40510.81708 - tps: 641.39845 + tps: 642.30729 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { dps: 40145.84438 - tps: 623.81919 + tps: 624.68055 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { dps: 40152.61821 - tps: 642.59476 + tps: 643.34834 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { dps: 40511.78628 - tps: 624.68379 + tps: 625.38192 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { dps: 40673.35211 - tps: 624.4379 + tps: 625.13603 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-VolcanicBattlegear" value: { dps: 28619.18615 - tps: 1576.35148 + tps: 1576.92975 } } dps_results: { key: "TestElemental-AllItems-VolcanicRegalia" value: { dps: 36830.69088 - tps: 1716.08913 + tps: 1716.79949 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77198" value: { dps: 42982.83023 - tps: 662.1001 + tps: 663.62079 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77975" value: { dps: 42593.89347 - tps: 657.59503 + tps: 659.14795 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77995" value: { dps: 43434.74144 - tps: 667.1947 + tps: 669.05129 } } dps_results: { key: "TestElemental-AllItems-WitchingHourglass-55787" value: { dps: 40878.50428 - tps: 638.75764 + tps: 639.72815 } } dps_results: { key: "TestElemental-AllItems-WitchingHourglass-56320" value: { dps: 41329.71498 - tps: 648.59753 + tps: 649.44621 } } dps_results: { key: "TestElemental-AllItems-World-QuellerFocus-63842" value: { dps: 39921.35496 - tps: 631.04938 + tps: 632.27512 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77197" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77974" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77994" value: { dps: 39753.79389 - tps: 623.95131 + tps: 624.68078 } } dps_results: { key: "TestElemental-AllItems-Za'brox'sLuckyTooth-63742" value: { dps: 40160.79451 - tps: 636.08743 + tps: 636.52423 } } dps_results: { key: "TestElemental-AllItems-Za'brox'sLuckyTooth-63745" value: { dps: 40160.79451 - tps: 636.08743 + tps: 636.52423 } } dps_results: { key: "TestElemental-Average-Default" value: { dps: 43076.49026 - tps: 1854.11533 + tps: 1854.88052 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 109551.0542 - tps: 46919.98782 + tps: 46970.19173 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42999.25641 - tps: 1817.53734 + tps: 1818.12014 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49594.63809 - tps: 2041.50541 + tps: 2044.41938 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85191.16514 - tps: 45159.2985 + tps: 45196.44477 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33430.38976 - tps: 1545.69372 + tps: 1547.65037 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36727.49286 - tps: 1612.62795 + tps: 1613.54962 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68653.68372 - tps: 13599.95558 + tps: 13619.21317 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 43053.41515 - tps: 1834.74733 + tps: 1836.15885 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49902.0258 - tps: 1955.77801 + tps: 1962.19838 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52326.43231 - tps: 12356.09823 + tps: 12382.88252 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33309.37434 - tps: 1543.56936 + tps: 1545.65067 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36906.10938 - tps: 1665.1489 + tps: 1668.25171 } } dps_results: { @@ -2261,84 +2261,84 @@ dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 168245.40155 - tps: 83203.5513 + tps: 83287.23596 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42605.94291 - tps: 1830.04816 + tps: 1830.78815 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49802.0821 - tps: 2043.20178 + tps: 2046.90175 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 136879.07472 - tps: 76331.6609 + tps: 76413.38103 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33069.47909 - tps: 1553.2829 + tps: 1554.70318 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36883.71192 - tps: 1613.02379 + tps: 1613.89208 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 - tps: 13632.95104 + tps: 13653.82025 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42573.14869 - tps: 1799.97082 + tps: 1801.19088 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50165.73077 - tps: 1959.40374 + tps: 1964.33275 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 - tps: 12323.43786 + tps: 12351.88952 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32765.03048 - tps: 1536.87895 + tps: 1539.20677 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37095.64305 - tps: 1666.39519 + tps: 1670.174 } } dps_results: { @@ -2387,84 +2387,84 @@ dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 151539.96327 - tps: 81879.87775 + tps: 81916.98445 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41182.56717 - tps: 1793.08365 + tps: 1794.48565 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48600.90908 - tps: 2035.95837 + tps: 2042.18726 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 123566.89054 - tps: 75235.06515 + tps: 75270.64526 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31892.66496 - tps: 1551.70921 + tps: 1553.60656 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35906.27685 - tps: 1649.15113 + tps: 1649.34392 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 - tps: 13632.95104 + tps: 13653.82025 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41178.82388 - tps: 1813.23926 + tps: 1813.86613 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49041.65946 - tps: 2004.4551 + tps: 2007.38545 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 - tps: 12323.43786 + tps: 12351.88952 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31865.35545 - tps: 1537.37216 + tps: 1539.31126 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35866.3283 - tps: 1608.02755 + tps: 1611.05168 } } dps_results: { @@ -2513,84 +2513,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 106945.615 - tps: 47138.43057 + tps: 47188.60212 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42708.96798 - tps: 1861.92326 + tps: 1862.72007 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49785.05407 - tps: 2055.75816 + tps: 2059.74222 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 83022.28107 - tps: 45533.67284 + tps: 45570.76149 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33055.42261 - tps: 1559.55579 + tps: 1561.74625 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36767.40917 - tps: 1629.11946 + tps: 1629.81519 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 66349.05733 - tps: 13809.49756 + tps: 13824.00591 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42765.90612 - tps: 1844.4635 + tps: 1845.37946 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49516.57831 - tps: 2097.55019 + tps: 2101.45404 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50346.3404 - tps: 12382.89684 + tps: 12404.03115 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32851.51641 - tps: 1532.31207 + tps: 1534.84512 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36165.73033 - tps: 1631.42476 + tps: 1633.55192 } } dps_results: { @@ -2639,84 +2639,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 165440.06407 - tps: 83589.94344 + tps: 83676.82543 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41918.50679 - tps: 1811.47032 + tps: 1811.92806 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50019.69491 - tps: 2058.28987 + tps: 2060.46918 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 134720.21118 - tps: 76353.54883 + tps: 76444.25383 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32873.87863 - tps: 1543.3958 + tps: 1545.22676 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36941.38646 - tps: 1629.81463 + tps: 1629.81519 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 - tps: 13689.94868 + tps: 13707.26705 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42364.6583 - tps: 1833.85574 + tps: 1834.48968 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49794.42621 - tps: 2099.73003 + tps: 2102.86919 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 - tps: 12278.74374 + tps: 12306.38791 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32828.1348 - tps: 1550.98754 + tps: 1553.29546 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36355.97809 - tps: 1632.50025 + tps: 1634.40702 } } dps_results: { @@ -2765,84 +2765,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 148204.04384 - tps: 82113.58425 + tps: 82140.43391 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40691.9033 - tps: 1806.19632 + tps: 1807.56035 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48073.42607 - tps: 2016.67989 + tps: 2022.53489 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 120749.30526 - tps: 75459.60118 + tps: 75500.50683 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31491.36783 - tps: 1542.27765 + tps: 1544.30217 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35195.71022 - tps: 1620.69136 + tps: 1621.82366 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 - tps: 13689.94868 + tps: 13707.26705 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40896.46641 - tps: 1833.17132 + tps: 1833.78092 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47825.30747 - tps: 2066.46673 + tps: 2069.51475 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 - tps: 12278.74374 + tps: 12306.38791 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31453.11319 - tps: 1534.06122 + tps: 1536.2472 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35363.27966 - tps: 1602.53066 + tps: 1603.70191 } } dps_results: { @@ -2891,6 +2891,6 @@ dps_results: { key: "TestElemental-SwitchInFrontOfTarget-Default" value: { dps: 42291.35373 - tps: 1844.4635 + tps: 1845.37946 } } diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index 858f682faa..f29245d517 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2169,1345 +2169,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98887.81989 - tps: 107054.24593 + dps: 98888.90073 + tps: 107055.32677 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38810.7966 - tps: 32814.34956 + dps: 38814.29564 + tps: 32817.8486 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51355.34743 - tps: 42382.05966 + dps: 51358.13863 + tps: 42384.85085 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.22073 - tps: 73569.93172 + dps: 67110.82154 + tps: 73570.53254 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24114.19778 - tps: 19933.16614 + dps: 24117.45036 + tps: 19936.41873 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27982.35164 - tps: 22019.91402 + dps: 27984.11105 + tps: 22021.67343 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99105.53322 - tps: 107290.96447 + dps: 99106.61406 + tps: 107292.04531 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38893.36603 - tps: 32887.90408 + dps: 38896.86507 + tps: 32891.40312 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51722.32517 - tps: 42710.82967 + dps: 51725.11636 + tps: 42713.62087 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67235.05694 - tps: 73707.6747 + dps: 67235.65776 + tps: 73708.27552 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24154.57024 - tps: 19967.47425 + dps: 24157.82282 + tps: 19970.72684 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28164.23729 - tps: 22176.23139 + dps: 28165.99671 + tps: 22177.99081 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98887.81989 - tps: 107054.24593 + dps: 98888.90073 + tps: 107055.32677 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38266.35589 - tps: 31829.58661 + dps: 38271.40999 + tps: 31834.64071 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50206.02497 - tps: 41342.12494 + dps: 50209.93766 + tps: 41346.03763 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.22073 - tps: 73569.93172 + dps: 67110.82154 + tps: 73570.53254 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23748.00265 - tps: 19272.88466 + dps: 23750.68626 + tps: 19275.56827 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28006.36719 - tps: 21769.96818 + dps: 28009.91954 + tps: 21773.52053 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99105.53322 - tps: 107290.96447 + dps: 99106.61406 + tps: 107292.04531 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38348.74075 - tps: 31902.3635 + dps: 38353.79485 + tps: 31907.4176 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50567.903 - tps: 41664.28923 + dps: 50571.81569 + tps: 41668.20191 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67235.05694 - tps: 73707.6747 + dps: 67235.65776 + tps: 73708.27552 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23788.20355 - tps: 19306.83166 + dps: 23790.88716 + tps: 19309.51527 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28187.64125 - tps: 21924.38967 + dps: 28191.1936 + tps: 21927.94203 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.06325 - tps: 89485.65167 + dps: 82060.79741 + tps: 89486.38582 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31262.65923 - tps: 27045.0494 + dps: 31267.80304 + tps: 27050.19321 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41611.54503 - tps: 35316.91885 + dps: 41613.64642 + tps: 35319.02024 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55658.57676 - tps: 61517.35993 + dps: 55659.17795 + tps: 61517.96113 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19268.75451 - tps: 16475.71182 + dps: 19270.91275 + tps: 16477.87006 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22471.24113 - tps: 18056.17924 + dps: 22473.90264 + tps: 18058.84076 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82241.69132 - tps: 89684.11505 + dps: 82242.42548 + tps: 89684.84921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31330.40352 - tps: 27106.79128 + dps: 31335.54733 + tps: 27111.93509 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41910.35398 - tps: 35590.5811 + dps: 41912.45536 + tps: 35592.68248 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55761.63647 - tps: 61631.94824 + dps: 55762.23766 + tps: 61632.54943 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19301.4294 - tps: 16504.22387 + dps: 19303.58764 + tps: 16506.38211 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22615.21353 - tps: 18182.69341 + dps: 22617.87505 + tps: 18185.35493 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.06325 - tps: 89485.65167 + dps: 82060.79741 + tps: 89486.38582 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31087.97165 - tps: 26279.56785 + dps: 31091.7174 + tps: 26283.3136 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41118.47499 - tps: 34374.89787 + dps: 41119.56849 + tps: 34375.99137 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55658.57676 - tps: 61517.35993 + dps: 55659.17795 + tps: 61517.96113 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19269.07237 - tps: 15988.07656 + dps: 19271.82208 + tps: 15990.82627 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22380.39051 - tps: 17703.80634 + dps: 22382.54176 + tps: 17705.95759 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82241.69132 - tps: 89684.11505 + dps: 82242.42548 + tps: 89684.84921 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31156.00352 - tps: 26340.76971 + dps: 31159.74927 + tps: 26344.51546 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41412.50291 - tps: 34640.5138 + dps: 41413.59642 + tps: 34641.60731 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55761.63647 - tps: 61631.94824 + dps: 55762.23766 + tps: 61632.54943 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19301.48946 - tps: 16015.98529 + dps: 19304.23917 + tps: 16018.735 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22524.3463 - tps: 17828.3763 + dps: 22526.49756 + tps: 17830.52755 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149813.74911 - tps: 164678.90378 + dps: 149815.38398 + tps: 164680.53866 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49774.78201 - tps: 40921.85154 + dps: 49787.21742 + tps: 40934.28696 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65021.43894 - tps: 52392.72805 + dps: 65035.14411 + tps: 52406.43323 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105701.41887 - tps: 117796.13886 + dps: 105702.97422 + tps: 117797.69421 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31934.52639 - tps: 25492.70807 + dps: 31941.76399 + tps: 25499.94568 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36715.65575 - tps: 27909.36768 + dps: 36711.92915 + tps: 27905.64109 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150141.41173 - tps: 165039.02046 + dps: 150143.0466 + tps: 165040.65533 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49882.45494 - tps: 41013.62475 + dps: 49894.89035 + tps: 41026.06017 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65487.54969 - tps: 52792.26071 + dps: 65501.25487 + tps: 52805.96588 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105898.88745 - tps: 118016.48332 + dps: 105900.4428 + tps: 118018.03867 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31989.66908 - tps: 25536.86901 + dps: 31996.90669 + tps: 25544.10661 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36958.42174 - tps: 28104.59281 + dps: 36954.69515 + tps: 28100.86622 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149813.74911 - tps: 164678.90378 + dps: 149815.38398 + tps: 164680.53866 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49870.87292 - tps: 40011.3371 + dps: 49885.48595 + tps: 40025.95013 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64542.50847 - tps: 51351.43837 + dps: 64552.24743 + tps: 51361.17732 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105701.41887 - tps: 117796.13886 + dps: 105702.97422 + tps: 117797.69421 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31947.42553 - tps: 24921.22162 + dps: 31953.42657 + tps: 24927.22266 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36549.52175 - tps: 27079.59927 + dps: 36547.55694 + tps: 27077.63446 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150141.41173 - tps: 165039.02046 + dps: 150143.0466 + tps: 165040.65533 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49977.36774 - tps: 40101.21522 + dps: 49991.98078 + tps: 40115.82826 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65005.00072 - tps: 51744.66185 + dps: 65014.73967 + tps: 51754.4008 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105898.88745 - tps: 118016.48332 + dps: 105900.4428 + tps: 118018.03867 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32001.97344 - tps: 24963.94452 + dps: 32007.97448 + tps: 24969.94557 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36789.00919 - tps: 27269.1941 + dps: 36787.04438 + tps: 27267.22929 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123158.1685 - tps: 136446.8879 + dps: 123160.06666 + tps: 136448.78606 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39882.63146 - tps: 33789.84039 + dps: 39891.04195 + tps: 33798.25088 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52257.9849 - tps: 43512.22396 + dps: 52265.77412 + tps: 43520.01318 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87595.74306 - tps: 98330.3153 + dps: 87597.68954 + tps: 98332.26178 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25232.94724 - tps: 20923.97327 + dps: 25238.89348 + tps: 20929.91951 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29589.44215 - tps: 23494.1087 + dps: 29584.24658 + tps: 23488.91313 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123427.596 - tps: 136744.73211 + dps: 123429.49416 + tps: 136746.63027 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39967.97246 - tps: 33864.13845 + dps: 39976.38295 + tps: 33872.54893 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52636.84672 - tps: 43845.19959 + dps: 52644.63594 + tps: 43852.98881 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87759.86981 - tps: 98515.05036 + dps: 87761.81629 + tps: 98516.99683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25276.97208 - tps: 20960.48438 + dps: 25282.91832 + tps: 20966.43062 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29784.34138 - tps: 23657.2324 + dps: 29779.14582 + tps: 23652.03683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123158.1685 - tps: 136446.8879 + dps: 123160.06666 + tps: 136448.78606 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40222.88907 - tps: 32857.8519 + dps: 40231.6731 + tps: 32866.63592 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52523.43929 - tps: 42398.48408 + dps: 52528.70063 + tps: 42403.74542 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87595.74306 - tps: 98330.3153 + dps: 87597.68954 + tps: 98332.26178 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25558.37236 - tps: 20492.7556 + dps: 25564.05137 + tps: 20498.4346 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29811.93433 - tps: 22859.64569 + dps: 29809.41823 + tps: 22857.12959 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123427.596 - tps: 136744.73211 + dps: 123429.49416 + tps: 136746.63027 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40308.10796 - tps: 32930.84096 + dps: 40316.89198 + tps: 32939.62499 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52903.18984 - tps: 42726.40679 + dps: 52908.45118 + tps: 42731.66812 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87759.86981 - tps: 98515.05036 + dps: 87761.81629 + tps: 98516.99683 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25602.62164 - tps: 20528.63072 + dps: 25608.30064 + tps: 20534.30973 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30005.54268 - tps: 23017.89168 + dps: 30003.02659 + tps: 23015.37558 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99224.08409 - tps: 107461.26842 + dps: 99225.04115 + tps: 107462.22548 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38770.44353 - tps: 32509.62022 + dps: 38775.04658 + tps: 32514.22327 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50472.40298 - tps: 41540.55502 + dps: 50477.1596 + tps: 41545.31165 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68091.92113 - tps: 74708.53953 + dps: 68092.74471 + tps: 74709.3631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24076.92545 - tps: 19883.15222 + dps: 24079.57245 + tps: 19885.79922 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27647.22019 - tps: 21773.65029 + dps: 27649.9399 + tps: 21776.37001 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99437.84531 - tps: 107694.07724 + dps: 99438.80237 + tps: 107695.0343 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38850.23709 - tps: 32580.60607 + dps: 38854.84015 + tps: 32585.20912 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50827.95811 - tps: 41858.18646 + dps: 50832.71473 + tps: 41862.94309 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68212.80487 - tps: 74842.02394 + dps: 68213.62845 + tps: 74842.84752 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24115.87964 - tps: 19916.2661 + dps: 24118.52664 + tps: 19918.9131 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27823.43728 - tps: 21925.29961 + dps: 27826.157 + tps: 21928.01933 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99224.08409 - tps: 107461.26842 + dps: 99225.04115 + tps: 107462.22548 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38091.89919 - tps: 31505.11509 + dps: 38096.47091 + tps: 31509.68681 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49708.04665 - tps: 40744.72082 + dps: 49712.97316 + tps: 40749.64733 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68091.92113 - tps: 74708.53953 + dps: 68092.74471 + tps: 74709.3631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23931.70297 - tps: 19428.52595 + dps: 23933.52347 + tps: 19430.34646 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26901.66593 - tps: 20771.16486 + dps: 26902.7494 + tps: 20772.24833 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99437.84531 - tps: 107694.07724 + dps: 99438.80237 + tps: 107695.0343 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38170.47938 - tps: 31574.39966 + dps: 38175.0511 + tps: 31578.97138 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50056.31232 - tps: 41053.27252 + dps: 50061.23882 + tps: 41058.19902 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68212.80487 - tps: 74842.02394 + dps: 68213.62845 + tps: 74842.84752 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23970.0548 - tps: 19460.72306 + dps: 23971.87531 + tps: 19462.54357 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27072.66398 - tps: 20915.73959 + dps: 27073.74745 + tps: 20916.82306 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82579.71692 - tps: 89897.81121 + dps: 82580.97143 + tps: 89899.06572 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31176.0995 - tps: 26849.12803 + dps: 31179.40778 + tps: 26852.43631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40829.71169 - tps: 34507.11576 + dps: 40832.39118 + tps: 34509.79525 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55858.67331 - tps: 61795.25036 + dps: 55859.41566 + tps: 61795.99272 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19508.61716 - tps: 16651.07871 + dps: 19510.94075 + tps: 16653.4023 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22407.5844 - tps: 17939.76188 + dps: 22409.10013 + tps: 17941.2776 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82756.666 - tps: 90091.51882 + dps: 82757.92051 + tps: 90092.77333 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31240.66679 - tps: 26907.7608 + dps: 31243.97506 + tps: 26911.06907 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41118.52952 - tps: 34771.22726 + dps: 41121.20901 + tps: 34773.90675 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55958.90924 - tps: 61906.75915 + dps: 55959.65159 + tps: 61907.50151 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19540.31688 - tps: 16678.74651 + dps: 19542.64048 + tps: 16681.0701 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22548.5223 - tps: 18063.88557 + dps: 22550.03802 + tps: 18065.4013 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82579.71692 - tps: 89897.81121 + dps: 82580.97143 + tps: 89899.06572 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30867.69781 - tps: 26003.5782 + dps: 30870.56727 + tps: 26006.44766 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40920.31553 - tps: 34267.05495 + dps: 40922.78571 + tps: 34269.52512 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55858.67331 - tps: 61795.25036 + dps: 55859.41566 + tps: 61795.99272 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19427.64913 - tps: 16035.30727 + dps: 19429.90339 + tps: 16037.56153 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22240.34083 - tps: 17477.74027 + dps: 22241.54687 + tps: 17478.94631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82756.666 - tps: 90091.51882 + dps: 82757.92051 + tps: 90092.77333 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30933.23825 - tps: 26062.40212 + dps: 30936.10771 + tps: 26065.27158 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41207.47354 - tps: 34526.06248 + dps: 41209.94372 + tps: 34528.53266 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55958.90924 - tps: 61906.75915 + dps: 55959.65159 + tps: 61907.50151 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19458.73691 - tps: 16061.8308 + dps: 19460.99118 + tps: 16064.08507 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22380.05906 - tps: 17598.93269 + dps: 22381.2651 + tps: 17600.13872 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147775.83879 - tps: 162640.6411 + dps: 147777.7612 + tps: 162642.56352 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49280.29294 - tps: 40313.20349 + dps: 49291.41398 + tps: 40324.32453 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64065.69295 - tps: 51286.63528 + dps: 64075.8898 + tps: 51296.83212 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105909.54524 - tps: 117934.76794 + dps: 105911.2622 + tps: 117936.4849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31943.60646 - tps: 25530.60336 + dps: 31951.67202 + tps: 25538.66892 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36262.17811 - tps: 27669.44428 + dps: 36266.95495 + tps: 27674.22113 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148092.42485 - tps: 162989.58637 + dps: 148094.34726 + tps: 162991.50879 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49380.89775 - tps: 40397.69904 + dps: 49392.01879 + tps: 40408.82008 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64513.50772 - tps: 51666.27822 + dps: 64523.70456 + tps: 51676.47506 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106104.17476 - tps: 118152.35689 + dps: 106105.89173 + tps: 118154.07386 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31997.21747 - tps: 25573.26421 + dps: 32005.28304 + tps: 25581.32978 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36496.66512 - tps: 27857.63924 + dps: 36501.44196 + tps: 27862.41609 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147775.83879 - tps: 162640.6411 + dps: 147777.7612 + tps: 162642.56352 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49704.23188 - tps: 39685.675 + dps: 49717.31127 + tps: 39698.75439 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63611.092 - tps: 49926.32656 + dps: 63623.37169 + tps: 49938.60625 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105909.54524 - tps: 117934.76794 + dps: 105911.2622 + tps: 117936.4849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32155.63178 - tps: 24997.81836 + dps: 32162.07441 + tps: 25004.26099 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36298.80706 - tps: 27032.87484 + dps: 36305.47485 + tps: 27039.54263 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148092.42485 - tps: 162989.58637 + dps: 148094.34726 + tps: 162991.50879 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49805.03672 - tps: 39769.41848 + dps: 49818.11611 + tps: 39782.49787 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64059.27433 - tps: 50301.67693 + dps: 64071.55402 + tps: 50313.95662 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106104.17476 - tps: 118152.35689 + dps: 106105.89173 + tps: 118154.07386 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32208.93361 - tps: 25039.53553 + dps: 32215.37624 + tps: 25045.97816 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36531.20247 - tps: 27216.90437 + dps: 36537.87027 + tps: 27223.57216 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123451.25268 - tps: 136830.95365 + dps: 123453.58534 + tps: 136833.28631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39355.76581 - tps: 33210.76338 + dps: 39366.42523 + tps: 33221.42281 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51931.65543 - tps: 43125.25178 + dps: 51939.77411 + tps: 43133.37046 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87933.11305 - tps: 98731.62948 + dps: 87934.92963 + tps: 98733.44606 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25090.47009 - tps: 20669.6011 + dps: 25096.5741 + tps: 20675.70511 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29074.38592 - tps: 22540.6554 + dps: 29079.83188 + tps: 22546.10137 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123713.78897 - tps: 137121.67416 + dps: 123716.12163 + tps: 137124.00682 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39436.83424 - tps: 33280.89407 + dps: 39447.49366 + tps: 33291.5535 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52302.11532 - tps: 43450.66748 + dps: 52310.23401 + tps: 43458.78616 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88093.93391 - tps: 98912.70701 + dps: 88095.75049 + tps: 98914.52359 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25134.02893 - tps: 20705.19503 + dps: 25140.13293 + tps: 20711.29904 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29261.64265 - tps: 22694.36023 + dps: 29267.08862 + tps: 22699.8062 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123451.25268 - tps: 136830.95365 + dps: 123453.58534 + tps: 136833.28631 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39982.38366 - tps: 32742.68646 + dps: 39992.07736 + tps: 32752.38016 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51279.42587 - tps: 41441.81326 + dps: 51284.50141 + tps: 41446.8888 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87933.11305 - tps: 98731.62948 + dps: 87934.92963 + tps: 98733.44606 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25823.77666 - tps: 20609.08679 + dps: 25829.50361 + tps: 20614.81374 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28931.9428 - tps: 21833.55648 + dps: 28936.01012 + tps: 21837.62379 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123713.78897 - tps: 137121.67416 + dps: 123716.12163 + tps: 137124.00682 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40063.6205 - tps: 32811.63288 + dps: 40073.3142 + tps: 32821.32658 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51637.2913 - tps: 41749.03785 + dps: 51642.36685 + tps: 41754.1134 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88093.93391 - tps: 98912.70701 + dps: 88095.75049 + tps: 98914.52359 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25866.82628 - tps: 20643.60672 + dps: 25872.55323 + tps: 20649.33367 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29118.53665 - tps: 21984.03245 + dps: 29122.60397 + tps: 21988.09976 } } dps_results: { From 0234d2862eb3d6efe5bd8a13fb8a5247f2b1cc5a Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 14:42:17 +0100 Subject: [PATCH 091/127] Update tests --- sim/shaman/elemental/TestElemental.results | 748 ++++++++++----------- 1 file changed, 374 insertions(+), 374 deletions(-) diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index 66d96cfc45..cd44e0e78a 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -39,84 +39,84 @@ dps_results: { key: "TestElemental-AllItems-AgileShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1839.71704 + tps: 1838.86864 } } dps_results: { key: "TestElemental-AllItems-AgonyandTorment" value: { dps: 27598.73356 - tps: 1681.29574 + tps: 1680.3836 } } dps_results: { key: "TestElemental-AllItems-Althor'sAbacus-50366" value: { dps: 40435.01561 - tps: 631.72669 + tps: 630.81048 } } dps_results: { key: "TestElemental-AllItems-AncientPetrifiedSeed-69001" value: { dps: 40275.64501 - tps: 636.01927 + tps: 635.60037 } } dps_results: { key: "TestElemental-AllItems-Anhuur'sHymnal-55889" value: { dps: 40283.64156 - tps: 630.189 + tps: 629.74953 } } dps_results: { key: "TestElemental-AllItems-Anhuur'sHymnal-56407" value: { dps: 40594.14068 - tps: 626.44841 + tps: 625.53981 } } dps_results: { key: "TestElemental-AllItems-ApparatusofKhaz'goroth-68972" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ApparatusofKhaz'goroth-69113" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ArrowofTime-72897" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-AustereShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1825.32909 + tps: 1824.48069 } } dps_results: { key: "TestElemental-AllItems-BattlegearoftheRagingElements" value: { dps: 28974.9924 - tps: 1623.40576 + tps: 1622.70701 } } dps_results: { key: "TestElemental-AllItems-BaubleofTrueBlood-50726" value: { dps: 39613.7366 - tps: 622.89621 + tps: 622.1178 hps: 100.80938 } } @@ -124,1295 +124,1295 @@ dps_results: { key: "TestElemental-AllItems-BedrockTalisman-58182" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-BellofEnragingResonance-59326" value: { dps: 41063.68737 - tps: 623.43839 + tps: 622.57703 } } dps_results: { key: "TestElemental-AllItems-BellofEnragingResonance-65053" value: { dps: 41243.30175 - tps: 623.27293 + tps: 622.41156 } } dps_results: { key: "TestElemental-AllItems-BindingPromise-67037" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-BlackBruise-50692" value: { dps: 27039.90883 - tps: 1639.48148 + tps: 1638.68829 } } dps_results: { key: "TestElemental-AllItems-Blood-SoakedAleMug-63843" value: { dps: 39928.70642 - tps: 631.93276 + tps: 631.46903 } } dps_results: { key: "TestElemental-AllItems-BloodofIsiset-55995" value: { dps: 39973.61736 - tps: 637.92011 + tps: 637.25142 } } dps_results: { key: "TestElemental-AllItems-BloodofIsiset-56414" value: { dps: 39982.80674 - tps: 640.03158 + tps: 639.36289 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { dps: 39686.38116 - tps: 621.64345 + tps: 620.27335 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { dps: 40876.01224 - tps: 621.6039 + tps: 620.23379 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { dps: 40098.2307 - tps: 624.58692 + tps: 623.72555 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { dps: 39753.79389 - tps: 624.651 + tps: 623.89176 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { dps: 40394.27854 - tps: 626.59891 + tps: 626.12424 } } dps_results: { key: "TestElemental-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-77210" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-77982" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Bone-LinkFetish-78002" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-BottledLightning-66879" value: { dps: 40512.1665 - tps: 628.37633 + tps: 626.9297 } } dps_results: { key: "TestElemental-AllItems-BottledWishes-77114" value: { dps: 42470.0539 - tps: 640.89573 + tps: 640.06764 } } dps_results: { key: "TestElemental-AllItems-BracingShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1805.19003 + tps: 1804.27407 } } dps_results: { key: "TestElemental-AllItems-Brawler'sTrophy-232015" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Bryntroll,theBoneArbiter-50709" value: { dps: 42765.90612 - tps: 1845.37946 + tps: 1844.4635 } } dps_results: { key: "TestElemental-AllItems-BurningShadowspiritDiamond" value: { dps: 42765.90612 - tps: 1845.37946 + tps: 1844.4635 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { dps: 41599.53261 - tps: 622.34116 + tps: 620.97105 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { dps: 41098.68775 - tps: 624.90506 + tps: 624.1756 } } dps_results: { key: "TestElemental-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ChaoticShadowspiritDiamond" value: { dps: 42574.1908 - tps: 1841.11361 + tps: 1840.36126 } } dps_results: { key: "TestElemental-AllItems-Coren'sChilledChromiumCoaster-232012" value: { dps: 40106.40489 - tps: 624.58692 + tps: 623.72555 } } dps_results: { key: "TestElemental-AllItems-CoreofRipeness-58184" value: { dps: 40995.03142 - tps: 633.99066 + tps: 632.62822 } } dps_results: { key: "TestElemental-AllItems-CorpseTongueCoin-50349" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77205" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77972" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CrecheoftheFinalDragon-77992" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CrushingWeight-59506" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CrushingWeight-65118" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-77208" value: { dps: 42359.06924 - tps: 1581.35592 + tps: 1580.42612 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-77980" value: { dps: 41919.64389 - tps: 1464.47633 + tps: 1463.70101 } } dps_results: { key: "TestElemental-AllItems-CunningoftheCruel-78000" value: { dps: 42769.04964 - tps: 1706.35241 + tps: 1705.36136 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Earthquake-62048" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Hurricane-62049" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Hurricane-62051" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-DarkmoonCard:Tsunami-62050" value: { dps: 41049.74438 - tps: 637.62645 + tps: 636.57147 } } dps_results: { key: "TestElemental-AllItems-Deathbringer'sWill-50363" value: { dps: 39943.91152 - tps: 624.40993 + tps: 623.68046 } } dps_results: { key: "TestElemental-AllItems-DestructiveShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.76353 + tps: 1826.01118 } } dps_results: { key: "TestElemental-AllItems-DislodgedForeignObject-50348" value: { dps: 40874.0154 - tps: 635.6348 + tps: 634.94946 } } dps_results: { key: "TestElemental-AllItems-Dwyer'sCaber-70141" value: { dps: 40219.86879 - tps: 623.93969 + tps: 623.16339 } } dps_results: { key: "TestElemental-AllItems-EffulgentShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1825.32909 + tps: 1824.48069 } } dps_results: { key: "TestElemental-AllItems-ElectrosparkHeartstarter-67118" value: { dps: 40267.49835 - tps: 631.96269 + tps: 631.20242 } } dps_results: { key: "TestElemental-AllItems-EmberShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1838.17308 + tps: 1837.15115 } } dps_results: { key: "TestElemental-AllItems-EnigmaticShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.76353 + tps: 1826.01118 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheCyclone-59473" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheCyclone-65140" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-EssenceoftheEternalFlame-69002" value: { dps: 40275.64501 - tps: 636.01927 + tps: 635.60037 } } dps_results: { key: "TestElemental-AllItems-EternalShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1825.32909 + tps: 1824.48069 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77200" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77977" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-EyeofUnmaking-77997" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-FallofMortality-59500" value: { dps: 41049.74438 - tps: 637.62645 + tps: 636.57147 } } dps_results: { key: "TestElemental-AllItems-FallofMortality-65124" value: { dps: 41208.02121 - tps: 639.26846 + tps: 638.20735 } } dps_results: { key: "TestElemental-AllItems-FieryQuintessence-69000" value: { dps: 41185.5067 - tps: 662.36765 + tps: 662.24426 } } dps_results: { key: "TestElemental-AllItems-Figurine-DemonPanther-52199" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-Figurine-DreamOwl-52354" value: { dps: 40849.81899 - tps: 632.57726 + tps: 631.1731 } } dps_results: { key: "TestElemental-AllItems-Figurine-EarthenGuardian-52352" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Figurine-JeweledSerpent-52353" value: { dps: 41958.71156 - tps: 632.90872 + tps: 631.50456 } } dps_results: { key: "TestElemental-AllItems-Figurine-KingofBoars-52351" value: { dps: 39882.85908 - tps: 638.12331 + tps: 637.07204 } } dps_results: { key: "TestElemental-AllItems-FireoftheDeep-77117" value: { dps: 40596.89301 - tps: 646.02809 + tps: 645.26285 } } dps_results: { key: "TestElemental-AllItems-FleetShadowspiritDiamond" value: { dps: 41656.77205 - tps: 1817.95523 + tps: 1816.97918 } } dps_results: { key: "TestElemental-AllItems-FluidDeath-58181" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ForlornShadowspiritDiamond" value: { dps: 41828.85408 - tps: 1830.79374 + tps: 1829.87778 } } dps_results: { key: "TestElemental-AllItems-FoulGiftoftheDemonLord-72898" value: { dps: 42035.54169 - tps: 657.16271 + tps: 655.76607 } } dps_results: { key: "TestElemental-AllItems-FuryofAngerforge-59461" value: { dps: 40133.19088 - tps: 624.54009 + tps: 623.67872 } } dps_results: { key: "TestElemental-AllItems-GaleofShadows-56138" value: { dps: 40595.11732 - tps: 640.15342 + tps: 639.24644 } } dps_results: { key: "TestElemental-AllItems-GaleofShadows-56462" value: { dps: 40922.46003 - tps: 641.47942 + tps: 640.78654 } } dps_results: { key: "TestElemental-AllItems-GearDetector-61462" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-GlowingTwilightScale-54589" value: { dps: 40482.37675 - tps: 632.22766 + tps: 631.29557 } } dps_results: { key: "TestElemental-AllItems-GraceoftheHerald-55266" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-GraceoftheHerald-56295" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HarmlightToken-63839" value: { dps: 40675.98076 - tps: 804.71822 + tps: 803.67247 } } dps_results: { key: "TestElemental-AllItems-Harrison'sInsigniaofPanache-65803" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HeartofIgnacious-59514" value: { dps: 41170.64357 - tps: 650.29179 + tps: 649.71727 } } dps_results: { key: "TestElemental-AllItems-HeartofIgnacious-65110" value: { dps: 41321.7168 - tps: 650.01592 + tps: 649.20733 } } dps_results: { key: "TestElemental-AllItems-HeartofRage-59224" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HeartofRage-65072" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HeartofSolace-55868" value: { dps: 40372.06955 - tps: 633.85248 + tps: 632.94364 } } dps_results: { key: "TestElemental-AllItems-HeartofSolace-56393" value: { dps: 40256.46949 - tps: 635.07515 + tps: 634.32847 } } dps_results: { key: "TestElemental-AllItems-HeartofThunder-55845" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HeartofThunder-56370" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-HeartoftheVile-66969" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Heartpierce-50641" value: { dps: 42765.90612 - tps: 1845.37946 + tps: 1844.4635 } } dps_results: { key: "TestElemental-AllItems-ImpassiveShadowspiritDiamond" value: { dps: 41641.27325 - tps: 1826.76353 + tps: 1826.01118 } } dps_results: { key: "TestElemental-AllItems-ImpatienceofYouth-62464" value: { dps: 39959.66762 - tps: 637.32573 + tps: 636.24497 } } dps_results: { key: "TestElemental-AllItems-ImpatienceofYouth-62469" value: { dps: 39959.66762 - tps: 637.32573 + tps: 636.24497 } } dps_results: { key: "TestElemental-AllItems-ImpetuousQuery-55881" value: { dps: 39973.61736 - tps: 637.92011 + tps: 637.25142 } } dps_results: { key: "TestElemental-AllItems-ImpetuousQuery-56406" value: { dps: 39982.80674 - tps: 640.03158 + tps: 639.36289 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-77211" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-77983" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-IndomitablePride-78003" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-InsigniaofDiplomacy-61433" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77203" value: { dps: 42335.73024 - tps: 666.1176 + tps: 664.81086 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77971" value: { dps: 42365.13502 - tps: 657.32037 + tps: 656.16528 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheCorruptedMind-77991" value: { dps: 42716.07461 - tps: 676.04259 + tps: 674.79921 } } dps_results: { key: "TestElemental-AllItems-InsigniaoftheEarthenLord-61429" value: { dps: 40602.42499 - tps: 634.20082 + tps: 633.6247 } } dps_results: { key: "TestElemental-AllItems-JarofAncientRemedies-59354" value: { dps: 39753.79389 - tps: 644.7276 + tps: 643.56492 } } dps_results: { key: "TestElemental-AllItems-JarofAncientRemedies-65029" value: { dps: 39753.79389 - tps: 646.89305 + tps: 646.01367 } } dps_results: { key: "TestElemental-AllItems-JawsofDefeat-68926" value: { dps: 41235.88579 - tps: 624.76379 + tps: 623.965 } } dps_results: { key: "TestElemental-AllItems-JawsofDefeat-69111" value: { dps: 41430.79481 - tps: 626.21876 + tps: 625.2557 } } dps_results: { key: "TestElemental-AllItems-JujuofNimbleness-63840" value: { dps: 39928.70642 - tps: 631.93276 + tps: 631.46903 } } dps_results: { key: "TestElemental-AllItems-KeytotheEndlessChamber-55795" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-KeytotheEndlessChamber-56328" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-KiroptyricSigil-77113" value: { dps: 40618.933 - tps: 636.29177 + tps: 635.46368 } } dps_results: { key: "TestElemental-AllItems-KvaldirBattleStandard-59685" value: { dps: 39761.9463 - tps: 631.00851 + tps: 630.83592 } } dps_results: { key: "TestElemental-AllItems-KvaldirBattleStandard-59689" value: { dps: 39761.9463 - tps: 631.00851 + tps: 630.83592 } } dps_results: { key: "TestElemental-AllItems-LadyLa-La'sSingingShell-67152" value: { dps: 39988.76108 - tps: 621.73065 + tps: 620.8571 } } dps_results: { key: "TestElemental-AllItems-LastWord-50708" value: { dps: 42765.90612 - tps: 1845.37946 + tps: 1844.4635 } } dps_results: { key: "TestElemental-AllItems-LeadenDespair-55816" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-LeadenDespair-56347" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-LeftEyeofRajh-56102" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-LeftEyeofRajh-56427" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-LicensetoSlay-58180" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-MagnetiteMirror-55814" value: { dps: 39688.30392 - tps: 620.35243 + tps: 619.80548 } } dps_results: { key: "TestElemental-AllItems-MagnetiteMirror-56345" value: { dps: 39688.30392 - tps: 620.35243 + tps: 619.80548 } } dps_results: { key: "TestElemental-AllItems-MandalaofStirringPatterns-62467" value: { dps: 40008.90842 - tps: 630.02257 + tps: 628.7127 } } dps_results: { key: "TestElemental-AllItems-MandalaofStirringPatterns-62472" value: { dps: 40008.90842 - tps: 630.02257 + tps: 628.7127 } } dps_results: { key: "TestElemental-AllItems-MarkofKhardros-56132" value: { dps: 40145.53153 - tps: 639.62152 + tps: 639.18471 } } dps_results: { key: "TestElemental-AllItems-MarkofKhardros-56458" value: { dps: 40297.96539 - tps: 636.34982 + tps: 635.86166 } } dps_results: { key: "TestElemental-AllItems-MatrixRestabilizer-68994" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-MatrixRestabilizer-69150" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-MightoftheOcean-55251" value: { dps: 39688.30392 - tps: 620.35243 + tps: 619.80548 } } dps_results: { key: "TestElemental-AllItems-MightoftheOcean-56285" value: { dps: 39688.30392 - tps: 620.35243 + tps: 619.80548 } } dps_results: { key: "TestElemental-AllItems-MirrorofBrokenImages-62466" value: { dps: 40043.4944 - tps: 638.86665 + tps: 638.16753 } } dps_results: { key: "TestElemental-AllItems-MirrorofBrokenImages-62471" value: { dps: 40043.4944 - tps: 638.86665 + tps: 638.16753 } } dps_results: { key: "TestElemental-AllItems-MithrilStopwatch-232013" value: { dps: 41170.50784 - tps: 628.53377 + tps: 627.62915 } } dps_results: { key: "TestElemental-AllItems-MoonwellChalice-70142" value: { dps: 41513.73782 - tps: 654.31555 + tps: 652.91313 } } dps_results: { key: "TestElemental-AllItems-MoonwellPhial-70143" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-NecromanticFocus-68982" value: { dps: 41770.95956 - tps: 656.12252 + tps: 655.10245 } } dps_results: { key: "TestElemental-AllItems-NecromanticFocus-69139" value: { dps: 42217.11999 - tps: 662.53113 + tps: 661.5328 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-77188" value: { dps: 42802.96938 - tps: 1958.75993 + tps: 1957.85152 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-78472" value: { dps: 42819.33752 - tps: 1975.12807 + tps: 1974.21966 } } dps_results: { key: "TestElemental-AllItems-No'Kaled,theElementsofDeath-78481" value: { dps: 42788.47388 - tps: 1944.26443 + tps: 1943.35602 } } dps_results: { key: "TestElemental-AllItems-Oremantle'sFavor-61448" value: { dps: 39911.22325 - tps: 621.57729 + tps: 620.14984 } } dps_results: { key: "TestElemental-AllItems-PetrifiedPickledEgg-232014" value: { dps: 40972.85225 - tps: 636.97806 + tps: 635.92486 } } dps_results: { key: "TestElemental-AllItems-PetrifiedTwilightScale-54591" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-PhylacteryoftheNamelessLich-50365" value: { dps: 40423.19003 - tps: 624.15003 + tps: 623.49323 } } dps_results: { key: "TestElemental-AllItems-PorcelainCrab-55237" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-PorcelainCrab-56280" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-PowerfulShadowspiritDiamond" value: { dps: 41622.10234 - tps: 1825.32909 + tps: 1824.48069 } } dps_results: { key: "TestElemental-AllItems-Prestor'sTalismanofMachination-59441" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Prestor'sTalismanofMachination-65026" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Rainsong-55854" value: { dps: 39753.79389 - tps: 624.65951 + tps: 623.90878 } } dps_results: { key: "TestElemental-AllItems-Rainsong-56377" value: { dps: 39753.79389 - tps: 624.65258 + tps: 623.89493 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-77195" value: { dps: 36609.31247 - tps: 2250.72616 + tps: 2250.36627 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-78475" value: { dps: 37868.19687 - tps: 2382.04555 + tps: 2381.66505 } } dps_results: { key: "TestElemental-AllItems-Rathrak,thePoisonousMind-78484" value: { dps: 35643.06533 - tps: 2210.44207 + tps: 2209.98079 } } dps_results: { key: "TestElemental-AllItems-ReflectionoftheLight-77115" value: { dps: 41487.25371 - tps: 625.27038 + tps: 624.67813 } } dps_results: { key: "TestElemental-AllItems-RegaliaoftheRagingElements" value: { dps: 34964.29363 - tps: 1751.61606 + tps: 1750.93101 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77201" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77978" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ResolveofUndying-77998" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ReverberatingShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1839.71704 + tps: 1838.86864 } } dps_results: { key: "TestElemental-AllItems-RevitalizingShadowspiritDiamond" value: { dps: 42553.8604 - tps: 1839.7088 + tps: 1838.85492 } } dps_results: { key: "TestElemental-AllItems-Ricket'sMagneticFireball-70144" value: { dps: 40098.09046 - tps: 621.34649 + tps: 619.91904 } } dps_results: { key: "TestElemental-AllItems-RightEyeofRajh-56100" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RightEyeofRajh-56431" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RosaryofLight-72901" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RottingSkull-77116" value: { dps: 40216.88382 - tps: 620.29943 + tps: 619.62752 } } dps_results: { key: "TestElemental-AllItems-RuneofZeth-68998" value: { dps: 41668.8509 - tps: 656.43999 + tps: 656.15722 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { dps: 41285.65837 - tps: 622.02132 + tps: 620.65122 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { dps: 41378.21103 - tps: 622.11563 + tps: 620.74553 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { dps: 40634.05106 - tps: 628.20197 + tps: 627.54343 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { dps: 40974.71896 - tps: 627.47627 + tps: 626.8156 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ScalesofLife-68915" value: { dps: 39610.91078 - tps: 623.08952 + tps: 622.31957 hps: 322.18377 } } @@ -1420,7 +1420,7 @@ dps_results: { key: "TestElemental-AllItems-ScalesofLife-69109" value: { dps: 39610.91078 - tps: 623.08952 + tps: 622.31957 hps: 363.42027 } } @@ -1428,791 +1428,791 @@ dps_results: { key: "TestElemental-AllItems-Schnottz'sMedallionofCommand-65805" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-SeaStar-55256" value: { dps: 40297.27683 - tps: 621.83733 + tps: 620.4434 } } dps_results: { key: "TestElemental-AllItems-SeaStar-56290" value: { dps: 40799.55569 - tps: 621.45551 + tps: 620.05113 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77204" value: { dps: 41939.3486 - tps: 646.52435 + tps: 645.52877 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77969" value: { dps: 41609.8855 - tps: 644.47385 + tps: 643.01605 } } dps_results: { key: "TestElemental-AllItems-SealoftheSevenSigns-77989" value: { dps: 42147.53579 - tps: 655.79942 + tps: 654.69935 } } dps_results: { key: "TestElemental-AllItems-Shadowmourne-49623" value: { dps: 43299.35489 - tps: 1873.11504 + tps: 1872.14752 } } dps_results: { key: "TestElemental-AllItems-ShardofWoe-60233" value: { dps: 40176.17317 - tps: 613.32603 + tps: 612.29212 } } dps_results: { key: "TestElemental-AllItems-Shrine-CleansingPurifier-63838" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Sindragosa'sFlawlessFang-50364" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Skardyn'sGrace-56115" value: { dps: 40096.71698 - tps: 642.33476 + tps: 641.39992 } } dps_results: { key: "TestElemental-AllItems-Skardyn'sGrace-56440" value: { dps: 40151.81144 - tps: 640.98869 + tps: 639.69445 } } dps_results: { key: "TestElemental-AllItems-Sorrowsong-55879" value: { dps: 40650.78628 - tps: 635.68317 + tps: 635.01448 } } dps_results: { key: "TestElemental-AllItems-Sorrowsong-56400" value: { dps: 40736.11575 - tps: 641.09521 + tps: 640.42652 } } dps_results: { key: "TestElemental-AllItems-Soul'sAnguish-66994" value: { dps: 39688.30392 - tps: 620.35243 + tps: 619.80548 } } dps_results: { key: "TestElemental-AllItems-SoulCasket-58183" value: { dps: 41496.58361 - tps: 639.21753 + tps: 638.13677 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77206" value: { dps: 40949.8228 - tps: 649.11003 + tps: 647.94645 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77970" value: { dps: 40788.30289 - tps: 649.84539 + tps: 648.75329 } } dps_results: { key: "TestElemental-AllItems-SoulshifterVortex-77990" value: { dps: 40909.8369 - tps: 650.70155 + tps: 649.41174 } } dps_results: { key: "TestElemental-AllItems-SpidersilkSpindle-68981" value: { dps: 40317.63646 - tps: 639.40792 + tps: 638.64268 } } dps_results: { key: "TestElemental-AllItems-SpidersilkSpindle-69138" value: { dps: 40446.55829 - tps: 645.19545 + tps: 644.43022 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sBattlegear" value: { dps: 28364.09538 - tps: 1617.80777 + tps: 1617.20815 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sRegalia" value: { dps: 36240.86039 - tps: 1747.39196 + tps: 1746.63005 } } dps_results: { key: "TestElemental-AllItems-Spiritwalker'sVestments" value: { - dps: 34997.45683 - tps: 1756.78837 + dps: 34715.09325 + tps: 1731.74858 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77202" value: { dps: 40631.41919 - tps: 640.56449 + tps: 639.83096 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77973" value: { dps: 40670.34354 - tps: 641.90112 + tps: 641.00453 } } dps_results: { key: "TestElemental-AllItems-StarcatcherCompass-77993" value: { dps: 40542.05189 - tps: 646.41355 + tps: 645.18151 } } dps_results: { key: "TestElemental-AllItems-StayofExecution-68996" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-Stonemother'sKiss-61411" value: { dps: 40824.90522 - tps: 631.61854 + tps: 630.6843 } } dps_results: { key: "TestElemental-AllItems-StumpofTime-62465" value: { dps: 40680.36577 - tps: 627.03628 + tps: 626.45364 } } dps_results: { key: "TestElemental-AllItems-StumpofTime-62470" value: { dps: 40669.75225 - tps: 629.06597 + tps: 628.52442 } } dps_results: { key: "TestElemental-AllItems-SymbioticWorm-59332" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-SymbioticWorm-65048" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-TalismanofSinisterOrder-65804" value: { dps: 41108.64007 - tps: 646.07506 + tps: 644.56577 } } dps_results: { key: "TestElemental-AllItems-Tank-CommanderInsignia-63841" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-TearofBlood-55819" value: { dps: 40616.82047 - tps: 633.32869 + tps: 632.35378 } } dps_results: { key: "TestElemental-AllItems-TearofBlood-56351" value: { dps: 40899.57502 - tps: 636.21916 + tps: 635.16796 } } dps_results: { key: "TestElemental-AllItems-TendrilsofBurrowingDark-55810" value: { dps: 40653.71761 - tps: 640.59099 + tps: 639.59591 } } dps_results: { key: "TestElemental-AllItems-TendrilsofBurrowingDark-56339" value: { dps: 41495.00258 - tps: 640.07967 + tps: 639.41098 } } dps_results: { key: "TestElemental-AllItems-TheHungerer-68927" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-TheHungerer-69112" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Theralion'sMirror-59519" value: { dps: 41925.58212 - tps: 655.24761 + tps: 654.215 } } dps_results: { key: "TestElemental-AllItems-Theralion'sMirror-65105" value: { dps: 41956.0386 - tps: 657.0447 + tps: 655.97059 } } dps_results: { key: "TestElemental-AllItems-Throngus'sFinger-56121" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Throngus'sFinger-56449" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-77190" value: { dps: 55309.61029 - tps: 1905.35953 + tps: 1904.07951 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-78477" value: { dps: 56725.0825 - tps: 1914.71163 + tps: 1913.27319 } } dps_results: { key: "TestElemental-AllItems-Ti'tahk,theStepsofTime-78486" value: { dps: 53925.09022 - tps: 1899.37646 + tps: 1898.37795 } } dps_results: { key: "TestElemental-AllItems-Tia'sGrace-55874" value: { dps: 39973.61736 - tps: 637.92011 + tps: 637.25142 } } dps_results: { key: "TestElemental-AllItems-Tia'sGrace-56394" value: { dps: 39982.80674 - tps: 640.03158 + tps: 639.36289 } } dps_results: { key: "TestElemental-AllItems-TidefuryRaiment" value: { dps: 25120.7735 - tps: 1425.3294 + tps: 1424.32474 } } dps_results: { key: "TestElemental-AllItems-TinyAbominationinaJar-50706" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 40504.54803 - tps: 720.95744 + dps: 40502.12256 + tps: 716.91882 } } dps_results: { key: "TestElemental-AllItems-UnheededWarning-59520" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-UnquenchableFlame-67101" value: { dps: 39687.78416 - tps: 621.21688 + tps: 619.82573 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-62463" value: { dps: 39959.66762 - tps: 637.32573 + tps: 636.24497 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-62468" value: { dps: 39959.66762 - tps: 637.32573 + tps: 636.24497 } } dps_results: { key: "TestElemental-AllItems-UnsolvableRiddle-68709" value: { dps: 39959.66762 - tps: 637.32573 + tps: 636.24497 } } dps_results: { key: "TestElemental-AllItems-Val'anyr,HammerofAncientKings-46017" value: { dps: 29265.25165 - tps: 1674.90547 + tps: 1674.0487 } } dps_results: { key: "TestElemental-AllItems-VariablePulseLightningCapacitor-68925" value: { dps: 42439.57936 - tps: 1701.34053 + tps: 1700.32062 } } dps_results: { key: "TestElemental-AllItems-Varo'then'sBrooch-72899" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VeilofLies-72900" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VesselofAcceleration-68995" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VesselofAcceleration-69167" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77207" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77979" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VialofShadows-77999" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VialofStolenMemories-59515" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VialofStolenMemories-65109" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { dps: 40944.42072 - tps: 621.67361 + tps: 620.3035 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { dps: 41096.52901 - tps: 621.8286 + tps: 620.4585 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { dps: 39687.78416 - tps: 621.25942 + tps: 619.88932 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { dps: 40510.81708 - tps: 642.30729 + tps: 641.39845 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { dps: 40145.84438 - tps: 624.68055 + tps: 623.81919 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { dps: 40152.61821 - tps: 643.34834 + tps: 642.59476 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { dps: 40511.78628 - tps: 625.38192 + tps: 624.68379 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { dps: 40673.35211 - tps: 625.13603 + tps: 624.4379 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-VolcanicBattlegear" value: { dps: 28619.18615 - tps: 1576.92975 + tps: 1576.35148 } } dps_results: { key: "TestElemental-AllItems-VolcanicRegalia" value: { dps: 36830.69088 - tps: 1716.79949 + tps: 1716.08913 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77198" value: { dps: 42982.83023 - tps: 663.62079 + tps: 662.1001 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77975" value: { dps: 42593.89347 - tps: 659.14795 + tps: 657.59503 } } dps_results: { key: "TestElemental-AllItems-WillofUnbinding-77995" value: { dps: 43434.74144 - tps: 669.05129 + tps: 667.1947 } } dps_results: { key: "TestElemental-AllItems-WitchingHourglass-55787" value: { dps: 40878.50428 - tps: 639.72815 + tps: 638.75764 } } dps_results: { key: "TestElemental-AllItems-WitchingHourglass-56320" value: { dps: 41329.71498 - tps: 649.44621 + tps: 648.59753 } } dps_results: { key: "TestElemental-AllItems-World-QuellerFocus-63842" value: { dps: 39921.35496 - tps: 632.27512 + tps: 631.04938 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77197" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77974" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-WrathofUnchaining-77994" value: { dps: 39753.79389 - tps: 624.68078 + tps: 623.95131 } } dps_results: { key: "TestElemental-AllItems-Za'brox'sLuckyTooth-63742" value: { dps: 40160.79451 - tps: 636.52423 + tps: 636.08743 } } dps_results: { key: "TestElemental-AllItems-Za'brox'sLuckyTooth-63745" value: { dps: 40160.79451 - tps: 636.52423 + tps: 636.08743 } } dps_results: { key: "TestElemental-Average-Default" value: { dps: 43076.49026 - tps: 1854.88052 + tps: 1854.11533 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 109551.0542 - tps: 46970.19173 + tps: 46919.98782 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42999.25641 - tps: 1818.12014 + tps: 1817.53734 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49594.63809 - tps: 2044.41938 + tps: 2041.50541 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 85191.16514 - tps: 45196.44477 + tps: 45159.2985 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33430.38976 - tps: 1547.65037 + tps: 1545.69372 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36727.49286 - tps: 1613.54962 + tps: 1612.62795 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 68653.68372 - tps: 13619.21317 + tps: 13599.95558 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 43053.41515 - tps: 1836.15885 + tps: 1834.74733 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49902.0258 - tps: 1962.19838 + tps: 1955.77801 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 52326.43231 - tps: 12382.88252 + tps: 12356.09823 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33309.37434 - tps: 1545.65067 + tps: 1543.56936 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36906.10938 - tps: 1668.25171 + tps: 1665.1489 } } dps_results: { @@ -2261,84 +2261,84 @@ dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 168245.40155 - tps: 83287.23596 + tps: 83203.5513 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42605.94291 - tps: 1830.78815 + tps: 1830.04816 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49802.0821 - tps: 2046.90175 + tps: 2043.20178 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 136879.07472 - tps: 76413.38103 + tps: 76331.6609 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33069.47909 - tps: 1554.70318 + tps: 1553.2829 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36883.71192 - tps: 1613.89208 + tps: 1613.02379 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 - tps: 13653.82025 + tps: 13632.95104 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42573.14869 - tps: 1801.19088 + tps: 1799.97082 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50165.73077 - tps: 1964.33275 + tps: 1959.40374 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 - tps: 12351.88952 + tps: 12323.43786 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32765.03048 - tps: 1539.20677 + tps: 1536.87895 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 37095.64305 - tps: 1670.174 + tps: 1666.39519 } } dps_results: { @@ -2387,84 +2387,84 @@ dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 151539.96327 - tps: 81916.98445 + tps: 81879.87775 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41182.56717 - tps: 1794.48565 + tps: 1793.08365 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48600.90908 - tps: 2042.18726 + tps: 2035.95837 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 123566.89054 - tps: 75270.64526 + tps: 75235.06515 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31892.66496 - tps: 1553.60656 + tps: 1551.70921 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35906.27685 - tps: 1649.34392 + tps: 1649.15113 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 65463.96018 - tps: 13653.82025 + tps: 13632.95104 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41178.82388 - tps: 1813.86613 + tps: 1813.23926 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49041.65946 - tps: 2007.38545 + tps: 2004.4551 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50651.54887 - tps: 12351.88952 + tps: 12323.43786 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31865.35545 - tps: 1539.31126 + tps: 1537.37216 } } dps_results: { key: "TestElemental-Settings-Orc-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35866.3283 - tps: 1611.05168 + tps: 1608.02755 } } dps_results: { @@ -2513,84 +2513,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 106945.615 - tps: 47188.60212 + tps: 47138.43057 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42708.96798 - tps: 1862.72007 + tps: 1861.92326 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49785.05407 - tps: 2059.74222 + tps: 2055.75816 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 83022.28107 - tps: 45570.76149 + tps: 45533.67284 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 33055.42261 - tps: 1561.74625 + tps: 1559.55579 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36767.40917 - tps: 1629.81519 + tps: 1629.11946 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 66349.05733 - tps: 13824.00591 + tps: 13809.49756 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42765.90612 - tps: 1845.37946 + tps: 1844.4635 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49516.57831 - tps: 2101.45404 + tps: 2097.55019 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 50346.3404 - tps: 12404.03115 + tps: 12382.89684 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32851.51641 - tps: 1534.84512 + tps: 1532.31207 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-DefaultTalents-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36165.73033 - tps: 1633.55192 + tps: 1631.42476 } } dps_results: { @@ -2639,84 +2639,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 165440.06407 - tps: 83676.82543 + tps: 83589.94344 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 41918.50679 - tps: 1811.92806 + tps: 1811.47032 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 50019.69491 - tps: 2060.46918 + tps: 2058.28987 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 134720.21118 - tps: 76444.25383 + tps: 76353.54883 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32873.87863 - tps: 1545.22676 + tps: 1543.3958 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36941.38646 - tps: 1629.81519 + tps: 1629.81463 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 - tps: 13707.26705 + tps: 13689.94868 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 42364.6583 - tps: 1834.48968 + tps: 1833.85574 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 49794.42621 - tps: 2102.86919 + tps: 2099.73003 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 - tps: 12306.38791 + tps: 12278.74374 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 32828.1348 - tps: 1553.29546 + tps: 1550.98754 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsAoE-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 36355.97809 - tps: 1634.40702 + tps: 1632.50025 } } dps_results: { @@ -2765,84 +2765,84 @@ dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 148204.04384 - tps: 82140.43391 + tps: 82113.58425 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40691.9033 - tps: 1807.56035 + tps: 1806.19632 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 48073.42607 - tps: 2022.53489 + tps: 2016.67989 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 120749.30526 - tps: 75500.50683 + tps: 75459.60118 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31491.36783 - tps: 1544.30217 + tps: 1542.27765 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-aoe-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35195.71022 - tps: 1621.82366 + tps: 1620.69136 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongMultiTarget" value: { dps: 63340.15471 - tps: 13707.26705 + tps: 13689.94868 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-LongSingleTarget" value: { dps: 40896.46641 - tps: 1833.78092 + tps: 1833.17132 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-FullBuffs-0.0yards-ShortSingleTarget" value: { dps: 47825.30747 - tps: 2069.51475 + tps: 2066.46673 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongMultiTarget" value: { dps: 48548.89989 - tps: 12306.38791 + tps: 12278.74374 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-LongSingleTarget" value: { dps: 31453.11319 - tps: 1536.2472 + tps: 1534.06122 } } dps_results: { key: "TestElemental-Settings-Troll-p3.default-TalentsImprovedShields-Standard-default-NoBuffs-0.0yards-ShortSingleTarget" value: { dps: 35363.27966 - tps: 1603.70191 + tps: 1602.53066 } } dps_results: { @@ -2891,6 +2891,6 @@ dps_results: { key: "TestElemental-SwitchInFrontOfTarget-Default" value: { dps: 42291.35373 - tps: 1845.37946 + tps: 1844.4635 } } From ea5e5cd81057e893670f48ab7a2225c9b322cbb1 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 15:56:29 +0100 Subject: [PATCH 092/127] PR Feedback --- sim/common/cata/enchant_effects.go | 10 +- sim/common/shared/shared_utils.go | 14 +- sim/common/tbc/enchant_effects.go | 6 +- sim/common/wotlk/enchant_effects.go | 12 +- sim/core/attack.go | 8 +- sim/core/bulksim.go | 2 +- sim/core/character.go | 8 +- sim/core/database.go | 36 +- sim/core/item_sets.go | 20 +- sim/core/item_swaps.go | 153 +++++---- sim/death_knight/icebound_fortitude.go | 6 +- sim/death_knight/runeforging.go | 6 +- sim/death_knight/talents_unholy.go | 2 +- sim/druid/druid.go | 2 +- sim/druid/talents.go | 4 +- sim/mage/items.go | 8 +- sim/mage/mage.go | 5 +- sim/priest/_circle_of_healing.go | 2 +- sim/priest/_greater_heal.go | 4 +- sim/priest/_power_word_shield.go | 8 +- sim/priest/_prayer_of_healing.go | 4 +- sim/priest/_prayer_of_mending.go | 4 +- sim/priest/_renew.go | 2 +- sim/priest/_set_bonuses.go | 16 +- sim/priest/talents.go | 2 +- sim/rogue/assassination/assassination.go | 1 + sim/rogue/{ => assassination}/vendetta.go | 33 +- sim/rogue/items.go | 21 +- sim/rogue/rogue.go | 1 - sim/shaman/weapon_imbues.go | 2 +- sim/warlock/warlock.go | 22 +- sim/warrior/fury/TestFury.results | 384 +++++++++++----------- 32 files changed, 424 insertions(+), 384 deletions(-) rename sim/rogue/{ => assassination}/vendetta.go (55%) diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index da712621ea..6b16a3029b 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -45,7 +45,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4066, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(4066, aura) }) // Enchant: 4067, Spell: 74197 - Enchant Weapon - Avalanche @@ -114,7 +114,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4067, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(4067, aura) }) // Enchant: 4074, Spell: 74211 - Enchant Weapon - Elemental Slayer @@ -149,7 +149,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4074, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(4074, aura) }) // Enchant: 4083, Spell: 74223 - Enchant Weapon - Hurricane @@ -233,7 +233,7 @@ func init() { }, })) - character.ItemSwap.RegisterEnchantProc(4083, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(4083, aura) }) // Enchant: 4084, Spell: 74225 - Enchant Weapon - Heartsong @@ -311,7 +311,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(4099, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(4099, aura) }) // Enchant: 4115, Spell: 75172 - Lightweave Embroidery diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index c42921ed58..94f16c8441 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -111,7 +111,7 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c var eligibleSlotsForItem []proto.ItemSlot if !isEnchant { eligibleSlotsForItem = character.ItemSwap.EligibleSlotsForItem(effectID) - itemExistsInMainEquip = !itemSwapIsEnabled || itemSwapIsEnabled && character.ItemSwap.ItemExistsInMainEquip(effectID, eligibleSlotsForItem) + itemExistsInMainEquip = !itemSwapIsEnabled || character.ItemSwap.ItemExistsInMainEquip(effectID, eligibleSlotsForItem) } procID := core.ActionID{SpellID: config.AuraID} @@ -197,12 +197,12 @@ func factory_StatBonusEffect(config ProcStatBonusEffect, extraSpell func(agent c } if isEnchant { - character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura) } else { - if itemExistsInMainEquip && (slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) || slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket2)) { + if itemExistsInMainEquip && core.CheckSliceOverlap(eligibleSlotsForItem, core.TrinketSlots()) { character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) } - character.ItemSwap.RegisterProc(effectID, triggerAura) + character.ItemSwap.RegisterProcWithSlots(effectID, triggerAura, eligibleSlotsForItem) } }) } @@ -438,11 +438,11 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { }, }) - if itemExistsInMainEquip && slices.Contains(eligibleSlotsForItem, proto.ItemSlot_ItemSlotTrinket1) { + if itemExistsInMainEquip && core.CheckSliceOverlap(eligibleSlotsForItem, core.TrinketSlots()) { character.TrinketProcBuffs = append(character.TrinketProcBuffs, procAura) } - character.ItemSwap.RegisterProc(config.ItemID, triggerAura) + character.ItemSwap.RegisterProcWithSlots(config.ItemID, triggerAura, eligibleSlotsForItem) }) } @@ -546,7 +546,7 @@ func NewProcDamageEffect(config ProcDamageEffect) { triggerAura := core.MakeProcTriggerAura(&character.Unit, triggerConfig) if isEnchant { - character.ItemSwap.RegisterEnchantProc(effectID, triggerAura, config.Slots) + character.ItemSwap.RegisterEnchantProc(effectID, triggerAura) } else { character.ItemSwap.RegisterProc(effectID, triggerAura) } diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index fc5eb34f95..0c3c1d64c8 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -120,7 +120,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(2673, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(2673, aura) }) core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { @@ -162,7 +162,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3225, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3225, aura) }) // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 @@ -205,7 +205,7 @@ func init() { }) meleeWeaponSlots := core.MeleeWeaponSlots() - character.ItemSwap.RegisterEnchantProc(3273, aura, core.Ternary(isMH, meleeWeaponSlots[:1], meleeWeaponSlots[1:])) + character.ItemSwap.RegisterEnchantProcWithSlots(3273, aura, core.Ternary(isMH, meleeWeaponSlots[:1], meleeWeaponSlots[1:])) } core.NewEnchantEffect(3273, func(agent core.Agent) { diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 2c474c4f64..92f302af91 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -53,7 +53,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3251, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3251, aura) }) // Enchant: 3239, Spell: 44525 - Icebreaker @@ -93,7 +93,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3239, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3239, aura) }) // Enchant: 3607, Spell: 55076, Item: 41146 - Sun Scope @@ -180,7 +180,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3789, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3789, aura) }) // TODO: These are stand-in values without any real reference. @@ -208,7 +208,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3241, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3241, aura) }) // Enchant: 3790, Spell: 59630 - Black Magic @@ -355,7 +355,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3728, aura, []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}) + character.ItemSwap.RegisterEnchantProc(3728, aura) }) // Enchant: 3730, Spell: 55777 - Swordguard Embroidery @@ -411,6 +411,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3870, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3870, aura) }) } diff --git a/sim/core/attack.go b/sim/core/attack.go index 1d3fdf8f4a..8f0c90f275 100644 --- a/sim/core/attack.go +++ b/sim/core/attack.go @@ -858,11 +858,9 @@ func (aa *AutoAttacks) newDynamicProcManagerWithDynamicProcMask(ppm float64, fix dpm := aa.newDynamicProcManager(ppm, fixedProcChance, procMaskFn()) if aa.character != nil { - if aa.character != nil { - aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { - dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMaskFn()) - }) - } + aa.character.RegisterItemSwapCallback(AllWeaponSlots(), func(sim *Simulation, slot proto.ItemSlot) { + dpm = aa.character.AutoAttacks.newDynamicProcManager(ppm, fixedProcChance, procMaskFn()) + }) } return &dpm diff --git a/sim/core/bulksim.go b/sim/core/bulksim.go index 8e2d2c4125..fd33da0692 100644 --- a/sim/core/bulksim.go +++ b/sim/core/bulksim.go @@ -407,7 +407,7 @@ func buildCombos(signals simsignals.Signals, baseSettings *proto.RaidSimRequest, if !ok { return nil, 0, fmt.Errorf("unknown item with id %d in bulk settings", is.Id) } - for _, slot := range EligibleSlotsForItem(&item, isFuryWarrior) { + for _, slot := range eligibleSlotsForItem(&item, isFuryWarrior) { distinctItemSlotCombos = append(distinctItemSlotCombos, &itemWithSlot{ Item: is, Slot: slot, diff --git a/sim/core/character.go b/sim/core/character.go index 2f1ec34444..b25f8523a9 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -811,17 +811,13 @@ func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Sta } } - character.RegisterAura(Aura{ + MakePermanent(character.RegisterAura(Aura{ Label: "Armor Specialization", - Duration: NeverExpires, BuildPhase: CharacterBuildPhaseTalents, OnGain: func(aura *Aura, sim *Simulation) { processArmorSpecialization(sim) }, - OnReset: func(aura *Aura, sim *Simulation) { - aura.Activate(sim) - }, - }) + })) if character.ItemSwap.IsEnabled() { character.RegisterItemSwapCallback([]proto.ItemSlot{ diff --git a/sim/core/database.go b/sim/core/database.go index 683f069e1d..319c6e5694 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -307,6 +307,40 @@ func (equipment *Equipment) EquipItem(item Item) { } } +func (equipment *Equipment) containsItem(itemID int32) bool { + for _, item := range equipment { + if item.ID == itemID { + return true + } + } + return false +} + +func (equipment *Equipment) containsEnchant(effectID int32) bool { + for _, item := range equipment { + if item.Enchant.EffectID == effectID || item.TempEnchant == effectID { + return true + } + } + return false +} + +func (equipment *Equipment) containsEnchantInSlot(effectID int32, slot proto.ItemSlot) bool { + if equipment[slot].Enchant.EffectID == effectID || equipment[slot].TempEnchant == effectID { + return true + } + return false +} + +func (equipment *Equipment) containsItemInSlots(itemID int32, possibleSlots []proto.ItemSlot) bool { + for _, slot := range possibleSlots { + if equipment[slot].ID == itemID { + return true + } + } + return false +} + func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec { return &proto.EquipmentSpec{ Items: MapSlice(equipment[:], func(item Item) *proto.ItemSpec { @@ -579,7 +613,7 @@ var itemTypeToSlotsMap = map[proto.ItemType][]proto.ItemSlot{ // ItemType_ItemTypeWeapon is excluded intentionally - the slot cannot be decided based on type alone for weapons. } -func EligibleSlotsForItem(item *Item, isFuryWarrior bool) []proto.ItemSlot { +func eligibleSlotsForItem(item *Item, isFuryWarrior bool) []proto.ItemSlot { if slots, ok := itemTypeToSlotsMap[item.Type]; ok { return slots } diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 63e4fa55f6..e8910669f0 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -92,9 +92,9 @@ func NewItemSet(set ItemSet) *ItemSet { return &set } -func (character *Character) HasSetBonus(set *ItemSet, numItems int32) bool { +func (character *Character) CouldHaveSetBonus(set *ItemSet, numItems int32) bool { if character.Env != nil && character.Env.IsFinalized() { - panic("HasSetBonus is very slow and should never be called after finalization. Try caching the value during construction instead!") + panic("CouldHaveSetBonus is very slow and should never be called after finalization. Try caching the value during construction instead!") } if _, ok := set.Bonuses[numItems]; !ok { @@ -114,7 +114,7 @@ func (character *Character) HasSetBonus(set *ItemSet, numItems int32) bool { type SetBonusCollection []SetBonus -func (equipment Equipment) getSetBonuses() SetBonusCollection { +func (equipment *Equipment) getSetBonuses() SetBonusCollection { var activeBonuses SetBonusCollection setItemCount := make(map[*ItemSet]int32) @@ -171,7 +171,7 @@ func (collection SetBonusCollection) ContainsBonus(setName string, count int32) } // Returns a list describing all active set bonuses. -func (character *Character) GetActiveSetBonuses() SetBonusCollection { +func (character *Character) getActiveSetBonuses() SetBonusCollection { return character.Equipment.getSetBonuses() } @@ -201,13 +201,13 @@ type SetBonus struct { // Checks whether the character has an equipped set bonus func (character *Character) hasActiveSetBonus(setName string, count int32) bool { - activeSetBonuses := character.GetActiveSetBonuses() + activeSetBonuses := character.getActiveSetBonuses() return activeSetBonuses.ContainsBonus(setName, count) } // Apply effects from item set bonuses. func (character *Character) applyItemSetBonusEffects(agent Agent) { - activeSetBonuses := character.GetActiveSetBonuses() + activeSetBonuses := character.getActiveSetBonuses() for _, activeSetBonus := range activeSetBonuses { setBonusAura := character.makeSetBonusStatusAura(activeSetBonus.Name, activeSetBonus.NumPieces, activeSetBonus.Slots, true) @@ -215,11 +215,7 @@ func (character *Character) applyItemSetBonusEffects(agent Agent) { } if character.ItemSwap.IsEnabled() { - unequippedSetBonuses := FilterSlice(character.ItemSwap.unEquippedItems.getSetBonuses(), func(unequippedBonus SetBonus) bool { - return !character.hasActiveSetBonus(unequippedBonus.Name, unequippedBonus.NumPieces) - }) - - for _, unequippedSetBonus := range unequippedSetBonuses { + for _, unequippedSetBonus := range character.getUnequippedSetBonuses() { if activeSetBonuses.ContainsBonus(unequippedSetBonus.Name, unequippedSetBonus.NumPieces) { continue } @@ -255,7 +251,7 @@ func (character *Character) makeSetBonusStatusAura(setName string, numPieces int // Returns the names of all active set bonuses. func (character *Character) GetActiveSetBonusNames() []string { - activeSetBonuses := character.GetActiveSetBonuses() + activeSetBonuses := character.getActiveSetBonuses() names := make([]string, len(activeSetBonuses)) for i, activeSetBonus := range activeSetBonuses { diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index fdfa196a91..607fbec4f3 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -1,6 +1,7 @@ package core import ( + "slices" "time" "github.com/wowsims/cata/sim/core/proto" @@ -28,9 +29,15 @@ type ItemSwap struct { // Holds items that are currently not equipped unEquippedItems Equipment swapSet proto.APLActionItemSwap_SwapSet + stats ItemSwapStats initialized bool } +type ItemSwapStats struct { + allSlots stats.Stats + weaponSlots stats.Stats +} + /** * TODO All the extra parameters here and the code in multiple places for handling the Weapon struct is really messy, * we'll need to figure out something cleaner as this will be quite error-prone @@ -73,6 +80,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti originalEquip: character.Equipment, swapEquip: swapItems, unEquippedItems: swapItems, + stats: character.ItemSwap.CalcEquipmentStatsOffset(character.Equipment, swapItems), swapSet: proto.APLActionItemSwap_Unknown, initialized: false, } @@ -97,8 +105,14 @@ func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, cal } // Helper for handling Item Effects that use the itemID to toggle the aura on and off +// This will also get the eligible slots for the item func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura) { slots := swap.EligibleSlotsForItem(itemID) + swap.RegisterProcWithSlots(itemID, aura, slots) +} + +// Helper for handling Item Effects that use the itemID to toggle the aura on and off +func (swap *ItemSwap) RegisterProcWithSlots(itemID int32, aura *Aura, slots []proto.ItemSlot) { swap.registerProcInternal(ItemSwapProcConfig{ ItemID: itemID, Aura: aura, @@ -107,7 +121,11 @@ func (swap *ItemSwap) RegisterProc(itemID int32, aura *Aura) { } // Helper for handling Enchant Effects that use the effectID to toggle the aura on and off -func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterEnchantProc(effectID int32, aura *Aura) { + slots := swap.EligibleSlotsForEffect(effectID) + swap.RegisterEnchantProcWithSlots(effectID, aura, slots) +} +func (swap *ItemSwap) RegisterEnchantProcWithSlots(effectID int32, aura *Aura, slots []proto.ItemSlot) { swap.registerProcInternal(ItemSwapProcConfig{ EnchantId: effectID, Aura: aura, @@ -130,7 +148,7 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { var isItemSlotMatch = false if isItemProc { - isItemSlotMatch = swap.HasItemEquipped(config.ItemID, config.Slots) + isItemSlotMatch = swap.character.HasItemEquipped(config.ItemID) } else if isEnchantEffectProc { isItemSlotMatch = swap.HasEnchantEquipped(config.EnchantId, config.Slots) } @@ -151,11 +169,11 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { // Helper for handling Item On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { + if !swap.ItemExistsInSwapSet(itemID, slots) { + return + } + swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - isSwapItem := swap.ItemExistsInSwapSet(itemID) - if !isSwapItem { - return - } hasItemEquipped := swap.character.HasItemEquipped(itemID) spell := swap.character.GetSpell(ActionID{ItemID: itemID}) @@ -197,12 +215,11 @@ func (swap *ItemSwap) IsSwapped() bool { } func (character *Character) HasItemEquipped(itemID int32) bool { - for _, item := range character.Equipment { - if item.ID == itemID { - return true - } - } - return false + return character.Equipment.containsItem(itemID) +} + +func (swap *ItemSwap) HasEnchantEquipped(effectID int32, possibleSlots []proto.ItemSlot) bool { + return swap.character.Equipment.containsEnchant(effectID) } func (swap *ItemSwap) GetEquippedItemBySlot(slot proto.ItemSlot) *Item { @@ -213,48 +230,41 @@ func (swap *ItemSwap) GetUnequippedItemBySlot(slot proto.ItemSlot) *Item { return &swap.unEquippedItems[slot] } -func (swap *ItemSwap) HasItemEquipped(itemID int32, possibleSlots []proto.ItemSlot) bool { - for _, slot := range possibleSlots { - if swap.character.Equipment[slot].ID == itemID { - return true - } - } - return false +func (swap *ItemSwap) ItemExistsInMainEquip(itemID int32, possibleSlots []proto.ItemSlot) bool { + return swap.originalEquip.containsItemInSlots(itemID, possibleSlots) } -func (swap *ItemSwap) HasEnchantEquipped(effectID int32, possibleSlots []proto.ItemSlot) bool { - for _, slot := range possibleSlots { - if swap.character.Equipment[slot].Enchant.EffectID == effectID { - return true - } - } - return false +func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32, possibleSlots []proto.ItemSlot) bool { + return swap.swapEquip.containsItemInSlots(itemID, possibleSlots) } -func (swap *ItemSwap) ItemExistsInMainEquip(itemID int32, possibleSlots []proto.ItemSlot) bool { - for _, slot := range possibleSlots { - if swap.originalEquip[slot].ID == itemID { - return true - } +func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot { + item := GetItemByID(itemID) + eligibleSlots := eligibleSlotsForItem(item, swap.isFuryWarrior) + if !swap.IsEnabled() { + return eligibleSlots + } else { + slots := FilterSlice(eligibleSlots, func(slot proto.ItemSlot) bool { + return (swap.originalEquip[slot].ID == itemID) || (swap.swapEquip[slot].ID == itemID) + }) + return slots } - return false } -func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32) bool { - for _, item := range swap.swapEquip { - if item.ID == itemID { - return true +func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { + var eligibleSlots = []proto.ItemSlot{} + + if !swap.IsEnabled() { + return []proto.ItemSlot{} + } else { + for slot := range swap.originalEquip { + itemSlot := proto.ItemSlot(slot) + if swap.originalEquip.containsEnchantInSlot(effectID, itemSlot) || swap.swapEquip.containsEnchantInSlot(effectID, itemSlot) { + eligibleSlots = append(eligibleSlots, itemSlot) + } } } - return false -} - -func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot { - item := GetItemByID(itemID) - eligibleSlots := EligibleSlotsForItem(item, swap.isFuryWarrior) - return FilterSlice(eligibleSlots, func(slot proto.ItemSlot) bool { - return !swap.IsEnabled() || swap.IsEnabled() && (swap.originalEquip[slot].ID == itemID || swap.swapEquip[slot].ID == itemID) - }) + return eligibleSlots } func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { @@ -268,6 +278,34 @@ func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { return newStats } +func (swap *ItemSwap) CalcEquipmentStatsOffset(originalEquipment Equipment, swapEquipment Equipment) ItemSwapStats { + allSlots := stats.Stats{} + weaponSlots := stats.Stats{} + + for slot, item := range swapEquipment { + if item.ID == 0 { + continue + } + + itemSlot := proto.ItemSlot(slot) + originalItem := originalEquipment[itemSlot] + originalItemStats := swap.getItemStats(originalItem) + unequippedItemStats := swap.getItemStats(item) + slotStats := unequippedItemStats.Subtract(originalItemStats) + + allSlots = allSlots.Add(slotStats) + + if slices.Contains(AllWeaponSlots(), itemSlot) { + weaponSlots = weaponSlots.Add(slotStats) + } + } + + return ItemSwapStats{ + allSlots: allSlots, + weaponSlots: weaponSlots, + } +} + func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool) { if !swap.IsEnabled() || swap.swapSet == swapSet && !isReset { return @@ -276,7 +314,6 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap character := swap.character weaponSlotSwapped := false - newStats := stats.Stats{} has2H := swap.GetUnequippedItemBySlot(proto.ItemSlot_ItemSlotMainHand).HandType == proto.HandType_HandTypeTwoHand isPrepull := sim.CurrentTime < 0 @@ -290,8 +327,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap continue } - if ok, swapStats := swap.swapItem(slot, has2H, isReset); ok { - newStats = newStats.Add(swapStats) + if ok := swap.swapItem(slot, has2H, isReset); ok { weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped for _, onSwap := range swap.onSwapCallbacks[slot] { @@ -300,10 +336,15 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } } - if sim.Log != nil { - sim.Log("Item Swap - New Stats: %v", newStats.FlatString()) + if !isReset { + statsToSwap := Ternary(isPrepull, swap.stats.allSlots, swap.stats.weaponSlots) + newStats := Ternary(swap.swapSet == proto.APLActionItemSwap_Swap1, statsToSwap.Invert(), statsToSwap) + + if sim.Log != nil { + sim.Log("Item Swap - New Stats: %v", newStats.FlatString()) + } + character.AddStatsDynamic(sim, newStats) } - character.AddStatsDynamic(sim, newStats) if !isPrepull && !isReset { if weaponSlotSwapped { @@ -321,7 +362,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap swap.swapSet = swapSet } -func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (bool, stats.Stats) { +func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) bool { oldItem := *swap.GetEquippedItemBySlot(slot) var newItem *Item if isReset { @@ -331,20 +372,16 @@ func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) (b } swap.character.Equipment[slot] = *newItem - oldItemStats := swap.getItemStats(oldItem) - newItemStats := swap.getItemStats(*newItem) - newStats := newItemStats.Subtract(oldItemStats) //2H will swap out the offhand also. if has2H && slot == proto.ItemSlot_ItemSlotMainHand && !swap.isFuryWarrior { - _, ohStats := swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H, isReset) - newStats = newStats.Add(ohStats) + swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H, isReset) } swap.unEquippedItems[slot] = oldItem swap.swapWeapon(slot) - return true, newStats + return true } func (swap *ItemSwap) getItemStats(item Item) stats.Stats { diff --git a/sim/death_knight/icebound_fortitude.go b/sim/death_knight/icebound_fortitude.go index 5cd41ef56e..6da220fa0e 100644 --- a/sim/death_knight/icebound_fortitude.go +++ b/sim/death_knight/icebound_fortitude.go @@ -6,10 +6,6 @@ import ( "github.com/wowsims/cata/sim/core" ) -func (dk *DeathKnight) iceBoundFortituteBaseDuration() time.Duration { - return 12 * time.Second -} - func (dk *DeathKnight) registerIceboundFortitudeSpell() { actionID := core.ActionID{SpellID: 48792} @@ -18,7 +14,7 @@ func (dk *DeathKnight) registerIceboundFortitudeSpell() { iceBoundFortituteAura := dk.RegisterAura(core.Aura{ Label: "Icebound Fortitude", ActionID: actionID, - Duration: dk.iceBoundFortituteBaseDuration(), + Duration: 12 * time.Second, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.PseudoStats.DamageTakenMultiplier *= dmgTakenMult diff --git a/sim/death_knight/runeforging.go b/sim/death_knight/runeforging.go index ec57fdc135..12124084a0 100644 --- a/sim/death_knight/runeforging.go +++ b/sim/death_knight/runeforging.go @@ -99,7 +99,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3368, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3368, aura) }) // Rune of Cinderglacier @@ -159,7 +159,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3369, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3369, aura) }) // Rune of Razorice @@ -252,6 +252,6 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(3370, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(3370, aura) }) } diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index 0ce678c0df..ae3439be5e 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -102,7 +102,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { var handler func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) var runicMasteryAura *core.StatBuffAura - if dk.HasSetBonus(ItemSetNecroticBoneplateBattlegear, 4) { + if dk.CouldHaveSetBonus(ItemSetNecroticBoneplateBattlegear, 4) { runicMasteryAura = dk.NewTemporaryStatsAura("Runic Mastery", core.ActionID{SpellID: 105647}, stats.Stats{stats.MasteryRating: 710}, time.Second*12) } diff --git a/sim/druid/druid.go b/sim/druid/druid.go index b9d9bae400..46f68a8f7e 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -379,7 +379,7 @@ func New(char *core.Character, form DruidForm, selfBuffs SelfBuffs, talents stri } } - if druid.HasSetBonus(ItemSetObsidianArborweaveRegalia, 2) { + if druid.CouldHaveSetBonus(ItemSetObsidianArborweaveRegalia, 2) { druid.BurningTreant = druid.NewBurningTreant() } diff --git a/sim/druid/talents.go b/sim/druid/talents.go index 51d44df9ec..24cae2e045 100644 --- a/sim/druid/talents.go +++ b/sim/druid/talents.go @@ -665,7 +665,7 @@ func (druid *Druid) applyRendAndTear(aura core.Aura) core.Aura { // // Solar // solarProcChance := (1.0 / 3.0) * float64(druid.Talents.Eclipse) -// solarProcMultiplier := 1.4 + core.TernaryFloat64(druid.HasSetBonus(ItemSetNightsongGarb, 2), 0.07, 0) +// solarProcMultiplier := 1.4 + core.TernaryFloat64(druid.CouldHaveSetBonus(ItemSetNightsongGarb, 2), 0.07, 0) // druid.SolarICD.Duration = time.Millisecond * 30000 // druid.SolarEclipseProcAura = druid.RegisterAura(core.Aura{ // Icd: &druid.SolarICD, @@ -708,7 +708,7 @@ func (druid *Druid) applyRendAndTear(aura core.Aura) core.Aura { // // Lunar // lunarProcChance := 0.2 * float64(druid.Talents.Eclipse) -// lunarBonusCrit := (40 + core.TernaryFloat64(druid.HasSetBonus(ItemSetNightsongGarb, 2), 7, 0)) * core.CritRatingPerCritChance +// lunarBonusCrit := (40 + core.TernaryFloat64(druid.CouldHaveSetBonus(ItemSetNightsongGarb, 2), 7, 0)) * core.CritRatingPerCritChance // druid.LunarICD.Duration = time.Millisecond * 30000 // druid.LunarEclipseProcAura = druid.RegisterAura(core.Aura{ // Icd: &druid.LunarICD, diff --git a/sim/mage/items.go b/sim/mage/items.go index 57c185b174..3f93e750fe 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -59,21 +59,17 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ mage := agent.(MageAgent).GetMage() setBonusAura.ApplyOnGain(func(_ *core.Aura, _ *core.Simulation) { + mage.Has4pcT12 = true mage.brainFreezeProcChance += .15 mage.baseHotStreakProcChance += 0.30 }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) { + mage.Has4pcT12 = false mage.brainFreezeProcChance -= .15 mage.baseHotStreakProcChance -= .30 }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - mage.Has4pcT12 = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - mage.Has4pcT12 = false - }) setBonusAura.ExposeToAPL(99064) }, }, diff --git a/sim/mage/mage.go b/sim/mage/mage.go index 7821ad7c8b..ca41f634c7 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -179,7 +179,10 @@ func NewMage(character *core.Character, options *proto.Player, mageOptions *prot mage.mirrorImage = mage.NewMirrorImage() mage.flameOrb = mage.NewFlameOrb() mage.frostfireOrb = mage.NewFrostfireOrb() - mage.t12MirrorImage = mage.NewT12MirrorImage() + + if mage.CouldHaveSetBonus(ItemSetFirehawkRobesOfConflagration, 2) { + mage.t12MirrorImage = mage.NewT12MirrorImage() + } return mage } diff --git a/sim/priest/_circle_of_healing.go b/sim/priest/_circle_of_healing.go index 6241ddd983..242853863e 100644 --- a/sim/priest/_circle_of_healing.go +++ b/sim/priest/_circle_of_healing.go @@ -41,7 +41,7 @@ func (priest *Priest) registerCircleOfHealingSpell() { (1 + .01*float64(priest.Talents.BlessedResilience)) * (1 + .02*float64(priest.Talents.FocusedPower)) * (1 + .02*float64(priest.Talents.DivineProvidence)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.1, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.1, 1), CritMultiplier: priest.DefaultHealingCritMultiplier(), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], diff --git a/sim/priest/_greater_heal.go b/sim/priest/_greater_heal.go index 3b0f46eb66..ce3ddce47a 100644 --- a/sim/priest/_greater_heal.go +++ b/sim/priest/_greater_heal.go @@ -19,7 +19,7 @@ func (priest *Priest) registerGreaterHealSpell() { BaseCost: 0.32, Multiplier: 1 * (1 - .05*float64(priest.Talents.ImprovedHealing)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetRegaliaOfFaith, 4), .95, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetRegaliaOfFaith, 4), .95, 1), }, Cast: core.CastConfig{ DefaultCast: core.Cast{ @@ -33,7 +33,7 @@ func (priest *Priest) registerGreaterHealSpell() { (1 + .02*float64(priest.Talents.SpiritualHealing)) * (1 + .01*float64(priest.Talents.BlessedResilience)) * (1 + .02*float64(priest.Talents.FocusedPower)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetVestmentsOfAbsolution, 4), 1.05, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetVestmentsOfAbsolution, 4), 1.05, 1), CritMultiplier: priest.DefaultHealingCritMultiplier(), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], diff --git a/sim/priest/_power_word_shield.go b/sim/priest/_power_word_shield.go index 7fcdbdf32e..373c628a01 100644 --- a/sim/priest/_power_word_shield.go +++ b/sim/priest/_power_word_shield.go @@ -11,8 +11,8 @@ func (priest *Priest) registerPowerWordShieldSpell() { coeff := 0.8057 + 0.08*float64(priest.Talents.BorrowedTime) wsDuration := time.Second*15 - - core.TernaryDuration(priest.HasSetBonus(ItemSetGladiatorsInvestiture, 4), time.Second*2, 0) - - core.TernaryDuration(priest.HasSetBonus(ItemSetGladiatorsRaiment, 4), time.Second*2, 0) + core.TernaryDuration(priest.CouldHaveSetBonus(ItemSetGladiatorsInvestiture, 4), time.Second*2, 0) - + core.TernaryDuration(priest.CouldHaveSetBonus(ItemSetGladiatorsRaiment, 4), time.Second*2, 0) cd := core.Cooldown{} if !priest.Talents.SoulWarding { @@ -52,7 +52,7 @@ func (priest *Priest) registerPowerWordShieldSpell() { .01*float64(priest.Talents.TwinDisciplines) + .02*float64(priest.Talents.FocusedPower) + .02*float64(priest.Talents.SpiritualHealing)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.05, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.05, 1), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], Shield: core.ShieldConfig{ @@ -99,7 +99,7 @@ func (priest *Priest) registerPowerWordShieldSpell() { (1 + .05*float64(priest.Talents.ImprovedPowerWordShield) + .01*float64(priest.Talents.TwinDisciplines)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.05, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetCrimsonAcolytesRaiment, 4), 1.05, 1), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { diff --git a/sim/priest/_prayer_of_healing.go b/sim/priest/_prayer_of_healing.go index c3e6255600..eb0a647c99 100644 --- a/sim/priest/_prayer_of_healing.go +++ b/sim/priest/_prayer_of_healing.go @@ -20,7 +20,7 @@ func (priest *Priest) registerPrayerOfHealingSpell() { BaseCost: 0.48, Multiplier: 1 - .1*float64(priest.Talents.HealingPrayers) - - core.TernaryFloat64(priest.HasSetBonus(ItemSetVestmentsOfAbsolution, 2), 0.1, 0), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetVestmentsOfAbsolution, 2), 0.1, 0), }, Cast: core.CastConfig{ DefaultCast: core.Cast{ @@ -31,7 +31,7 @@ func (priest *Priest) registerPrayerOfHealingSpell() { BonusCritRating: 0 + 1*float64(priest.Talents.HolySpecialization)*core.CritRatingPerCritChance + - core.TernaryFloat64(priest.HasSetBonus(ItemSetSanctificationRegalia, 2), 10*core.CritRatingPerCritChance, 0), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetSanctificationRegalia, 2), 10*core.CritRatingPerCritChance, 0), DamageMultiplier: 1 * (1 + .02*float64(priest.Talents.SpiritualHealing)) * (1 + .01*float64(priest.Talents.BlessedResilience)) * diff --git a/sim/priest/_prayer_of_mending.go b/sim/priest/_prayer_of_mending.go index cd7875619c..e97f6a4747 100644 --- a/sim/priest/_prayer_of_mending.go +++ b/sim/priest/_prayer_of_mending.go @@ -17,7 +17,7 @@ func (priest *Priest) registerPrayerOfMendingSpell() { } } - maxJumps := 5 + core.TernaryInt(priest.HasSetBonus(ItemSetRegaliaOfFaith, 2), 1, 0) + maxJumps := 5 + core.TernaryInt(priest.CouldHaveSetBonus(ItemSetRegaliaOfFaith, 2), 1, 0) var curTarget *core.Unit var remainingJumps int @@ -81,7 +81,7 @@ func (priest *Priest) registerPrayerOfMendingSpell() { (1 + .02*float64(priest.Talents.FocusedPower)) * (1 + .02*float64(priest.Talents.DivineProvidence)) * (1 + .01*float64(priest.Talents.TwinDisciplines)) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetZabrasRaiment, 2), 1.2, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetZabrasRaiment, 2), 1.2, 1), CritMultiplier: priest.DefaultHealingCritMultiplier(), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], diff --git a/sim/priest/_renew.go b/sim/priest/_renew.go index 968ee286d3..bb5be96d3b 100644 --- a/sim/priest/_renew.go +++ b/sim/priest/_renew.go @@ -23,7 +23,7 @@ func (priest *Priest) registerRenewSpell() { float64(priest.renewTicks()) * priest.renewHealingMultiplier() * .05 * float64(priest.Talents.EmpoweredRenew) * - core.TernaryFloat64(priest.HasSetBonus(ItemSetZabrasRaiment, 4), 1.1, 1), + core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetZabrasRaiment, 4), 1.1, 1), CritMultiplier: priest.DefaultHealingCritMultiplier(), ThreatMultiplier: 1 - []float64{0, .07, .14, .20}[priest.Talents.SilentResolve], diff --git a/sim/priest/_set_bonuses.go b/sim/priest/_set_bonuses.go index 2931024c08..94c60fc877 100644 --- a/sim/priest/_set_bonuses.go +++ b/sim/priest/_set_bonuses.go @@ -2,12 +2,12 @@ package priest // Pre-cache values instead of checking gear during sim runs func (priest *Priest) registerSetBonuses() { - priest.T7TwoSetBonus = priest.HasSetBonus(ItemSetValorous, 2) - priest.T7FourSetBonus = priest.HasSetBonus(ItemSetValorous, 4) - priest.T8TwoSetBonus = priest.HasSetBonus(ItemSetConquerorSanct, 2) - priest.T8FourSetBonus = priest.HasSetBonus(ItemSetConquerorSanct, 4) - priest.T9TwoSetBonus = priest.HasSetBonus(ItemSetZabras, 2) - priest.T9FourSetBonus = priest.HasSetBonus(ItemSetZabras, 4) - priest.T10TwoSetBonus = priest.HasSetBonus(ItemSetCrimsonAcolyte, 2) - priest.T10FourSetBonus = priest.HasSetBonus(ItemSetCrimsonAcolyte, 4) + priest.T7TwoSetBonus = priest.CouldHaveSetBonus(ItemSetValorous, 2) + priest.T7FourSetBonus = priest.CouldHaveSetBonus(ItemSetValorous, 4) + priest.T8TwoSetBonus = priest.CouldHaveSetBonus(ItemSetConquerorSanct, 2) + priest.T8FourSetBonus = priest.CouldHaveSetBonus(ItemSetConquerorSanct, 4) + priest.T9TwoSetBonus = priest.CouldHaveSetBonus(ItemSetZabras, 2) + priest.T9FourSetBonus = priest.CouldHaveSetBonus(ItemSetZabras, 4) + priest.T10TwoSetBonus = priest.CouldHaveSetBonus(ItemSetCrimsonAcolyte, 2) + priest.T10FourSetBonus = priest.CouldHaveSetBonus(ItemSetCrimsonAcolyte, 4) } diff --git a/sim/priest/talents.go b/sim/priest/talents.go index 3527d43e44..19eed314a5 100644 --- a/sim/priest/talents.go +++ b/sim/priest/talents.go @@ -701,7 +701,7 @@ func (priest *Priest) applyShadowyApparition() { // DamageMultiplier: 1 * // (0.1 * float64(priest.Talents.DivineAegis)) * -// core.TernaryFloat64(priest.HasSetBonus(ItemSetZabrasRaiment, 4), 1.1, 1), +// core.TernaryFloat64(priest.CouldHaveSetBonus(ItemSetZabrasRaiment, 4), 1.1, 1), // ThreatMultiplier: 1, // Shield: core.ShieldConfig{ diff --git a/sim/rogue/assassination/assassination.go b/sim/rogue/assassination/assassination.go index b7de1d27ae..b020e446a7 100644 --- a/sim/rogue/assassination/assassination.go +++ b/sim/rogue/assassination/assassination.go @@ -35,6 +35,7 @@ func (sinRogue *AssassinationRogue) Initialize() { sinRogue.registerColdBloodCD() sinRogue.applySealFate() sinRogue.registerVenomousWounds() + sinRogue.registerVendetta() // Apply Mastery // As far as I am able to find, Asn's Mastery is an additive bonus. To be tested. diff --git a/sim/rogue/vendetta.go b/sim/rogue/assassination/vendetta.go similarity index 55% rename from sim/rogue/vendetta.go rename to sim/rogue/assassination/vendetta.go index f093525a44..88d5fe9984 100644 --- a/sim/rogue/vendetta.go +++ b/sim/rogue/assassination/vendetta.go @@ -1,50 +1,47 @@ -package rogue +package assassination import ( "time" "github.com/wowsims/cata/sim/core" "github.com/wowsims/cata/sim/core/proto" + "github.com/wowsims/cata/sim/rogue" ) -func (rogue *Rogue) getVendettaDuration(baseDuration float64) time.Duration { - hasGlyph := rogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) - return time.Duration((30.0+baseDuration)*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second -} - -func (rogue *Rogue) registerVendetta() { - if !rogue.Talents.Vendetta { +func (sinRogue *AssassinationRogue) registerVendetta() { + if !sinRogue.Talents.Vendetta { return } actionID := core.ActionID{SpellID: 79140} - duration := rogue.getVendettaDuration(0) + hasGlyph := sinRogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta) + duration := time.Duration((30.0)*core.TernaryFloat64(hasGlyph, 1.2, 1.0)) * time.Second - vendettaAuras := rogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { + vendettaAuras := sinRogue.NewEnemyAuraArray(func(target *core.Unit) *core.Aura { return target.GetOrRegisterAura(core.Aura{ Label: "Vendetta", ActionID: actionID, Duration: duration, OnGain: func(aura *core.Aura, sim *core.Simulation) { - rogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier *= 1.2 + sinRogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier *= 1.2 }, OnExpire: func(aura *core.Aura, sim *core.Simulation) { - rogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier /= 1.2 + sinRogue.AttackTables[aura.Unit.UnitIndex].DamageTakenMultiplier /= 1.2 }, }) }) - rogue.Vendetta = rogue.RegisterSpell(core.SpellConfig{ + sinRogue.Vendetta = sinRogue.RegisterSpell(core.SpellConfig{ ActionID: actionID, SpellSchool: core.SpellSchoolPhysical, Flags: core.SpellFlagAPL | core.SpellFlagMCD, - ClassSpellMask: RogueSpellVendetta, + ClassSpellMask: rogue.RogueSpellVendetta, Cast: core.CastConfig{ DefaultCast: core.Cast{ GCD: time.Second, }, CD: core.Cooldown{ - Timer: rogue.NewTimer(), + Timer: sinRogue.NewTimer(), Duration: time.Minute * 2, }, }, @@ -56,12 +53,12 @@ func (rogue *Rogue) registerVendetta() { RelatedAuraArrays: vendettaAuras.ToMap(), }) - rogue.AddMajorCooldown(core.MajorCooldown{ - Spell: rogue.Vendetta, + sinRogue.AddMajorCooldown(core.MajorCooldown{ + Spell: sinRogue.Vendetta, Type: core.CooldownTypeDPS, Priority: core.CooldownPriorityDefault, ShouldActivate: func(sim *core.Simulation, character *core.Character) bool { - return rogue.ComboPoints() >= 4 + return sinRogue.ComboPoints() >= 4 }, }) } diff --git a/sim/rogue/items.go b/sim/rogue/items.go index 305cbf7ec6..900fb43537 100644 --- a/sim/rogue/items.go +++ b/sim/rogue/items.go @@ -217,23 +217,12 @@ var Tier13 = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { rogue := agent.(RogueAgent).GetRogue() + vendettaDurationIncrease := core.DurationFromSeconds(9.0 * core.TernaryFloat64(rogue.HasPrimeGlyph(proto.RoguePrimeGlyph_GlyphOfVendetta), 1.2, 1.0)) setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_Custom, + Kind: core.SpellMod_DebuffDuration_Flat, ClassMask: RogueSpellVendetta, - ApplyCustom: func(mod *core.SpellMod, spell *core.Spell) { - for _, aura := range spell.RelatedAuraArrays["Vendetta"] { - if aura != nil { - aura.Duration = rogue.getVendettaDuration(9) - } - } - }, - RemoveCustom: func(mod *core.SpellMod, spell *core.Spell) { - for _, aura := range spell.RelatedAuraArrays["Vendetta"] { - if aura != nil { - aura.Duration = rogue.getVendettaDuration(0) - } - } - }, + KeyValue: "Vendetta", + TimeValue: vendettaDurationIncrease, }) setBonusAura.AttachSpellMod(core.SpellModConfig{ @@ -268,7 +257,7 @@ func getFangsProcRate(character *core.Character) float64 { // Fear + Vengeance var JawsOfRetribution = core.NewItemSet(core.ItemSet{ Name: "Jaws of Retribution", - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, proto.ItemSlot_ItemSlotOffHand}, + Slots: core.MeleeWeaponSlots(), Bonuses: map[int32]core.ApplySetBonus{ // Your melee attacks have a chance to grant Suffering, increasing your Agility by 2, stacking up to 50 times. 2: func(agent core.Agent, setBonusAura *core.Aura) { diff --git a/sim/rogue/rogue.go b/sim/rogue/rogue.go index 8a9da7fd73..00fb951865 100644 --- a/sim/rogue/rogue.go +++ b/sim/rogue/rogue.go @@ -198,7 +198,6 @@ func (rogue *Rogue) Initialize() { rogue.registerShivSpell() rogue.registerThistleTeaCD() rogue.registerGougeSpell() - rogue.registerVendetta() rogue.SliceAndDiceBonus = 0.4 diff --git a/sim/shaman/weapon_imbues.go b/sim/shaman/weapon_imbues.go index 8dcc8b51a0..5b4b80a1ce 100644 --- a/sim/shaman/weapon_imbues.go +++ b/sim/shaman/weapon_imbues.go @@ -312,7 +312,7 @@ func (shaman *Shaman) RegisterFrostbrandImbue(procMask core.ProcMask) { }, }) - shaman.ItemSwap.RegisterEnchantProc(2, aura, core.MeleeWeaponSlots()) + shaman.ItemSwap.RegisterEnchantProc(2, aura) } func (shaman *Shaman) newEarthlivingImbueSpell() *core.Spell { diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index 5a1ef2822b..be20a423b1 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -90,7 +90,7 @@ func (warlock *Warlock) Initialize() { warlock.registerSummonInfernal(doomguardInfernalTimer) // TODO: vile hack to make the APLs work for now ... - if !warlock.HasSetBonus(ItemSetMaleficRaiment, 4) { + if !warlock.CouldHaveSetBonus(ItemSetMaleficRaiment, 4) { warlock.RegisterAura(core.Aura{ Label: "Fel Spark", ActionID: core.ActionID{SpellID: 89937}, @@ -108,17 +108,15 @@ func (warlock *Warlock) Initialize() { // warlock.registerBlackBook() // Do this post-finalize so cast speed is updated with new stats - warlock.Env.RegisterPostFinalizeEffect(func() { - // if itemswap is enabled, correct for any possible haste changes - var correction stats.Stats - if warlock.ItemSwap.IsEnabled() { - correction = warlock.ItemSwap.CalcStatChanges([]proto.ItemSlot{proto.ItemSlot_ItemSlotMainHand, - proto.ItemSlot_ItemSlotOffHand, proto.ItemSlot_ItemSlotRanged}) - - warlock.AddStats(correction) - warlock.MultiplyCastSpeed(1.0) - } - }) + // warlock.Env.RegisterPostFinalizeEffect(func() { + // // if itemswap is enabled, correct for any possible haste changes + // var correction stats.Stats + // if warlock.ItemSwap.IsEnabled() { + // correction = warlock.ItemSwap.CalcStatChanges(core.AllWeaponSlots()) + // warlock.AddStats(correction) + // warlock.MultiplyCastSpeed(1.0) + // } + // }) } func (warlock *Warlock) AddRaidBuffs(raidBuffs *proto.RaidBuffs) { diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index f29245d517..628accab00 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2169,43 +2169,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98888.90073 - tps: 107055.32677 + dps: 98952.6217 + tps: 107124.61024 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38814.29564 - tps: 32817.8486 + dps: 38838.4623 + tps: 32839.37675 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51358.13863 - tps: 42384.85085 + dps: 51465.54675 + tps: 42481.07622 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.82154 - tps: 73570.53254 + dps: 67147.35897 + tps: 73610.84756 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24117.45036 - tps: 19936.41873 + dps: 24129.26669 + tps: 19946.46013 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27984.11105 - tps: 22021.67343 + dps: 28037.34588 + tps: 22067.42486 } } dps_results: { @@ -2253,43 +2253,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98888.90073 - tps: 107055.32677 + dps: 98952.6217 + tps: 107124.61024 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38271.40999 - tps: 31834.64071 + dps: 38295.52263 + tps: 31855.94126 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50209.93766 - tps: 41346.03763 + dps: 50315.85318 + tps: 41440.32961 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67110.82154 - tps: 73570.53254 + dps: 67147.35897 + tps: 73610.84756 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23750.68626 - tps: 19275.56827 + dps: 23762.45238 + tps: 19285.50397 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28009.91954 - tps: 21773.52053 + dps: 28062.97537 + tps: 21818.71707 } } dps_results: { @@ -2337,43 +2337,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.79741 - tps: 89486.38582 + dps: 82113.95684 + tps: 89544.47267 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31267.80304 - tps: 27050.19321 + dps: 31287.63064 + tps: 27068.264 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41613.64642 - tps: 35319.02024 + dps: 41701.10269 + tps: 35399.1165 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55659.17795 - tps: 61517.96113 + dps: 55689.34177 + tps: 61551.49917 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19270.91275 - tps: 16477.87006 + dps: 19280.47613 + tps: 16486.21505 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22473.90264 - tps: 18058.84076 + dps: 22516.04091 + tps: 18095.8693 } } dps_results: { @@ -2421,43 +2421,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82060.79741 - tps: 89486.38582 + dps: 82113.95684 + tps: 89544.47267 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31091.7174 - tps: 26283.3136 + dps: 31111.62917 + tps: 26301.22634 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41119.56849 - tps: 34375.99137 + dps: 41205.62545 + tps: 34453.73262 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55659.17795 - tps: 61517.96113 + dps: 55689.34177 + tps: 61551.49917 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19271.82208 - tps: 15990.82627 + dps: 19281.31001 + tps: 15998.99468 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22382.54176 - tps: 17705.95759 + dps: 22424.67516 + tps: 17742.41709 } } dps_results: { @@ -2505,43 +2505,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149815.38398 - tps: 164680.53866 + dps: 149995.76967 + tps: 164878.79104 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49787.21742 - tps: 40934.28696 + dps: 49846.49381 + tps: 40984.81019 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65035.14411 - tps: 52406.43323 + dps: 65291.74864 + tps: 52626.385 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105702.97422 - tps: 117797.69421 + dps: 105811.68515 + tps: 117918.99883 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31941.76399 - tps: 25499.94568 + dps: 31972.12129 + tps: 25524.25727 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36711.92915 - tps: 27905.64109 + dps: 36845.57733 + tps: 28013.11694 } } dps_results: { @@ -2589,43 +2589,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149815.38398 - tps: 164680.53866 + dps: 149995.76967 + tps: 164878.79104 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49885.48595 - tps: 40025.95013 + dps: 49944.11376 + tps: 40075.43008 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64552.24743 - tps: 51361.17732 + dps: 64806.85988 + tps: 51577.65575 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105702.97422 - tps: 117797.69421 + dps: 105811.68515 + tps: 117918.99883 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31953.42657 - tps: 24927.22266 + dps: 31983.45643 + tps: 24950.74259 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36547.55694 - tps: 27077.63446 + dps: 36679.4002 + tps: 27182.01071 } } dps_results: { @@ -2673,43 +2673,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123160.06666 - tps: 136448.78606 + dps: 123308.3926 + tps: 136612.75604 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39891.04195 - tps: 33798.25088 + dps: 39938.0241 + tps: 33839.15364 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52265.77412 - tps: 43520.01318 + dps: 52474.34613 + tps: 43703.32381 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87597.68954 - tps: 98332.26178 + dps: 87688.04503 + tps: 98433.96261 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25238.89348 - tps: 20929.91951 + dps: 25263.13015 + tps: 20950.0197 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29584.24658 - tps: 23488.91313 + dps: 29691.54302 + tps: 23578.71642 } } dps_results: { @@ -2757,43 +2757,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123160.06666 - tps: 136448.78606 + dps: 123308.3926 + tps: 136612.75604 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40231.6731 - tps: 32866.63592 + dps: 40278.58802 + tps: 32906.81806 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52528.70063 - tps: 42403.74542 + dps: 52737.76191 + tps: 42584.27429 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87597.68954 - tps: 98332.26178 + dps: 87688.04503 + tps: 98433.96261 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25564.05137 - tps: 20498.4346 + dps: 25588.4116 + tps: 20518.18467 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29809.41823 - tps: 22857.12959 + dps: 29916.00402 + tps: 22944.2476 } } dps_results: { @@ -2841,43 +2841,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99225.04115 - tps: 107462.22548 + dps: 99287.60541 + tps: 107530.36465 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38775.04658 - tps: 32514.22327 + dps: 38798.40079 + tps: 32534.99962 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50477.1596 - tps: 41545.31165 + dps: 50581.22452 + tps: 41638.27694 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68092.74471 - tps: 74709.3631 + dps: 68128.12532 + tps: 74748.43171 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24079.57245 - tps: 19885.79922 + dps: 24090.97368 + tps: 19895.49109 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27649.9399 - tps: 21776.37001 + dps: 27701.51564 + tps: 21820.75517 } } dps_results: { @@ -2925,43 +2925,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99225.04115 - tps: 107462.22548 + dps: 99287.60541 + tps: 107530.36465 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38096.47091 - tps: 31509.68681 + dps: 38119.46999 + tps: 31529.96522 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49712.97316 - tps: 40749.64733 + dps: 49814.90457 + tps: 40839.95514 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68092.74471 - tps: 74709.3631 + dps: 68128.12532 + tps: 74748.43171 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23933.52347 - tps: 19430.34646 + dps: 23944.7484 + tps: 19439.77 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26902.7494 - tps: 20772.24833 + dps: 26952.79761 + tps: 20814.56288 } } dps_results: { @@ -3009,43 +3009,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82580.97143 - tps: 89899.06572 + dps: 82632.76141 + tps: 89955.76063 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31179.40778 - tps: 26852.43631 + dps: 31198.30552 + tps: 26869.59712 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40832.39118 - tps: 34509.79525 + dps: 40916.92323 + tps: 34587.09617 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55859.41566 - tps: 61795.99272 + dps: 55888.75301 + tps: 61828.62944 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19510.94075 - tps: 16653.4023 + dps: 19520.21872 + tps: 16661.5002 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22409.10013 - tps: 17941.2776 + dps: 22450.35024 + tps: 17977.60649 } } dps_results: { @@ -3093,43 +3093,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82580.97143 - tps: 89899.06572 + dps: 82632.76141 + tps: 89955.76063 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30870.56727 - tps: 26006.44766 + dps: 30889.74983 + tps: 26023.66442 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40922.78571 - tps: 34269.52512 + dps: 41006.83195 + tps: 34345.33221 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55859.41566 - tps: 61795.99272 + dps: 55888.75301 + tps: 61828.62944 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19429.90339 - tps: 16037.56153 + dps: 19439.00226 + tps: 16045.32452 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22241.54687 - tps: 17478.94631 + dps: 22282.44001 + tps: 17514.41726 } } dps_results: { @@ -3177,43 +3177,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147777.7612 - tps: 162642.56352 + dps: 147952.049 + tps: 162834.66579 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49291.41398 - tps: 40324.32453 + dps: 49346.7992 + tps: 40370.84124 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64075.8898 - tps: 51296.83212 + dps: 64322.42197 + tps: 51505.83416 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105911.2622 - tps: 117936.4849 + dps: 106018.41017 + tps: 118056.27255 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31951.67202 - tps: 25538.66892 + dps: 31981.1861 + tps: 25562.15469 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36266.95495 - tps: 27674.22113 + dps: 36396.04536 + tps: 27777.82672 } } dps_results: { @@ -3261,43 +3261,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147777.7612 - tps: 162642.56352 + dps: 147952.049 + tps: 162834.66579 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49717.31127 - tps: 39698.75439 + dps: 49772.80662 + tps: 39744.85707 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63623.37169 - tps: 49938.60625 + dps: 63870.10621 + tps: 50145.24513 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105911.2622 - tps: 117936.4849 + dps: 106018.41017 + tps: 118056.27255 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32162.07441 - tps: 25004.26099 + dps: 32191.41828 + tps: 25027.22724 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36305.47485 - tps: 27039.54263 + dps: 36433.41379 + tps: 27140.85506 } } dps_results: { @@ -3345,43 +3345,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123453.58534 - tps: 136833.28631 + dps: 123598.11752 + tps: 136993.33453 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39366.42523 - tps: 33221.42281 + dps: 39411.05524 + tps: 33260.03134 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51939.77411 - tps: 43133.37046 + dps: 52143.72068 + tps: 43312.51918 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87934.92963 - tps: 98733.44606 + dps: 88023.46516 + tps: 98833.13334 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25096.5741 - tps: 20675.70511 + dps: 25120.55422 + tps: 20695.30037 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29079.83188 - tps: 22546.10137 + dps: 29182.92096 + tps: 22630.71936 } } dps_results: { @@ -3429,43 +3429,43 @@ dps_results: { dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123453.58534 - tps: 136833.28631 + dps: 123598.11752 + tps: 136993.33453 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39992.07736 - tps: 32752.38016 + dps: 40036.80008 + tps: 32790.33673 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51284.50141 - tps: 41446.8888 + dps: 51481.51444 + tps: 41616.0229 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87934.92963 - tps: 98733.44606 + dps: 88023.46516 + tps: 98833.13334 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25829.50361 - tps: 20614.81374 + dps: 25853.2034 + tps: 20633.81774 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28936.01012 - tps: 21837.62379 + dps: 29038.73426 + tps: 21920.46422 } } dps_results: { From 0799b4b78872b5135dbb78f0b0b4e75cf4e85883 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 16:05:31 +0100 Subject: [PATCH 093/127] Remove commented code --- sim/warlock/warlock.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index be20a423b1..a834090844 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -106,17 +106,6 @@ func (warlock *Warlock) Initialize() { warlock.registerPetAbilities() // warlock.registerBlackBook() - - // Do this post-finalize so cast speed is updated with new stats - // warlock.Env.RegisterPostFinalizeEffect(func() { - // // if itemswap is enabled, correct for any possible haste changes - // var correction stats.Stats - // if warlock.ItemSwap.IsEnabled() { - // correction = warlock.ItemSwap.CalcStatChanges(core.AllWeaponSlots()) - // warlock.AddStats(correction) - // warlock.MultiplyCastSpeed(1.0) - // } - // }) } func (warlock *Warlock) AddRaidBuffs(raidBuffs *proto.RaidBuffs) { From e5a4d8c9e3512475c86110fe6969d6d09947952a Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 16:09:48 +0100 Subject: [PATCH 094/127] Fix crusader enchant registration --- sim/common/tbc/enchant_effects.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go index 0c3c1d64c8..d485dcd638 100644 --- a/sim/common/tbc/enchant_effects.go +++ b/sim/common/tbc/enchant_effects.go @@ -81,7 +81,7 @@ func init() { }, }) - character.ItemSwap.RegisterEnchantProc(1900, aura, core.MeleeWeaponSlots()) + character.ItemSwap.RegisterEnchantProc(1900, aura) }) core.NewEnchantEffect(2929, func(agent core.Agent) { From fce2792d900e8a8b240dfbb92e8695f4128b7cc2 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 21:11:57 +0100 Subject: [PATCH 095/127] Refactor Armor Spec application --- sim/core/aura_helpers.go | 12 ++++ sim/core/character.go | 89 ++++++++++---------------- sim/core/item_sets.go | 22 +++---- sim/death_knight/blood/blood.go | 2 +- sim/death_knight/frost/frost.go | 2 +- sim/death_knight/unholy/unholy.go | 2 +- sim/hunter/talents.go | 2 +- sim/mage/mage.go | 2 +- sim/paladin/holy/holy.go | 2 +- sim/paladin/protection/protection.go | 2 +- sim/paladin/retribution/retribution.go | 2 +- sim/priest/talents.go | 2 +- sim/rogue/talents.go | 2 +- sim/shaman/elemental/elemental.go | 2 +- sim/shaman/enhancement/enhancement.go | 2 +- sim/shaman/restoration/restoration.go | 2 +- sim/warlock/warlock.go | 2 +- sim/warrior/arms/talents.go | 2 +- sim/warrior/fury/talents.go | 2 +- sim/warrior/protection/talents.go | 2 +- 20 files changed, 72 insertions(+), 85 deletions(-) diff --git a/sim/core/aura_helpers.go b/sim/core/aura_helpers.go index 5826c9226d..29485a6e7d 100644 --- a/sim/core/aura_helpers.go +++ b/sim/core/aura_helpers.go @@ -370,6 +370,18 @@ func (parentAura *Aura) AttachSpellMod(spellModConfig SpellModConfig) { }) } +// Attaches a StatDependency to a parent Aura +func (parentAura *Aura) AttachStatDependency(statDep *stats.StatDependency) { + + parentAura.ApplyOnGain(func(_ *Aura, sim *Simulation) { + parentAura.Unit.EnableBuildPhaseStatDep(sim, statDep) + }) + + parentAura.ApplyOnExpire(func(_ *Aura, sim *Simulation) { + parentAura.Unit.DisableBuildPhaseStatDep(sim, statDep) + }) +} + // Adds Stats to a parent Aura func (parentAura *Aura) AttachStatsBuff(stats stats.Stats) { parentAura.ApplyOnGain(func(aura *Aura, sim *Simulation) { diff --git a/sim/core/character.go b/sim/core/character.go index b25f8523a9..0ea0b2e04f 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -775,63 +775,40 @@ func (character *Character) MeetsArmorSpecializationRequirement(armorType proto. return true } -func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType) { - armorSpecializationDepdency := character.NewDynamicMultiplyStat(primaryStat, 1.05) - var isEnabled bool +func (character *Character) ApplyArmorSpecializationEffect(primaryStat stats.Stat, armorType proto.ArmorType, spellID int32) { + armorSpecializationDependency := character.NewDynamicMultiplyStat(primaryStat, 1.05) + isEnabled := character.MeetsArmorSpecializationRequirement(armorType) - enableArmorSpecialization := func(sim *Simulation) { - character.EnableBuildPhaseStatDep(sim, armorSpecializationDepdency) - - if isEnabled { - return - } - isEnabled = true - if sim.Log != nil { - sim.Log("Armor Specialization: Active") - } - } - disableArmorSpecialization := func(sim *Simulation) { - character.DisableBuildPhaseStatDep(sim, armorSpecializationDepdency) - - if !isEnabled { - return - } - isEnabled = false - if sim.Log != nil { - sim.Log("Armor Specialization: Inactive") - } - } - - processArmorSpecialization := func(sim *Simulation) { - hasBonus := character.MeetsArmorSpecializationRequirement(armorType) - if hasBonus { - enableArmorSpecialization(sim) - } else { - disableArmorSpecialization(sim) - } - } - - MakePermanent(character.RegisterAura(Aura{ + aura := character.RegisterAura(Aura{ Label: "Armor Specialization", - BuildPhase: CharacterBuildPhaseTalents, - OnGain: func(aura *Aura, sim *Simulation) { - processArmorSpecialization(sim) - }, - })) + ActionID: ActionID{SpellID: spellID}, + BuildPhase: Ternary(isEnabled, CharacterBuildPhaseTalents, CharacterBuildPhaseNone), + Duration: NeverExpires, + }) - if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback([]proto.ItemSlot{ - proto.ItemSlot_ItemSlotHead, - proto.ItemSlot_ItemSlotShoulder, - proto.ItemSlot_ItemSlotChest, - proto.ItemSlot_ItemSlotWrist, - proto.ItemSlot_ItemSlotHands, - proto.ItemSlot_ItemSlotWaist, - proto.ItemSlot_ItemSlotLegs, - proto.ItemSlot_ItemSlotFeet, - }, - func(sim *Simulation, _ proto.ItemSlot) { - processArmorSpecialization(sim) - }) - } + aura.AttachStatDependency(armorSpecializationDependency) + + if isEnabled { + aura = MakePermanent(aura) + } + + character.RegisterItemSwapCallback([]proto.ItemSlot{ + proto.ItemSlot_ItemSlotHead, + proto.ItemSlot_ItemSlotShoulder, + proto.ItemSlot_ItemSlotChest, + proto.ItemSlot_ItemSlotWrist, + proto.ItemSlot_ItemSlotHands, + proto.ItemSlot_ItemSlotWaist, + proto.ItemSlot_ItemSlotLegs, + proto.ItemSlot_ItemSlotFeet, + }, + func(sim *Simulation, _ proto.ItemSlot) { + if character.MeetsArmorSpecializationRequirement(armorType) { + if !aura.IsActive() { + aura.Activate(sim) + } + } else { + aura.Deactivate(sim) + } + }) } diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index e8910669f0..04e64b0d96 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -236,15 +236,15 @@ func (character *Character) makeSetBonusStatusAura(setName string, numPieces int statusAura = MakePermanent(statusAura) } - if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { - if character.hasActiveSetBonus(setName, numPieces) { + character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { + if character.hasActiveSetBonus(setName, numPieces) { + if !statusAura.IsActive() { statusAura.Activate(sim) - } else { - statusAura.Deactivate(sim) } - }) - } + } else { + statusAura.Deactivate(sim) + } + }) return statusAura } @@ -279,9 +279,7 @@ func (character *Character) RegisterPvPGloveMod(itemIDs []int32, config SpellMod checkGloves() - if character.ItemSwap.IsEnabled() { - character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *Simulation, _ proto.ItemSlot) { - checkGloves() - }) - } + character.RegisterItemSwapCallback([]proto.ItemSlot{proto.ItemSlot_ItemSlotHands}, func(_ *Simulation, _ proto.ItemSlot) { + checkGloves() + }) } diff --git a/sim/death_knight/blood/blood.go b/sim/death_knight/blood/blood.go index 4d6a76c043..c61722c1a0 100644 --- a/sim/death_knight/blood/blood.go +++ b/sim/death_knight/blood/blood.go @@ -74,7 +74,7 @@ func (bdk BloodDeathKnight) getBloodShieldMasteryBonus() float64 { func (bdk *BloodDeathKnight) ApplyTalents() { bdk.DeathKnight.ApplyTalents() - bdk.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate) + bdk.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate, 86524) // Veteran of the Third War bdk.AddStaticMod(core.SpellModConfig{ diff --git a/sim/death_knight/frost/frost.go b/sim/death_knight/frost/frost.go index 102dd00c84..37c8dd5bc8 100644 --- a/sim/death_knight/frost/frost.go +++ b/sim/death_knight/frost/frost.go @@ -59,7 +59,7 @@ func (fdk *FrostDeathKnight) Initialize() { func (fdk *FrostDeathKnight) ApplyTalents() { fdk.DeathKnight.ApplyTalents() - fdk.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate) + fdk.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate, 86524) masteryMod := fdk.AddDynamicMod(core.SpellModConfig{ Kind: core.SpellMod_DamageDone_Pct, diff --git a/sim/death_knight/unholy/unholy.go b/sim/death_knight/unholy/unholy.go index 07d9e972ac..323f3d1768 100644 --- a/sim/death_knight/unholy/unholy.go +++ b/sim/death_knight/unholy/unholy.go @@ -68,7 +68,7 @@ func (uhdk *UnholyDeathKnight) Initialize() { func (uhdk *UnholyDeathKnight) ApplyTalents() { uhdk.DeathKnight.ApplyTalents() - uhdk.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate) + uhdk.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate, 86524) // Mastery: Dreadblade masteryMod := uhdk.AddDynamicMod(core.SpellModConfig{ diff --git a/sim/hunter/talents.go b/sim/hunter/talents.go index 15fd95e636..2f9225eafb 100644 --- a/sim/hunter/talents.go +++ b/sim/hunter/talents.go @@ -6,7 +6,7 @@ import ( ) func (hunter *Hunter) ApplyTalents() { - hunter.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeMail) + hunter.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeMail, 86529) if hunter.Pet != nil { hunter.applyFrenzy() diff --git a/sim/mage/mage.go b/sim/mage/mage.go index ca41f634c7..8614269163 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -84,7 +84,7 @@ func (mage *Mage) AddPartyBuffs(partyBuffs *proto.PartyBuffs) { } func (mage *Mage) ApplyTalents() { - mage.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth) + mage.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth, 89744) mage.ApplyArcaneTalents() mage.ApplyFireTalents() diff --git a/sim/paladin/holy/holy.go b/sim/paladin/holy/holy.go index b3a4fdc525..e7391648c4 100644 --- a/sim/paladin/holy/holy.go +++ b/sim/paladin/holy/holy.go @@ -47,7 +47,7 @@ func (holy *HolyPaladin) GetPaladin() *paladin.Paladin { func (holy *HolyPaladin) ApplyTalents() { holy.Paladin.ApplyTalents() - holy.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypePlate) + holy.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypePlate, 86525) } func (holy *HolyPaladin) Initialize() { diff --git a/sim/paladin/protection/protection.go b/sim/paladin/protection/protection.go index d876c8041c..0ae3239b91 100644 --- a/sim/paladin/protection/protection.go +++ b/sim/paladin/protection/protection.go @@ -67,7 +67,7 @@ func (prot *ProtectionPaladin) Initialize() { func (prot *ProtectionPaladin) ApplyTalents() { prot.Paladin.ApplyTalents() - prot.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate) + prot.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate, 86525) } func (prot *ProtectionPaladin) Reset(sim *core.Simulation) { diff --git a/sim/paladin/retribution/retribution.go b/sim/paladin/retribution/retribution.go index dc7b1aaf09..d334790559 100644 --- a/sim/paladin/retribution/retribution.go +++ b/sim/paladin/retribution/retribution.go @@ -56,7 +56,7 @@ func (ret *RetributionPaladin) Initialize() { func (ret *RetributionPaladin) ApplyTalents() { ret.Paladin.ApplyTalents() - ret.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate) + ret.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate, 86525) } func (ret *RetributionPaladin) Reset(sim *core.Simulation) { diff --git a/sim/priest/talents.go b/sim/priest/talents.go index 19eed314a5..3c17eae7a5 100644 --- a/sim/priest/talents.go +++ b/sim/priest/talents.go @@ -10,7 +10,7 @@ import ( ) func (priest *Priest) ApplyTalents() { - priest.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth) + priest.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth, 89745) // TODO: // Reflective Shield // Improved Flash Heal diff --git a/sim/rogue/talents.go b/sim/rogue/talents.go index 11c01fcb6a..f89ca980e6 100644 --- a/sim/rogue/talents.go +++ b/sim/rogue/talents.go @@ -7,7 +7,7 @@ import ( ) func (rogue *Rogue) ApplyTalents() { - rogue.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeLeather) + rogue.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeLeather, 87504) rogue.PseudoStats.MeleeSpeedMultiplier *= []float64{1, 1.02, 1.04, 1.06}[rogue.Talents.LightningReflexes] rogue.AddStat(stats.PhysicalHitPercent, 2*float64(rogue.Talents.Precision)) rogue.AddStat(stats.SpellHitPercent, 2*float64(rogue.Talents.Precision)) diff --git a/sim/shaman/elemental/elemental.go b/sim/shaman/elemental/elemental.go index 5119d14b1c..6331e71b5b 100644 --- a/sim/shaman/elemental/elemental.go +++ b/sim/shaman/elemental/elemental.go @@ -87,7 +87,7 @@ func (eleShaman *ElementalShaman) Initialize() { func (ele *ElementalShaman) ApplyTalents() { ele.Shaman.ApplyTalents() - ele.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeMail) + ele.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeMail, 86529) } type ElementalShaman struct { diff --git a/sim/shaman/enhancement/enhancement.go b/sim/shaman/enhancement/enhancement.go index a4740fb9aa..27f5cb14a8 100644 --- a/sim/shaman/enhancement/enhancement.go +++ b/sim/shaman/enhancement/enhancement.go @@ -91,7 +91,7 @@ func (enh *EnhancementShaman) GetShaman() *shaman.Shaman { func (enh *EnhancementShaman) ApplyTalents() { enh.Shaman.ApplyTalents() - enh.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeMail) + enh.ApplyArmorSpecializationEffect(stats.Agility, proto.ArmorType_ArmorTypeMail, 86529) } func (enh *EnhancementShaman) Initialize() { diff --git a/sim/shaman/restoration/restoration.go b/sim/shaman/restoration/restoration.go index 4ea2cbd52d..614f1a6b7f 100644 --- a/sim/shaman/restoration/restoration.go +++ b/sim/shaman/restoration/restoration.go @@ -87,5 +87,5 @@ func (resto *RestorationShaman) Initialize() { func (resto *RestorationShaman) ApplyTalents() { resto.Shaman.ApplyTalents() - resto.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeMail) + resto.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeMail, 86529) } diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index a834090844..00a4837daf 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -53,7 +53,7 @@ func (warlock *Warlock) GetWarlock() *Warlock { } func (warlock *Warlock) ApplyTalents() { - warlock.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth) + warlock.ApplyArmorSpecializationEffect(stats.Intellect, proto.ArmorType_ArmorTypeCloth, 86091) warlock.ApplyAfflictionTalents() warlock.ApplyDemonologyTalents() diff --git a/sim/warrior/arms/talents.go b/sim/warrior/arms/talents.go index 2c41dbae11..afef52282a 100644 --- a/sim/warrior/arms/talents.go +++ b/sim/warrior/arms/talents.go @@ -10,7 +10,7 @@ import ( ) func (war *ArmsWarrior) ApplyTalents() { - war.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate) + war.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate, 86526) war.Warrior.ApplyCommonTalents() war.RegisterBladestorm() diff --git a/sim/warrior/fury/talents.go b/sim/warrior/fury/talents.go index 3b96e17b6b..85de7df3ae 100644 --- a/sim/warrior/fury/talents.go +++ b/sim/warrior/fury/talents.go @@ -10,7 +10,7 @@ import ( ) func (war *FuryWarrior) ApplyTalents() { - war.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate) + war.ApplyArmorSpecializationEffect(stats.Strength, proto.ArmorType_ArmorTypePlate, 86526) war.Warrior.ApplyCommonTalents() war.RegisterDeathWish() diff --git a/sim/warrior/protection/talents.go b/sim/warrior/protection/talents.go index f267064f51..2b0eeaa47f 100644 --- a/sim/warrior/protection/talents.go +++ b/sim/warrior/protection/talents.go @@ -10,7 +10,7 @@ import ( ) func (war *ProtectionWarrior) ApplyTalents() { - war.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate) + war.ApplyArmorSpecializationEffect(stats.Stamina, proto.ArmorType_ArmorTypePlate, 86526) // Vigilance is not implemented as it requires a second friendly target // We can probably fake it or make it configurable or something, but I expect it wouldn't From f48017e9dba985d14a6700a40a05be11a2bd33ca Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 21:16:41 +0100 Subject: [PATCH 096/127] Remove redundant CalcStatChanges --- sim/core/item_swaps.go | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 607fbec4f3..87e6fe25ea 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -267,17 +267,6 @@ func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { return eligibleSlots } -func (swap *ItemSwap) CalcStatChanges(slots []proto.ItemSlot) stats.Stats { - newStats := stats.Stats{} - for _, slot := range slots { - oldItemStats := swap.getItemStats(*swap.GetEquippedItemBySlot(slot)) - newItemStats := swap.getItemStats(*swap.GetUnequippedItemBySlot(slot)) - newStats = newStats.Add(newItemStats.Subtract(oldItemStats)) - } - - return newStats -} - func (swap *ItemSwap) CalcEquipmentStatsOffset(originalEquipment Equipment, swapEquipment Equipment) ItemSwapStats { allSlots := stats.Stats{} weaponSlots := stats.Stats{} From 8830faece2315d18d1b63d993f2a12c8aa29c8da Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Fri, 10 Jan 2025 21:51:27 +0100 Subject: [PATCH 097/127] Add missing Ele P4 WIP --- ui/shaman/elemental/sim.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/shaman/elemental/sim.ts b/ui/shaman/elemental/sim.ts index 0d3a5884bb..0825e53a5a 100644 --- a/ui/shaman/elemental/sim.ts +++ b/ui/shaman/elemental/sim.ts @@ -141,7 +141,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecElementalShaman, { // Preset rotations that the user can quickly select. rotations: [Presets.ROTATION_PRESET_DEFAULT, Presets.ROTATION_PRESET_AOE], // Preset gear configurations that the user can quickly select. - gear: [Presets.PRERAID_PRESET, Presets.P1_PRESET, Presets.P3_PRESET], + gear: [Presets.PRERAID_PRESET, Presets.P1_PRESET, Presets.P3_PRESET, Presets.P4_PRESET], itemSwaps: [Presets.P3_ITEM_SWAP, Presets.P4_ITEM_SWAP], builds: [Presets.P3_PRESET_BUILD_DEFAULT, Presets.P3_PRESET_BUILD_CLEAVE], From e16fb894740539f5d1381e43eec6b6fd992ca458 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Sat, 11 Jan 2025 16:10:12 -0800 Subject: [PATCH 098/127] Remove now-unused Slots field from ProcStatBonusEffect and ProcDamageEffect configs. On branch feature/add-trinket-swapping Changes to be committed: modified: sim/common/cata/damage_procs.go modified: sim/common/cata/enchant_effects.go modified: sim/common/shared/shared_utils.go modified: sim/common/wotlk/enchant_effects.go --- sim/common/cata/damage_procs.go | 2 -- sim/common/cata/enchant_effects.go | 10 ---------- sim/common/shared/shared_utils.go | 5 ----- sim/common/wotlk/enchant_effects.go | 4 ---- 4 files changed, 21 deletions(-) diff --git a/sim/common/cata/damage_procs.go b/sim/common/cata/damage_procs.go index 89410adfab..1fae0c054a 100644 --- a/sim/common/cata/damage_procs.go +++ b/sim/common/cata/damage_procs.go @@ -16,7 +16,6 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: core.TrinketSlots(), Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, @@ -34,7 +33,6 @@ func init() { MaxDmg: 8750, Flags: core.SpellFlagNoSpellMods | core.SpellFlagIgnoreModifiers | core.SpellFlagNoOnDamageDealt, Outcome: shared.OutcomeMeleeNoBlockDodgeParryCrit, - Slots: core.TrinketSlots(), Trigger: core.ProcTrigger{ Name: "Darkmoon Card: Hurricane", ProcMask: core.ProcMaskMeleeOrRanged, diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 6b16a3029b..45dd66a7e0 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -248,7 +248,6 @@ func init() { ProcChance: 0.25, Bonus: stats.Stats{stats.Spirit: 200}, Duration: time.Second * 15, - Slots: core.MeleeWeaponSlots(), }) // Enchant: 4097, Spell: 74242 - Enchant Weapon - Power Torrent @@ -263,7 +262,6 @@ func init() { ProcChance: 1.0 / 3.0, Bonus: stats.Stats{stats.Intellect: 500}, Duration: time.Second * 12, - Slots: core.MeleeWeaponSlots(), }) // Enchant: 4098, Spell: 74244 - Enchant Weapon - Windwalk @@ -276,7 +274,6 @@ func init() { PPM: 1, // based on old Wowhead comments, TODO: measure in Classic Bonus: stats.Stats{stats.DodgeRating: 600}, Duration: time.Second * 10, - Slots: core.MeleeWeaponSlots(), }) // Enchant: 4099, Spell: 74246 - Enchant Weapon - Landslide @@ -326,7 +323,6 @@ func init() { ProcChance: 0.25, Bonus: stats.Stats{stats.Intellect: 580}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4116, Spell: 75175 - Darkglow Embroidery @@ -341,7 +337,6 @@ func init() { ProcChance: 0.30, Bonus: stats.Stats{stats.Spirit: 580}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4118, Spell: 75178 - Swordguard Embroidery @@ -356,7 +351,6 @@ func init() { ProcChance: 0.15, Bonus: stats.Stats{stats.AttackPower: 1000, stats.RangedAttackPower: 1000}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 4175, Spell: 81932, Item: 59594 - Gnomish X-Ray Scope @@ -372,7 +366,6 @@ func init() { ProcChance: 0.1, Bonus: stats.Stats{stats.RangedAttackPower: 800}, Duration: time.Second * 10, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, }) // Enchant: 4176, Item: 59595 - R19 Threatfinder @@ -404,7 +397,6 @@ func init() { MaxDmg: 133, Outcome: shared.OutcomeMeleeCanCrit, IsMelee: true, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, }) // Enchant: 4216, Spell: 92437, Item: 55056 - Pyrium Shield Spike @@ -422,7 +414,6 @@ func init() { MinDmg: 210, MaxDmg: 350, IsMelee: true, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, }) // Enchant: 4267, Spell: 99623, Item: 70139 - Flintlocke's Woodchucker @@ -438,7 +429,6 @@ func init() { ProcChance: 0.1, Bonus: stats.Stats{stats.Agility: 300}, Duration: time.Second * 10, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotRanged}, }, shared.DamageEffect{ SpellID: 99621, diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 94f16c8441..51e6a4148d 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -29,10 +29,6 @@ type ProcStatBonusEffect struct { // Any other custom proc conditions not covered by the above fields. CustomProcCondition core.CustomStatBuffProcCondition - - // Used to register for Item Swapping when the effect is not an equippable Item by itself. - // For example a Weapon or Back enchant. - Slots []proto.ItemSlot } type DamageEffect struct { @@ -463,7 +459,6 @@ type ProcDamageEffect struct { ItemID int32 SpellID int32 EnchantID int32 - Slots []proto.ItemSlot Trigger core.ProcTrigger School core.SpellSchool diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 92f302af91..5c99d89584 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -125,7 +125,6 @@ func init() { MaxDmg: 67, Outcome: shared.OutcomeMeleeCanCrit, IsMelee: true, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotOffHand}, }) // Enchant: 3247, Spell: 44595 - Scourgebane @@ -225,7 +224,6 @@ func init() { Bonus: stats.Stats{stats.HasteRating: 250}, Duration: time.Second * 10, IgnoreSpellIDs: []int32{47465, 12867}, - Slots: core.MeleeWeaponSlots(), }) // Enchant: 3843, Spell: 61471 - Diamond-cut Refractor Scope @@ -323,7 +321,6 @@ func init() { ProcChance: 0.35, Bonus: stats.Stats{stats.SpellPower: 295}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 3728, Spell: 55769 - Darkglow Embroidery @@ -371,7 +368,6 @@ func init() { ProcChance: 0.2, Bonus: stats.Stats{stats.AttackPower: 400, stats.RangedAttackPower: 400}, Duration: time.Second * 15, - Slots: []proto.ItemSlot{proto.ItemSlot_ItemSlotBack}, }) // Enchant: 3870, Spell: 64568 - Blood Draining From ea0ba0e584b7e1160567469caa672356b8e8ef01 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Sat, 11 Jan 2025 18:43:20 -0800 Subject: [PATCH 099/127] Minor code cleanup On branch feature/add-trinket-swapping Changes to be committed: modified: sim/common/shared/shared_utils.go modified: sim/core/database.go modified: sim/core/item_swaps.go --- sim/common/shared/shared_utils.go | 2 +- sim/core/database.go | 37 +++++++++---------------------- sim/core/item_swaps.go | 35 +++++++++++++---------------- 3 files changed, 27 insertions(+), 47 deletions(-) diff --git a/sim/common/shared/shared_utils.go b/sim/common/shared/shared_utils.go index 51e6a4148d..bb82ca37f9 100644 --- a/sim/common/shared/shared_utils.go +++ b/sim/common/shared/shared_utils.go @@ -402,7 +402,7 @@ func NewStackingStatBonusEffect(config StackingStatBonusEffect) { itemSwapIsEnabled := character.ItemSwap.IsEnabled() eligibleSlotsForItem := character.ItemSwap.EligibleSlotsForItem(config.ItemID) - itemExistsInMainEquip := !itemSwapIsEnabled || itemSwapIsEnabled && character.ItemSwap.ItemExistsInMainEquip(config.ItemID, eligibleSlotsForItem) + itemExistsInMainEquip := !itemSwapIsEnabled || character.ItemSwap.ItemExistsInMainEquip(config.ItemID, eligibleSlotsForItem) auraID := core.ActionID{SpellID: config.AuraID} if auraID.IsEmptyAction() { diff --git a/sim/core/database.go b/sim/core/database.go index 319c6e5694..4e879f2c10 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -3,6 +3,7 @@ package core import ( "fmt" "math" + "slices" "sync" "github.com/wowsims/cata/sim/core/proto" @@ -307,38 +308,20 @@ func (equipment *Equipment) EquipItem(item Item) { } } -func (equipment *Equipment) containsItem(itemID int32) bool { - for _, item := range equipment { - if item.ID == itemID { - return true - } - } - return false -} - -func (equipment *Equipment) containsEnchant(effectID int32) bool { - for _, item := range equipment { - if item.Enchant.EffectID == effectID || item.TempEnchant == effectID { - return true - } - } - return false +func (equipment *Equipment) containsEnchantInSlot(effectID int32, slot proto.ItemSlot) bool { + return (equipment[slot].Enchant.EffectID == effectID) || (equipment[slot].TempEnchant == effectID) } -func (equipment *Equipment) containsEnchantInSlot(effectID int32, slot proto.ItemSlot) bool { - if equipment[slot].Enchant.EffectID == effectID || equipment[slot].TempEnchant == effectID { - return true - } - return false +func (equipment *Equipment) containsEnchantInSlots(effectID int32, possibleSlots []proto.ItemSlot) bool { + return slices.ContainsFunc(possibleSlots, func(slot proto.ItemSlot) bool { + return equipment.containsEnchantInSlot(effectID, slot) + }) } func (equipment *Equipment) containsItemInSlots(itemID int32, possibleSlots []proto.ItemSlot) bool { - for _, slot := range possibleSlots { - if equipment[slot].ID == itemID { - return true - } - } - return false + return slices.ContainsFunc(possibleSlots, func(slot proto.ItemSlot) bool { + return equipment[slot].ID == itemID + }) } func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec { diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 87e6fe25ea..af038aeb91 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -143,14 +143,15 @@ type ItemSwapProcConfig struct { func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isItemProc := config.ItemID != 0 isEnchantEffectProc := config.EnchantId != 0 + character := swap.character - swap.character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, slot proto.ItemSlot) { - var isItemSlotMatch = false + character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, _ proto.ItemSlot) { + isItemSlotMatch := false if isItemProc { - isItemSlotMatch = swap.character.HasItemEquipped(config.ItemID) + isItemSlotMatch = character.hasItemEquipped(config.ItemID, config.Slots) } else if isEnchantEffectProc { - isItemSlotMatch = swap.HasEnchantEquipped(config.EnchantId, config.Slots) + isItemSlotMatch = character.hasEnchantEquipped(config.EnchantId, config.Slots) } if isItemSlotMatch { @@ -174,7 +175,7 @@ func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { } swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - hasItemEquipped := swap.character.HasItemEquipped(itemID) + hasItemEquipped := swap.character.hasItemEquipped(itemID, slots) spell := swap.character.GetSpell(ActionID{ItemID: itemID}) if spell != nil { @@ -214,12 +215,12 @@ func (swap *ItemSwap) IsSwapped() bool { return swap.swapSet == proto.APLActionItemSwap_Swap1 } -func (character *Character) HasItemEquipped(itemID int32) bool { - return character.Equipment.containsItem(itemID) +func (character *Character) hasItemEquipped(itemID int32, possibleSlots []proto.ItemSlot) bool { + return character.Equipment.containsItemInSlots(itemID, possibleSlots) } -func (swap *ItemSwap) HasEnchantEquipped(effectID int32, possibleSlots []proto.ItemSlot) bool { - return swap.character.Equipment.containsEnchant(effectID) +func (character *Character) hasEnchantEquipped(effectID int32, possibleSlots []proto.ItemSlot) bool { + return character.Equipment.containsEnchantInSlots(effectID, possibleSlots) } func (swap *ItemSwap) GetEquippedItemBySlot(slot proto.ItemSlot) *Item { @@ -239,31 +240,27 @@ func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32, possibleSlots []proto.It } func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot { - item := GetItemByID(itemID) - eligibleSlots := eligibleSlotsForItem(item, swap.isFuryWarrior) + eligibleSlots := eligibleSlotsForItem(GetItemByID(itemID), swap.isFuryWarrior) if !swap.IsEnabled() { return eligibleSlots } else { - slots := FilterSlice(eligibleSlots, func(slot proto.ItemSlot) bool { + return FilterSlice(eligibleSlots, func(slot proto.ItemSlot) bool { return (swap.originalEquip[slot].ID == itemID) || (swap.swapEquip[slot].ID == itemID) }) - return slots } } func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { - var eligibleSlots = []proto.ItemSlot{} + var eligibleSlots []proto.ItemSlot - if !swap.IsEnabled() { - return []proto.ItemSlot{} - } else { - for slot := range swap.originalEquip { - itemSlot := proto.ItemSlot(slot) + if swap.IsEnabled() { + for itemSlot := proto.ItemSlot(0); itemSlot < NumItemSlots; itemSlot++ { if swap.originalEquip.containsEnchantInSlot(effectID, itemSlot) || swap.swapEquip.containsEnchantInSlot(effectID, itemSlot) { eligibleSlots = append(eligibleSlots, itemSlot) } } } + return eligibleSlots } From fa5111397898b583aa7d069bd988158a1f382174 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sun, 12 Jan 2025 12:02:47 +0100 Subject: [PATCH 100/127] PR Optimisation --- sim/core/item_swaps.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 87e6fe25ea..fedf46b316 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -330,7 +330,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap newStats := Ternary(swap.swapSet == proto.APLActionItemSwap_Swap1, statsToSwap.Invert(), statsToSwap) if sim.Log != nil { - sim.Log("Item Swap - New Stats: %v", newStats.FlatString()) + sim.Log("Item Swap - Stats Change: %v", newStats.FlatString()) } character.AddStatsDynamic(sim, newStats) } @@ -353,15 +353,12 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap func (swap *ItemSwap) swapItem(slot proto.ItemSlot, has2H bool, isReset bool) bool { oldItem := *swap.GetEquippedItemBySlot(slot) - var newItem *Item if isReset { - newItem = &swap.originalEquip[slot] + swap.character.Equipment[slot] = swap.originalEquip[slot] } else { - newItem = swap.GetUnequippedItemBySlot(slot) + swap.character.Equipment[slot] = swap.unEquippedItems[slot] } - swap.character.Equipment[slot] = *newItem - //2H will swap out the offhand also. if has2H && slot == proto.ItemSlot_ItemSlotMainHand && !swap.isFuryWarrior { swap.swapItem(proto.ItemSlot_ItemSlotOffHand, has2H, isReset) From f7a41741f179679e479aeb7d2c706190aef5e7c6 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sun, 12 Jan 2025 12:07:31 +0100 Subject: [PATCH 101/127] Fix Hunter item set bug --- sim/hunter/cata_items.go | 8 +------- sim/hunter/marksmanship/TestMM.results | 4 ++-- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 75f20a8b6a..329c48a27f 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -107,13 +107,7 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() - // Handled in Cobra Shot - setBonusAura.AttachSpellMod(core.SpellModConfig{ - Kind: core.SpellMod_DamageDone_Flat, - FloatValue: 0.1, - ClassMask: HunterSpellSteadyShot, - }) - + // Handled in Cobra and Steady code respectively setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { hunter.Has2pcT13 = true }) diff --git a/sim/hunter/marksmanship/TestMM.results b/sim/hunter/marksmanship/TestMM.results index 0007ca63be..642c5e2313 100644 --- a/sim/hunter/marksmanship/TestMM.results +++ b/sim/hunter/marksmanship/TestMM.results @@ -2179,8 +2179,8 @@ dps_results: { dps_results: { key: "TestMM-AllItems-WyrmstalkerBattlegear" value: { - dps: 24506.21055 - tps: 22081.788 + dps: 24191.33598 + tps: 21766.91344 } } dps_results: { From 7141ef4a2c62563ede20d26cc1dd55d97e559cd2 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sun, 12 Jan 2025 12:11:17 +0100 Subject: [PATCH 102/127] Fix T13 4P spellmask --- sim/warlock/affliction/TestAffliction.results | 4 ++-- sim/warlock/demonology/TestDemonology.results | 4 ++-- sim/warlock/destruction/TestDestruction.results | 4 ++-- sim/warlock/items.go | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sim/warlock/affliction/TestAffliction.results b/sim/warlock/affliction/TestAffliction.results index 61a898a93d..c227953d43 100644 --- a/sim/warlock/affliction/TestAffliction.results +++ b/sim/warlock/affliction/TestAffliction.results @@ -1742,8 +1742,8 @@ dps_results: { dps_results: { key: "TestAffliction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 33184.44255 - tps: 23177.12207 + dps: 33731.50632 + tps: 23572.2115 } } dps_results: { diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index c9714e23cb..c345e1e783 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1742,8 +1742,8 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 34756.2262 - tps: 17522.13141 + dps: 35122.27348 + tps: 17641.19102 } } dps_results: { diff --git a/sim/warlock/destruction/TestDestruction.results b/sim/warlock/destruction/TestDestruction.results index 424dc39a70..ded62a81f6 100644 --- a/sim/warlock/destruction/TestDestruction.results +++ b/sim/warlock/destruction/TestDestruction.results @@ -1742,8 +1742,8 @@ dps_results: { dps_results: { key: "TestDestruction-AllItems-VestmentsoftheFacelessShroud" value: { - dps: 35168.19432 - tps: 20636.46217 + dps: 35497.41631 + tps: 20804.38168 } } dps_results: { diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 752533bc1a..d65b25fc1c 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -257,7 +257,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ Name: "Item - Warlock T13 4P Bonus", ActionID: core.ActionID{SpellID: 105787}, Callback: core.CallbackOnCastComplete, - ClassSpellMask: WarlockSpellShadowBurn, + ClassSpellMask: WarlockSpellSoulBurn, Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { aura.Activate(sim) }, From 71284524ad29a3d0c1ee365e78bb680a873baf07 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Sun, 12 Jan 2025 15:24:21 +0100 Subject: [PATCH 103/127] Tweak Item Swap UI style & add DW check to Slam --- sim/warrior/slam.go | 3 +-- .../components/gear_picker/gear_picker.tsx | 6 +---- .../gear_picker/icon_item_swap_picker.tsx | 19 +++++++++++--- .../components/pickers/item_swap_picker.tsx | 5 ++-- .../core/components/_item_swap_picker.scss | 25 ++++++++++++++++++- ui/scss/shared/_gems.scss | 3 ++- 6 files changed, 46 insertions(+), 15 deletions(-) diff --git a/sim/warrior/slam.go b/sim/warrior/slam.go index 2cc54846ef..4e10400187 100644 --- a/sim/warrior/slam.go +++ b/sim/warrior/slam.go @@ -31,7 +31,6 @@ func (warrior *Warrior) RegisterSlamSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { ohBaseDamage := weaponDamageConfig.CalcAddedSpellDamage() + spell.Unit.OHNormalizedWeaponDamage(sim, spell.MeleeAttackPower()) - spell.CalcAndDealDamage(sim, target, ohBaseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit) }, }) @@ -83,7 +82,7 @@ func (warrior *Warrior) RegisterSlamSpell() { } // SMF adds an OH hit to slam - if warrior.Talents.SingleMindedFury { + if warrior.Talents.SingleMindedFury && warrior.AutoAttacks.IsDualWielding { ohSlam.Cast(sim, target) } }, diff --git a/ui/core/components/gear_picker/gear_picker.tsx b/ui/core/components/gear_picker/gear_picker.tsx index 0119d65508..305ef7b193 100644 --- a/ui/core/components/gear_picker/gear_picker.tsx +++ b/ui/core/components/gear_picker/gear_picker.tsx @@ -212,11 +212,7 @@ export class ItemRenderer extends Component { const gemContainer = createGemContainer(socketColor, newItem.gems[gemIdx], gemIdx); if (gemIdx === newItem.numPossibleSockets - 1 && [ItemType.ItemTypeWrist, ItemType.ItemTypeHands].includes(newItem.item.type)) { const updateProfession = () => { - if (this.player.isBlacksmithing()) { - gemContainer.classList.remove('hide'); - } else { - gemContainer.classList.add('hide'); - } + gemContainer.classList[this.player.isBlacksmithing() ? 'remove' : 'add']('hide'); }; this.player.professionChangeEmitter.on(updateProfession); updateProfession(); diff --git a/ui/core/components/gear_picker/icon_item_swap_picker.tsx b/ui/core/components/gear_picker/icon_item_swap_picker.tsx index dce30bd214..e76bfbb963 100644 --- a/ui/core/components/gear_picker/icon_item_swap_picker.tsx +++ b/ui/core/components/gear_picker/icon_item_swap_picker.tsx @@ -1,7 +1,7 @@ import { ref } from 'tsx-vanilla'; import { Player } from '../../player'; -import { ItemSlot } from '../../proto/common'; +import { ItemSlot, ItemType } from '../../proto/common'; import { EquippedItem } from '../../proto_utils/equipped_item'; import { SimUI } from '../../sim_ui'; import { EventID } from '../../typed_event'; @@ -52,18 +52,31 @@ export default class IconItemSwapPicker extends Component { this.iconAnchor.style.backgroundImage = `url('${getEmptySlotIconUrl(this.slot)}')`; this.iconAnchor.removeAttribute('data-wowhead'); this.iconAnchor.href = '#'; - this.socketsContainerElem.replaceChildren(); if (newItem) { newItem.asActionId().fillAndSet(this.iconAnchor, true, true); this.player.setWowheadData(newItem, this.iconAnchor); this.socketsContainerElem.replaceChildren( - <>{newItem.allSocketColors().map((socketColor, gemIdx) => createGemContainer(socketColor, newItem.gems[gemIdx], gemIdx))}, + <> + {newItem.allSocketColors().map((socketColor, gemIdx) => { + const gemContainer = createGemContainer(socketColor, newItem.gems[gemIdx], gemIdx); + if (gemIdx === newItem.numPossibleSockets - 1 && [ItemType.ItemTypeWrist, ItemType.ItemTypeHands].includes(newItem.item.type)) { + console.log(gemContainer); + const updateProfession = () => { + gemContainer.classList[this.player.isBlacksmithing() ? 'remove' : 'add']('hide'); + }; + this.player.professionChangeEmitter.on(updateProfession); + updateProfession(); + } + return gemContainer; + })} + , ); this.iconAnchor.classList.add('active'); } else { + this.socketsContainerElem.replaceChildren(); this.iconAnchor.classList.remove('active'); } } diff --git a/ui/core/components/pickers/item_swap_picker.tsx b/ui/core/components/pickers/item_swap_picker.tsx index 82c28257a1..2f80d9abd3 100644 --- a/ui/core/components/pickers/item_swap_picker.tsx +++ b/ui/core/components/pickers/item_swap_picker.tsx @@ -17,13 +17,12 @@ export interface ItemSwapConfig { export class ItemSwapPicker extends Component { private readonly itemSlots: Array; - private readonly enableItemSwapPicker: BooleanPicker>; constructor(parentElem: HTMLElement, simUI: SimUI, player: Player, config: ItemSwapConfig) { super(parentElem, 'item-swap-picker-root'); this.itemSlots = config.itemSlots; - this.enableItemSwapPicker = new BooleanPicker(this.rootElem, player, { + new BooleanPicker(this.rootElem, player, { id: 'enable-item-swap', reverse: true, label: 'Enable Item Swapping', @@ -42,7 +41,7 @@ export class ItemSwapPicker extends Component { const itemSwapContainer = Input.newGroupContainer('icon-group'); this.rootElem.appendChild( <> -
+
+ {itemSwapContainer} +
+ {config.note && ( +

+ {config.note} +

+ )} + , + ); + + const toggleEnabled = () => { + if (!player.itemSwapSettings.getEnableItemSwap()) { + swapPickerContainerRef.value?.classList.add('hide'); + noteRef.value?.classList.add('hide'); + } else { + swapPickerContainerRef.value?.classList.remove('hide'); + noteRef.value?.classList.remove('hide'); + } + }; + player.itemSwapSettings.changeEmitter.on(toggleEnabled); + toggleEnabled(); + + if (swapButtonRef.value) { + swapButtonRef.value.addEventListener('click', _event => this.swapWithGear(TypedEvent.nextEventID(), player)); + tippy(swapButtonRef.value, { + content: 'Swap with equipped items', + }); + } + + const tmpContainer = (<>) as HTMLElement; + this.itemSlots.forEach(itemSlot => { + new IconItemSwapPicker(tmpContainer, simUI, player, itemSlot); + }); + + itemSwapContainer.appendChild(tmpContainer); + } + + swapWithGear(eventID: EventID, player: Player) { + let newGear = player.getGear(); + let newIsg = player.itemSwapSettings.getGear(); + + this.itemSlots.forEach(slot => { + const gearItem = player.getGear().getEquippedItem(slot); + const swapItem = player.itemSwapSettings.getGear().getEquippedItem(slot); + + newGear = newGear.withEquippedItem(slot, swapItem, player.canDualWield2H()); + newIsg = newIsg.withEquippedItem(slot, gearItem, player.canDualWield2H()); + }); + + TypedEvent.freezeAllAndDo(() => { + player.setGear(eventID, newGear); + player.itemSwapSettings.setGear(eventID, newIsg); + }); + } +} diff --git a/ui/core/components/pickers/item_swap_picker.tsx b/ui/core/components/pickers/item_swap_picker.tsx deleted file mode 100644 index 2f80d9abd3..0000000000 --- a/ui/core/components/pickers/item_swap_picker.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import tippy from 'tippy.js'; -import { ref } from 'tsx-vanilla'; - -import { Player } from '../../player.js'; -import { ItemSlot, Spec } from '../../proto/common.js'; -import { SimUI } from '../../sim_ui.js'; -import { EventID, TypedEvent } from '../../typed_event.js'; -import { Component } from '../component.js'; -import IconItemSwapPicker from '../gear_picker/icon_item_swap_picker.js'; -import { Input } from '../input.js'; -import { BooleanPicker } from './boolean_picker.js'; - -export interface ItemSwapConfig { - itemSlots: Array; - note?: string; -} - -export class ItemSwapPicker extends Component { - private readonly itemSlots: Array; - - constructor(parentElem: HTMLElement, simUI: SimUI, player: Player, config: ItemSwapConfig) { - super(parentElem, 'item-swap-picker-root'); - this.itemSlots = config.itemSlots; - - new BooleanPicker(this.rootElem, player, { - id: 'enable-item-swap', - reverse: true, - label: 'Enable Item Swapping', - labelTooltip: 'Allows configuring an Item Swap Set which is used with the Item Swap APL action.', - extraCssClasses: ['input-inline'], - getValue: (player: Player) => player.getEnableItemSwap(), - setValue(eventID: EventID, player: Player, newValue: boolean) { - player.setEnableItemSwap(eventID, newValue); - }, - changedEvent: (player: Player) => player.itemSwapChangeEmitter, - }); - - const swapPickerContainerRef = ref(); - const swapButtonRef = ref(); - const noteRef = ref(); - const itemSwapContainer = Input.newGroupContainer('icon-group'); - this.rootElem.appendChild( - <> -
- - - {itemSwapContainer} -
- {config.note && ( -

- {config.note} -

- )} - , - ); - - const toggleEnabled = () => { - if (!player.getEnableItemSwap()) { - swapPickerContainerRef.value?.classList.add('hide'); - noteRef.value?.classList.add('hide'); - } else { - swapPickerContainerRef.value?.classList.remove('hide'); - noteRef.value?.classList.remove('hide'); - } - }; - player.itemSwapChangeEmitter.on(toggleEnabled); - toggleEnabled(); - - if (swapButtonRef.value) { - swapButtonRef.value.addEventListener('click', _event => this.swapWithGear(TypedEvent.nextEventID(), player)); - tippy(swapButtonRef.value, { - content: 'Swap with equipped items', - }); - } - - const tmpContainer = (<>) as HTMLElement; - this.itemSlots.forEach(itemSlot => { - new IconItemSwapPicker(tmpContainer, simUI, player, itemSlot); - }); - - itemSwapContainer.appendChild(tmpContainer); - } - - swapWithGear(eventID: EventID, player: Player) { - let newGear = player.getGear(); - let newIsg = player.getItemSwapGear(); - - this.itemSlots.forEach(slot => { - const gearItem = player.getGear().getEquippedItem(slot); - const swapItem = player.getItemSwapGear().getEquippedItem(slot); - - newGear = newGear.withEquippedItem(slot, swapItem, player.canDualWield2H()); - newIsg = newIsg.withEquippedItem(slot, gearItem, player.canDualWield2H()); - }); - - TypedEvent.freezeAllAndDo(() => { - player.setGear(eventID, newGear); - player.setItemSwapGear(eventID, newIsg); - }); - } -} diff --git a/ui/core/individual_sim_ui.tsx b/ui/core/individual_sim_ui.tsx index ef6dec139e..535382c9c3 100644 --- a/ui/core/individual_sim_ui.tsx +++ b/ui/core/individual_sim_ui.tsx @@ -23,7 +23,6 @@ import { PresetBuild, PresetEpWeights, PresetGear, PresetItemSwap, PresetRotatio import { StatWeightsResult } from './proto/api'; import { APLRotation, APLRotation_Type as APLRotationType } from './proto/apl'; import { - Class, Consumes, Cooldowns, Debuffs, @@ -44,7 +43,6 @@ import { Stat, } from './proto/common'; import { IndividualSimSettings, SavedTalents } from './proto/ui'; -import { ItemSwapGear } from './proto_utils/gear'; import { getMetaGemConditionDescription } from './proto_utils/gems'; import { armorTypeNames, professionNames } from './proto_utils/names'; import { pseudoStatIsCapped, StatCap, Stats, UnitStat } from './proto_utils/stats'; @@ -516,8 +514,7 @@ export abstract class IndividualSimUI extends SimUI { this.player.getRaid()!.setBuffs(eventID, this.individualConfig.defaults.raidBuffs); this.player.setEpWeights(eventID, this.individualConfig.defaults.epWeights); if (this.individualConfig.defaults.itemSwap) { - this.player.setEnableItemSwap(eventID, true); - this.player.setItemSwapGear(eventID, this.sim.db.lookupItemSwap(this.individualConfig.defaults.itemSwap || ItemSwap.create())); + this.player.itemSwapSettings.setItemSwapSettings(eventID, true, this.sim.db.lookupItemSwap(this.individualConfig.defaults.itemSwap || ItemSwap.create())); } const defaultRatios = this.player.getDefaultEpRatios(tankSpec, healingSpec); diff --git a/ui/core/player.ts b/ui/core/player.ts index a205d2e04c..798816a7f3 100644 --- a/ui/core/player.ts +++ b/ui/core/player.ts @@ -1,3 +1,4 @@ +import { ItemSwapSettings } from './components/item_swap_picker'; import Toast from './components/toast'; import * as Mechanics from './constants/mechanics'; import { MAX_PARTY_SIZE, Party } from './party'; @@ -236,8 +237,7 @@ export class Player { private bonusStats: Stats = new Stats(); private gear: Gear = new Gear({}); //private bulkEquipmentSpec: BulkEquipmentSpec = BulkEquipmentSpec.create(); - private enableItemSwap = false; - private itemSwapGear: ItemSwapGear = new ItemSwapGear({}); + itemSwapSettings: ItemSwapSettings; private race: Race; private profession1: Profession = 0; private profession2: Profession = 0; @@ -280,7 +280,6 @@ export class Player { readonly consumesChangeEmitter = new TypedEvent('PlayerConsumes'); readonly bonusStatsChangeEmitter = new TypedEvent('PlayerBonusStats'); readonly gearChangeEmitter = new TypedEvent('PlayerGear'); - readonly itemSwapChangeEmitter = new TypedEvent('PlayerItemSwap'); readonly professionChangeEmitter = new TypedEvent('PlayerProfession'); readonly raceChangeEmitter = new TypedEvent('PlayerRace'); readonly rotationChangeEmitter = new TypedEvent('PlayerRotation'); @@ -329,6 +328,8 @@ export class Player { this.itemEPCache[i] = new Map(); } + this.itemSwapSettings = new ItemSwapSettings(this); + this.changeEmitter = TypedEvent.onAny( [ this.nameChangeEmitter, @@ -336,7 +337,6 @@ export class Player { this.consumesChangeEmitter, this.bonusStatsChangeEmitter, this.gearChangeEmitter, - this.itemSwapChangeEmitter, this.professionChangeEmitter, this.raceChangeEmitter, this.rotationChangeEmitter, @@ -712,36 +712,6 @@ export class Player { this.gearChangeEmitter.emit(eventID); } - getEnableItemSwap(): boolean { - return this.enableItemSwap; - } - - setEnableItemSwap(eventID: EventID, newEnableItemSwap: boolean) { - if (newEnableItemSwap == this.enableItemSwap) return; - - this.enableItemSwap = newEnableItemSwap; - this.itemSwapChangeEmitter.emit(eventID); - } - - equipItemSwapitem(eventID: EventID, slot: ItemSlot, newItem: EquippedItem | null) { - this.setItemSwapGear(eventID, this.itemSwapGear.withEquippedItem(slot, newItem, this.canDualWield2H())); - } - - getItemSwapItem(slot: ItemSlot): EquippedItem | null { - return this.itemSwapGear.getEquippedItem(slot); - } - - getItemSwapGear(): ItemSwapGear { - return this.itemSwapGear; - } - - setItemSwapGear(eventID: EventID, newItemSwapGear: ItemSwapGear) { - if (newItemSwapGear.equals(this.itemSwapGear)) return; - - this.itemSwapGear = newItemSwapGear; - this.itemSwapChangeEmitter.emit(eventID); - } - /* setBulkEquipmentSpec(eventID: EventID, newBulkEquipmentSpec: BulkEquipmentSpec) { if (BulkEquipmentSpec.equals(this.bulkEquipmentSpec, newBulkEquipmentSpec)) @@ -1447,7 +1417,7 @@ export class Player { private toDatabase(): SimDatabase { const dbGear = this.getGear().toDatabase(this.sim.db); - const dbItemSwapGear = this.getItemSwapGear().toDatabase(this.sim.db); + const dbItemSwapGear = this.itemSwapSettings.getGear().toDatabase(this.sim.db); return Database.mergeSimDatabases(dbGear, dbItemSwapGear); } @@ -1468,8 +1438,8 @@ export class Player { PlayerProto.mergePartial(player, { equipment: gear.asSpec(), bonusStats: this.getBonusStats().toProto(), - enableItemSwap: this.getEnableItemSwap(), - itemSwap: this.getItemSwapGear().toProto(), + enableItemSwap: this.itemSwapSettings.getEnableItemSwap(), + itemSwap: this.itemSwapSettings.toProto(), }); } if (exportCategory(SimSettingCategories.Talents)) { @@ -1520,8 +1490,12 @@ export class Player { TypedEvent.freezeAllAndDo(() => { if (loadCategory(SimSettingCategories.Gear)) { this.setGear(eventID, proto.equipment ? this.sim.db.lookupEquipmentSpec(proto.equipment) : new Gear({})); - this.setEnableItemSwap(eventID, proto.enableItemSwap); - this.setItemSwapGear(eventID, proto.itemSwap ? this.sim.db.lookupItemSwap(proto.itemSwap) : new ItemSwapGear({})); + this.itemSwapSettings.setItemSwapSettings( + eventID, + proto.enableItemSwap, + proto.itemSwap ? this.sim.db.lookupItemSwap(proto.itemSwap) : new ItemSwapGear({}), + Stats.fromProto(proto.itemSwap?.prepullBonusStats), + ); this.setBonusStats(eventID, Stats.fromProto(proto.bonusStats || UnitStats.create())); //this.setBulkEquipmentSpec(eventID, BulkEquipmentSpec.create()); // Do not persist the bulk equipment settings. } diff --git a/ui/core/proto_utils/gear.ts b/ui/core/proto_utils/gear.ts index 6994c4ce96..50bd3b6464 100644 --- a/ui/core/proto_utils/gear.ts +++ b/ui/core/proto_utils/gear.ts @@ -389,7 +389,7 @@ export class Gear extends BaseGear { } /** - * Represents a item swap gear set, including items/enchants/gems. + * Represents a item swap gear set, including items/enchants/gems/bonusStats. * * This is an immutable type. */ @@ -406,9 +406,4 @@ export class ItemSwapGear extends BaseGear { return new ItemSwapGear(this.withEquippedItemInternal(newSlot, newItem, canDualWield2H)); } - toProto(): ItemSwap { - return ItemSwap.create({ - items: this.asArray().map(ei => (ei ? ei.asSpec() : ItemSpec.create())), - }); - } } diff --git a/ui/warlock/demonology/sim.ts b/ui/warlock/demonology/sim.ts index b9ecd9189d..e32c33ae81 100644 --- a/ui/warlock/demonology/sim.ts +++ b/ui/warlock/demonology/sim.ts @@ -105,13 +105,12 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecDemonologyWarlock, { otherInputs: { inputs: [ WarlockInputs.DetonateSeed(), - WarlockInputs.PrepullMastery, - WarlockInputs.PrepullPostSnapshotMana, OtherInputs.InputDelay, OtherInputs.DistanceFromTarget, OtherInputs.DarkIntentUptime, OtherInputs.TankAssignment, OtherInputs.ChannelClipDelay, + WarlockInputs.AssumePrepullMasteryElixir, ], }, itemSwapSlots: [ diff --git a/ui/warlock/inputs.ts b/ui/warlock/inputs.ts index 928306de0f..4f3046e0b0 100644 --- a/ui/warlock/inputs.ts +++ b/ui/warlock/inputs.ts @@ -1,8 +1,9 @@ import * as InputHelpers from '../core/components/input_helpers.js'; import { Player } from '../core/player.js'; -import { Spec } from '../core/proto/common.js'; -import { WarlockOptions_Summon as Summon, } from '../core/proto/warlock.js'; +import { Profession, Spec, Stat } from '../core/proto/common.js'; +import { WarlockOptions_Summon as Summon } from '../core/proto/warlock.js'; import { ActionId } from '../core/proto_utils/action_id.js'; +import { Stats } from '../core/proto_utils/stats'; import { WarlockSpecs } from '../core/proto_utils/utils'; // Configuration for spec-specific UI elements on the settings tab. @@ -33,16 +34,17 @@ export const DetonateSeed = () => }); // Demo only -export const PrepullMastery = - InputHelpers.makeClassOptionsNumberInput({ - fieldName: 'prepullMastery', - label: 'Prepull Mastery', - labelTooltip: 'Mastery in the prepull set equipped at the start. Only applies if it\'s value is > 0 and only before combat.', -}); +export const AssumePrepullMasteryElixir = InputHelpers.makeClassOptionsBooleanInput({ + fieldName: 'useItemSwapBonusStats', + label: 'Assume Prepull Mastery Elixir', + labelTooltip: 'Enabling this assumes you are using a Mastery Elixir during prepull.', + getValue: player => player.getClassOptions().useItemSwapBonusStats, + setValue: (eventID, player, newVal) => { + const newMessage = player.getClassOptions(); + newMessage.useItemSwapBonusStats = newVal; -export const PrepullPostSnapshotMana = - InputHelpers.makeClassOptionsNumberInput({ - fieldName: 'prepullPostSnapshotMana', - label: 'Mana after prepull Mastery snapshot', - labelTooltip: 'Total starting mana after swapping from the prepull set to your normal set. Only applies if the \'Prepull Mastery\' value is > 0.', + const bonusStats = newVal ? new Stats().withStat(Stat.StatMasteryRating, 225 + (player.hasProfession(Profession.Alchemy) ? 40 : 0)) : new Stats(); + player.itemSwapSettings.setBonusStats(eventID, bonusStats); + player.setClassOptions(eventID, newMessage); + }, }); diff --git a/ui/warrior/fury/inputs.ts b/ui/warrior/fury/inputs.ts index 386569092a..36b1413534 100644 --- a/ui/warrior/fury/inputs.ts +++ b/ui/warrior/fury/inputs.ts @@ -1,9 +1,10 @@ // Configuration for spec-specific UI elements on the settings tab. // These don't need to be in a separate file but it keeps things cleaner. -import * as InputHelpers from '../../core/components/input_helpers.js'; -import { Spec } from '../../core/proto/common.js'; -import { WarriorSyncType } from "../../core/proto/warrior"; +import * as InputHelpers from '../../core/components/input_helpers.js'; +import { Profession, Spec, Stat } from '../../core/proto/common.js'; +import { WarriorSyncType } from '../../core/proto/warrior'; +import { Stats } from '../../core/proto_utils/stats'; export const SyncTypeInput = InputHelpers.makeSpecOptionsEnumInput({ fieldName: 'syncType', @@ -18,3 +19,18 @@ export const SyncTypeInput = InputHelpers.makeSpecOptionsEnumInput({ + fieldName: 'useItemSwapBonusStats', + label: 'Assume Prepull Mastery Elixir', + labelTooltip: 'Enabling this assumes you are using a Mastery Elixir during prepull.', + getValue: player => player.getSpecOptions().useItemSwapBonusStats, + setValue: (eventID, player, newVal) => { + const newMessage = player.getSpecOptions(); + newMessage.useItemSwapBonusStats = newVal; + + const bonusStats = newVal ? new Stats().withStat(Stat.StatMasteryRating, 225 + (player.hasProfession(Profession.Alchemy) ? 40 : 0)) : new Stats(); + player.itemSwapSettings.setBonusStats(eventID, bonusStats); + player.setSpecOptions(eventID, newMessage); + }, +}); diff --git a/ui/warrior/fury/sim.ts b/ui/warrior/fury/sim.ts index 98cbbc6f6c..6c25448d3e 100644 --- a/ui/warrior/fury/sim.ts +++ b/ui/warrior/fury/sim.ts @@ -121,6 +121,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecFuryWarrior, { OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget, + FuryInputs.AssumePrepullMasteryElixir, ], }, itemSwapSlots: [ From ceb4d85b6b7f2c4e11e16202d45206dd8dce7b40 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 13 Jan 2025 22:52:18 +0100 Subject: [PATCH 114/127] Fix Warlock P3 gear change --- ui/warlock/demonology/gear_sets/p3.gear.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/warlock/demonology/gear_sets/p3.gear.json b/ui/warlock/demonology/gear_sets/p3.gear.json index dea8b42179..cb4cee85e1 100644 --- a/ui/warlock/demonology/gear_sets/p3.gear.json +++ b/ui/warlock/demonology/gear_sets/p3.gear.json @@ -6,7 +6,7 @@ { "id": 71434, "enchant": 4115, "reforging": 144 }, { "id": 71597, "enchant": 4102, "gems": [52207, 52207] }, { "id": 71471, "enchant": 4257, "gems": [0], "reforging": 144 }, - { "id": 71614, "enchant": 4107, "gems": [52205, 0], "reforging": 144 }, + { "id": 71614, "enchant": 4107, "gems": [52207, 0], "reforging": 144 }, { "id": 71613, "gems": [52207, 52207], "reforging": 165 }, { "id": 71596, "enchant": 4112, "gems": [52207, 52207], "reforging": 144 }, { "id": 71447, "enchant": 4104, "gems": [52207], "reforging": 144 }, From 9a7fb2f779be8887651f549d984eae6c66ef6718 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Mon, 13 Jan 2025 22:55:17 +0100 Subject: [PATCH 115/127] Fix Warlock P3 gear change --- sim/warlock/demonology/TestDemonology.results | 1500 ++++++++--------- 1 file changed, 750 insertions(+), 750 deletions(-) diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 97537526bc..212f9d9b47 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -4,7 +4,7 @@ character_stats_results: { final_stats: 666.75 final_stats: 668.85 final_stats: 9142.98 - final_stats: 7104.51 + final_stats: 7126.56 final_stats: 183 final_stats: 1743 final_stats: 784 @@ -12,10 +12,10 @@ character_stats_results: { final_stats: 0 final_stats: 0 final_stats: 0 - final_stats: 1403 + final_stats: 1383 final_stats: 788.1 final_stats: 0 - final_stats: 11570.361 + final_stats: 11594.616 final_stats: 0 final_stats: 0 final_stats: 0 @@ -26,76 +26,76 @@ character_stats_results: { final_stats: 9372 final_stats: 0 final_stats: 165925.72 - final_stats: 128966.65 + final_stats: 129297.4 final_stats: 1353.65 final_stats: 14.51184 final_stats: 17.01388 final_stats: 11.99505 - final_stats: 21.72981 + final_stats: 21.76289 final_stats: 5 } } dps_results: { key: "TestDemonology-AllItems-AgileShadowspiritDiamond" value: { - dps: 39419.93698 - tps: 20052.33241 + dps: 39459.91338 + tps: 20068.14531 } } dps_results: { key: "TestDemonology-AllItems-Althor'sAbacus-50366" value: { - dps: 37322.26001 - tps: 19000.69921 + dps: 37356.51893 + tps: 19011.15066 } } dps_results: { key: "TestDemonology-AllItems-AncientPetrifiedSeed-69001" value: { - dps: 37539.87555 - tps: 19056.41659 + dps: 37608.42358 + tps: 19111.93397 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-55889" value: { - dps: 38003.95174 - tps: 19231.65873 + dps: 38041.71999 + tps: 19244.29242 } } dps_results: { key: "TestDemonology-AllItems-Anhuur'sHymnal-56407" value: { - dps: 38068.245 - tps: 19265.67116 + dps: 38105.53953 + tps: 19277.65478 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-68972" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ApparatusofKhaz'goroth-69113" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ArrowofTime-72897" value: { - dps: 37264.2989 - tps: 18980.64798 + dps: 37291.57092 + tps: 18996.02402 } } dps_results: { key: "TestDemonology-AllItems-AustereShadowspiritDiamond" value: { - dps: 39097.6057 - tps: 19829.62745 + dps: 39137.08925 + tps: 19845.05164 } } dps_results: { @@ -108,555 +108,555 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-BaubleofTrueBlood-50726" value: { - dps: 36661.34295 - tps: 18706.20443 - hps: 101.18278 + dps: 36728.22584 + tps: 18760.56611 + hps: 101.27642 } } dps_results: { key: "TestDemonology-AllItems-BedrockTalisman-58182" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-59326" value: { - dps: 38771.26681 - tps: 19685.1713 + dps: 38782.08103 + tps: 19696.14489 } } dps_results: { key: "TestDemonology-AllItems-BellofEnragingResonance-65053" value: { - dps: 38984.44612 - tps: 19767.48545 + dps: 39033.33333 + tps: 19789.82301 } } dps_results: { key: "TestDemonology-AllItems-BindingPromise-67037" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Blood-SoakedAleMug-63843" value: { - dps: 37173.29392 - tps: 18906.67029 + dps: 37241.08768 + tps: 18961.64884 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-55995" value: { - dps: 37292.67896 - tps: 18936.80217 + dps: 37284.27104 + tps: 18991.88914 } } dps_results: { key: "TestDemonology-AllItems-BloodofIsiset-56414" value: { - dps: 37335.71755 - tps: 18966.93405 + dps: 37403.81824 + tps: 19022.12944 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofConquest-64687" value: { - dps: 36800.23 - tps: 18742.97731 + dps: 36865.30838 + tps: 18795.69374 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofDominance-64688" value: { - dps: 37503.22633 - tps: 19156.29777 + dps: 37572.07872 + tps: 19211.46919 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sBadgeofVictory-64689" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofCruelty-64740" value: { - dps: 37308.11057 - tps: 19047.80567 + dps: 37378.09083 + tps: 19064.63907 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofMeditation-64741" value: { - dps: 36658.63487 - tps: 18706.25429 + dps: 36725.41567 + tps: 18760.53477 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sEmblemofTenacity-64742" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofConquest-64761" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofDominance-64762" value: { - dps: 37647.93644 - tps: 19187.90755 + dps: 37716.47046 + tps: 19242.64075 } } dps_results: { key: "TestDemonology-AllItems-BloodthirstyGladiator'sInsigniaofVictory-64763" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77210" value: { - dps: 36817.92552 - tps: 18864.89594 + dps: 36883.32806 + tps: 18918.35675 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-77982" value: { - dps: 36790.39435 - tps: 18836.49905 + dps: 36855.90843 + tps: 18889.70772 } } dps_results: { key: "TestDemonology-AllItems-Bone-LinkFetish-78002" value: { - dps: 36822.18359 - tps: 18869.20571 + dps: 36886.38492 + tps: 18921.70675 } } dps_results: { key: "TestDemonology-AllItems-BottledLightning-66879" value: { - dps: 37519.65257 - tps: 19100.42953 + dps: 37573.81344 + tps: 19117.1992 } } dps_results: { key: "TestDemonology-AllItems-BottledWishes-77114" value: { - dps: 39124.9068 - tps: 20146.61957 + dps: 39162.94124 + tps: 20166.3547 } } dps_results: { key: "TestDemonology-AllItems-BracingShadowspiritDiamond" value: { - dps: 39300.0159 - tps: 19543.36312 + dps: 39323.88779 + tps: 19569.17458 } } dps_results: { key: "TestDemonology-AllItems-Brawler'sTrophy-232015" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-BurningShadowspiritDiamond" value: { - dps: 39624.00984 - tps: 20153.37356 + dps: 39648.43337 + tps: 20180.59086 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofConquest-73648" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofDominance-73498" value: { - dps: 38002.75773 - tps: 19422.2087 + dps: 38072.83536 + tps: 19477.91976 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sBadgeofVictory-73496" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofConquest-73643" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofDominance-73497" value: { - dps: 38340.71064 - tps: 19495.6067 + dps: 38408.34896 + tps: 19550.33805 } } dps_results: { key: "TestDemonology-AllItems-CataclysmicGladiator'sInsigniaofVictory-73491" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ChaoticShadowspiritDiamond" value: { - dps: 39493.58288 - tps: 20105.8537 + dps: 39545.15118 + tps: 20121.49531 } } dps_results: { key: "TestDemonology-AllItems-Coren'sChilledChromiumCoaster-232012" value: { - dps: 37313.36895 - tps: 19053.06406 + dps: 37380.26276 + tps: 19064.63907 } } dps_results: { key: "TestDemonology-AllItems-CoreofRipeness-58184" value: { - dps: 37850.57058 - tps: 19340.42347 + dps: 37895.4403 + tps: 19353.15315 } } dps_results: { key: "TestDemonology-AllItems-CorpseTongueCoin-50349" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77205" value: { - dps: 37312.02118 - tps: 19076.87032 + dps: 37360.27581 + tps: 19100.53092 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77972" value: { - dps: 37340.20182 - tps: 19084.79428 + dps: 37438.14892 + tps: 19141.04758 } } dps_results: { key: "TestDemonology-AllItems-CrecheoftheFinalDragon-77992" value: { - dps: 37510.42497 - tps: 19109.93433 + dps: 37553.40637 + tps: 19128.59728 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-59506" value: { - dps: 37054.36323 - tps: 19038.68323 + dps: 37094.51732 + tps: 19055.50024 } } dps_results: { key: "TestDemonology-AllItems-CrushingWeight-65118" value: { - dps: 37246.41525 - tps: 19039.30721 + dps: 37287.18716 + tps: 19053.85471 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77208" value: { - dps: 40019.59165 - tps: 21296.10651 + dps: 40055.58101 + tps: 21309.92892 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-77980" value: { - dps: 39484.18296 - tps: 20790.27526 + dps: 39524.96863 + tps: 20799.52216 } } dps_results: { key: "TestDemonology-AllItems-CunningoftheCruel-78000" value: { - dps: 40384.49724 - tps: 21463.77605 + dps: 40412.81262 + tps: 21517.89685 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Earthquake-62048" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62049" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Hurricane-62051" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-DarkmoonCard:Tsunami-62050" value: { - dps: 37850.57058 - tps: 19340.42347 + dps: 37895.4403 + tps: 19353.15315 } } dps_results: { key: "TestDemonology-AllItems-Deathbringer'sWill-50363" value: { - dps: 36998.39277 - tps: 18886.21698 + dps: 37075.77822 + tps: 18893.24948 } } dps_results: { key: "TestDemonology-AllItems-DestructiveShadowspiritDiamond" value: { - dps: 39168.48435 - tps: 19881.21908 + dps: 39219.73671 + tps: 19896.67802 } } dps_results: { key: "TestDemonology-AllItems-DislodgedForeignObject-50348" value: { - dps: 37743.57833 - tps: 19448.25222 + dps: 37747.44273 + tps: 19462.90199 } } dps_results: { key: "TestDemonology-AllItems-Dwyer'sCaber-70141" value: { - dps: 37377.90976 - tps: 19143.89232 + dps: 37416.49296 + tps: 19155.9928 } } dps_results: { key: "TestDemonology-AllItems-EffulgentShadowspiritDiamond" value: { - dps: 39097.6057 - tps: 19829.62745 + dps: 39137.08925 + tps: 19845.05164 } } dps_results: { key: "TestDemonology-AllItems-ElectrosparkHeartstarter-67118" value: { - dps: 37075.62253 - tps: 18951.4356 + dps: 37148.4957 + tps: 18957.39705 } } dps_results: { key: "TestDemonology-AllItems-EmberShadowspiritDiamond" value: { - dps: 39300.0159 - tps: 19935.87478 + dps: 39323.88779 + tps: 19962.59608 } } dps_results: { key: "TestDemonology-AllItems-EnigmaticShadowspiritDiamond" value: { - dps: 39168.48435 - tps: 19881.21908 + dps: 39219.73671 + tps: 19896.67802 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-59473" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheCyclone-65140" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-EssenceoftheEternalFlame-69002" value: { - dps: 37539.87555 - tps: 19056.41659 + dps: 37608.42358 + tps: 19111.93397 } } dps_results: { key: "TestDemonology-AllItems-EternalShadowspiritDiamond" value: { - dps: 39097.6057 - tps: 19829.62745 + dps: 39137.08925 + tps: 19845.05164 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77200" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77977" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-EyeofUnmaking-77997" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-59500" value: { - dps: 37850.57058 - tps: 19340.42347 + dps: 37895.4403 + tps: 19353.15315 } } dps_results: { key: "TestDemonology-AllItems-FallofMortality-65124" value: { - dps: 37990.58529 - tps: 19391.11457 + dps: 38017.08226 + tps: 19410.42307 } } dps_results: { key: "TestDemonology-AllItems-FieryQuintessence-69000" value: { - dps: 37898.64314 - tps: 19432.54204 + dps: 37942.97092 + tps: 19453.36089 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DemonPanther-52199" value: { - dps: 37221.36816 - tps: 18889.11177 + dps: 37259.52729 + tps: 18901.98417 } } dps_results: { key: "TestDemonology-AllItems-Figurine-DreamOwl-52354" value: { - dps: 37684.26255 - tps: 19223.51954 + dps: 37760.7113 + tps: 19286.41369 } } dps_results: { key: "TestDemonology-AllItems-Figurine-EarthenGuardian-52352" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Figurine-JeweledSerpent-52353" value: { - dps: 38480.47312 - tps: 19643.4757 + dps: 38557.39885 + tps: 19706.81976 } } dps_results: { key: "TestDemonology-AllItems-Figurine-KingofBoars-52351" value: { - dps: 37335.71755 - tps: 18966.93405 + dps: 37403.81824 + tps: 19022.12944 } } dps_results: { key: "TestDemonology-AllItems-FireoftheDeep-77117" value: { - dps: 37714.03697 - tps: 19124.89813 + dps: 37782.93142 + tps: 19180.66193 } } dps_results: { key: "TestDemonology-AllItems-FleetShadowspiritDiamond" value: { - dps: 39252.37068 - tps: 19881.26179 + dps: 39210.79265 + tps: 19896.78382 } } dps_results: { key: "TestDemonology-AllItems-FluidDeath-58181" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-ForlornShadowspiritDiamond" value: { - dps: 39300.0159 - tps: 19929.26591 + dps: 39323.88779 + tps: 19955.66684 } } dps_results: { key: "TestDemonology-AllItems-FoulGiftoftheDemonLord-72898" value: { - dps: 38989.39082 - tps: 19690.69154 + dps: 39025.62064 + tps: 19701.60115 } } dps_results: { key: "TestDemonology-AllItems-FuryofAngerforge-59461" value: { - dps: 37334.7131 - tps: 19041.76424 + dps: 37345.21215 + tps: 19053.57732 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56138" value: { - dps: 38133.46556 - tps: 19684.44618 + dps: 38191.83099 + tps: 19711.24762 } } dps_results: { key: "TestDemonology-AllItems-GaleofShadows-56462" value: { - dps: 38119.96131 - tps: 19608.12562 + dps: 38184.76445 + tps: 19629.57064 } } dps_results: { key: "TestDemonology-AllItems-GearDetector-61462" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { @@ -669,724 +669,724 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-GlowingTwilightScale-54589" value: { - dps: 37354.59634 - tps: 19013.55087 + dps: 37396.21317 + tps: 19032.44638 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-55266" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-GraceoftheHerald-56295" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HarmlightToken-63839" value: { - dps: 38088.26421 - tps: 19375.08006 + dps: 38127.50236 + tps: 19389.79481 } } dps_results: { key: "TestDemonology-AllItems-Harrison'sInsigniaofPanache-65803" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-59514" value: { - dps: 38207.28609 - tps: 19606.21194 + dps: 38227.65755 + tps: 19609.97043 } } dps_results: { key: "TestDemonology-AllItems-HeartofIgnacious-65110" value: { - dps: 38631.79213 - tps: 19779.68135 + dps: 38672.18233 + tps: 19797.18854 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-59224" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HeartofRage-65072" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-55868" value: { - dps: 37391.47908 - tps: 19311.82265 + dps: 37449.80126 + tps: 19338.56715 } } dps_results: { key: "TestDemonology-AllItems-HeartofSolace-56393" value: { - dps: 37280.95584 - tps: 19188.19642 + dps: 37345.71826 + tps: 19209.98734 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-55845" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HeartofThunder-56370" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-HeartoftheVile-66969" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ImpassiveShadowspiritDiamond" value: { - dps: 39168.48435 - tps: 19881.21908 + dps: 39219.73671 + tps: 19896.67802 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62464" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-ImpatienceofYouth-62469" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-55881" value: { - dps: 37292.67896 - tps: 18936.80217 + dps: 37284.27104 + tps: 18991.88914 } } dps_results: { key: "TestDemonology-AllItems-ImpetuousQuery-56406" value: { - dps: 37335.71755 - tps: 18966.93405 + dps: 37403.81824 + tps: 19022.12944 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77211" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-77983" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-IndomitablePride-78003" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-InsigniaofDiplomacy-61433" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77203" value: { - dps: 39736.90693 - tps: 20454.82873 + dps: 39771.26124 + tps: 20465.82607 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77971" value: { - dps: 39367.38848 - tps: 20055.10781 + dps: 39447.61621 + tps: 20077.37329 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheCorruptedMind-77991" value: { - dps: 40421.08398 - tps: 20579.14317 + dps: 40457.00151 + tps: 20587.65512 } } dps_results: { key: "TestDemonology-AllItems-InsigniaoftheEarthenLord-61429" value: { - dps: 37679.59259 - tps: 19156.58286 + dps: 37748.22013 + tps: 19212.51729 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-59354" value: { - dps: 36658.63487 - tps: 18717.58058 + dps: 36725.41567 + tps: 18771.39333 } } dps_results: { key: "TestDemonology-AllItems-JarofAncientRemedies-65029" value: { - dps: 36658.63487 - tps: 18719.04166 + dps: 36725.41567 + tps: 18772.75648 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-68926" value: { - dps: 38044.13388 - tps: 19429.41093 + dps: 38079.44054 + tps: 19439.92108 } } dps_results: { key: "TestDemonology-AllItems-JawsofDefeat-69111" value: { - dps: 38235.56761 - tps: 19508.59209 + dps: 38292.70204 + tps: 19500.32729 } } dps_results: { key: "TestDemonology-AllItems-JujuofNimbleness-63840" value: { - dps: 37173.29392 - tps: 18906.67029 + dps: 37241.08768 + tps: 18961.64884 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-55795" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-KeytotheEndlessChamber-56328" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-KiroptyricSigil-77113" value: { - dps: 37837.20895 - tps: 19469.52451 + dps: 37878.57662 + tps: 19488.362 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59685" value: { - dps: 37040.95491 - tps: 19081.62426 + dps: 37039.78056 + tps: 19112.04157 } } dps_results: { key: "TestDemonology-AllItems-KvaldirBattleStandard-59689" value: { - dps: 37040.95491 - tps: 19081.62426 + dps: 37039.78056 + tps: 19112.04157 } } dps_results: { key: "TestDemonology-AllItems-LadyLa-La'sSingingShell-67152" value: { - dps: 37057.78861 - tps: 18941.27457 + dps: 37128.12006 + tps: 18989.68204 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-55816" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-LeadenDespair-56347" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56102" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-LeftEyeofRajh-56427" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-LicensetoSlay-58180" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-55814" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-MagnetiteMirror-56345" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62467" value: { - dps: 36658.63487 - tps: 18706.22701 + dps: 36725.41567 + tps: 18760.50745 } } dps_results: { key: "TestDemonology-AllItems-MandalaofStirringPatterns-62472" value: { - dps: 36658.63487 - tps: 18706.22701 + dps: 36725.41567 + tps: 18760.50745 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56132" value: { - dps: 36985.07239 - tps: 18783.55783 + dps: 37038.80587 + tps: 18837.94119 } } dps_results: { key: "TestDemonology-AllItems-MarkofKhardros-56458" value: { - dps: 37024.83692 - tps: 18793.622 + dps: 37078.58913 + tps: 18848.02164 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-68994" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-MatrixRestabilizer-69150" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-55251" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-MightoftheOcean-56285" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62466" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-MirrorofBrokenImages-62471" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-MithrilStopwatch-232013" value: { - dps: 38510.99822 - tps: 19587.05907 + dps: 38582.13873 + tps: 19601.23338 } } dps_results: { key: "TestDemonology-AllItems-MoonwellChalice-70142" value: { - dps: 38795.22722 - tps: 19879.23244 + dps: 38838.35316 + tps: 19875.69754 } } dps_results: { key: "TestDemonology-AllItems-MoonwellPhial-70143" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-68982" value: { - dps: 38772.1112 - tps: 19684.91261 + dps: 38808.78927 + tps: 19695.91386 } } dps_results: { key: "TestDemonology-AllItems-NecromanticFocus-69139" value: { - dps: 39080.01901 - tps: 19797.97316 + dps: 39138.23106 + tps: 19789.71834 } } dps_results: { key: "TestDemonology-AllItems-Oremantle'sFavor-61448" value: { - dps: 37068.76308 - tps: 18954.55915 + dps: 37136.92913 + tps: 18960.73022 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedPickledEgg-232014" value: { - dps: 37784.58798 - tps: 19303.79003 + dps: 37832.65082 + tps: 19325.95649 } } dps_results: { key: "TestDemonology-AllItems-PetrifiedTwilightScale-54591" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-PhylacteryoftheNamelessLich-50365" value: { - dps: 37943.14137 - tps: 19285.68013 + dps: 37985.22381 + tps: 19303.05049 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-55237" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-PorcelainCrab-56280" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-PowerfulShadowspiritDiamond" value: { - dps: 39097.6057 - tps: 19829.62745 + dps: 39137.08925 + tps: 19845.05164 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-59441" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Prestor'sTalismanofMachination-65026" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-55854" value: { - dps: 36658.63487 - tps: 18706.37574 + dps: 36725.41567 + tps: 18760.65223 } } dps_results: { key: "TestDemonology-AllItems-Rainsong-56377" value: { - dps: 36658.63487 - tps: 18706.27611 + dps: 36725.41567 + tps: 18760.55662 } } dps_results: { key: "TestDemonology-AllItems-ReflectionoftheLight-77115" value: { - dps: 37911.88677 - tps: 19341.94292 + dps: 37980.86125 + tps: 19398.63962 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77201" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77978" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ResolveofUndying-77998" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ReverberatingShadowspiritDiamond" value: { - dps: 39419.93698 - tps: 20052.33241 + dps: 39459.91338 + tps: 20068.14531 } } dps_results: { key: "TestDemonology-AllItems-RevitalizingShadowspiritDiamond" value: { - dps: 39419.93698 - tps: 20052.25381 + dps: 39459.91338 + tps: 20068.06659 } } dps_results: { key: "TestDemonology-AllItems-Ricket'sMagneticFireball-70144" value: { - dps: 37415.92578 - tps: 19103.77266 + dps: 37458.89601 + tps: 19115.8659 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56100" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-RightEyeofRajh-56431" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-RosaryofLight-72901" value: { - dps: 36925.14299 - tps: 18907.179 + dps: 36982.49521 + tps: 18938.33003 } } dps_results: { key: "TestDemonology-AllItems-RottingSkull-77116" value: { - dps: 37516.43207 - tps: 19238.57855 + dps: 37556.63689 + tps: 19253.89402 } } dps_results: { key: "TestDemonology-AllItems-RuneofZeth-68998" value: { - dps: 38567.07405 - tps: 19775.18512 + dps: 38638.72286 + tps: 19816.80567 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-70399" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofConquest-72304" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-70401" value: { - dps: 37786.05334 - tps: 19306.85246 + dps: 37855.59944 + tps: 19362.32941 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofDominance-72448" value: { - dps: 37849.95335 - tps: 19340.86776 + dps: 37919.65619 + tps: 19396.41374 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-70400" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sBadgeofVictory-72450" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-70404" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofConquest-72309" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 37989.87283 - tps: 19330.845 + dps: 38055.53293 + tps: 19384.03334 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofDominance-72449" value: { - dps: 38060.52994 - tps: 19377.72687 + dps: 38129.26888 + tps: 19433.81974 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-70403" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-RuthlessGladiator'sInsigniaofVictory-72455" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-68915" value: { - dps: 36667.32409 - tps: 18710.23107 + dps: 36735.13789 + tps: 18765.49996 hps: 354.04187 } } dps_results: { key: "TestDemonology-AllItems-ScalesofLife-69109" value: { - dps: 36667.32409 - tps: 18710.23107 + dps: 36735.13789 + tps: 18765.49996 hps: 399.35591 } } dps_results: { key: "TestDemonology-AllItems-Schnottz'sMedallionofCommand-65805" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-55256" value: { - dps: 37083.70886 - tps: 18932.67484 + dps: 37151.53227 + tps: 18987.40763 } } dps_results: { key: "TestDemonology-AllItems-SeaStar-56290" value: { - dps: 37450.43936 - tps: 19127.77009 + dps: 37519.16228 + tps: 19182.90596 } } dps_results: { key: "TestDemonology-AllItems-SealoftheSevenSigns-77204" value: { - dps: 38335.04219 - tps: 19526.80398 + dps: 38378.61907 + tps: 19544.55526 } } dps_results: { key: "TestDemonology-AllItems-SealoftheSevenSigns-77969" value: { - dps: 38116.46373 - tps: 19463.389 + dps: 38179.6611 + tps: 19472.73302 } } dps_results: { key: "TestDemonology-AllItems-SealoftheSevenSigns-77989" value: { - dps: 38538.09587 - tps: 19634.25923 + dps: 38585.30327 + tps: 19657.69944 } } dps_results: { @@ -1399,344 +1399,344 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-ShardofWoe-60233" value: { - dps: 37487.99628 - tps: 19168.42313 + dps: 37574.39503 + tps: 19203.72678 } } dps_results: { key: "TestDemonology-AllItems-Shrine-CleansingPurifier-63838" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Sindragosa'sFlawlessFang-50364" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56115" value: { - dps: 37116.78146 - tps: 18872.67217 + dps: 37171.56148 + tps: 18927.50352 } } dps_results: { key: "TestDemonology-AllItems-Skardyn'sGrace-56440" value: { - dps: 37173.73605 - tps: 18894.40608 + dps: 37228.70044 + tps: 18949.31237 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-55879" value: { - dps: 37975.69827 - tps: 19274.02028 + dps: 37969.63031 + tps: 19330.26949 } } dps_results: { key: "TestDemonology-AllItems-Sorrowsong-56400" value: { - dps: 38109.06021 - tps: 19348.91746 + dps: 38181.37285 + tps: 19405.42822 } } dps_results: { key: "TestDemonology-AllItems-Soul'sAnguish-66994" value: { - dps: 37221.13734 - tps: 18888.99636 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-SoulCasket-58183" value: { - dps: 38554.53392 - tps: 19580.35178 + dps: 38547.07299 + tps: 19636.85023 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77206" value: { - dps: 37863.15872 - tps: 18976.56733 + dps: 37913.05767 + tps: 19031.97122 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77970" value: { - dps: 37863.48345 - tps: 19049.4638 + dps: 37930.56843 + tps: 19104.91552 } } dps_results: { key: "TestDemonology-AllItems-SoulshifterVortex-77990" value: { - dps: 37865.03636 - tps: 18997.9843 + dps: 37935.35481 + tps: 19053.59413 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-68981" value: { - dps: 37539.87555 - tps: 19056.41659 + dps: 37608.42358 + tps: 19111.93397 } } dps_results: { key: "TestDemonology-AllItems-SpidersilkSpindle-69138" value: { - dps: 37681.43198 - tps: 19102.07095 + dps: 37750.21676 + tps: 19157.75261 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77202" value: { - dps: 38001.12842 - tps: 19445.33248 + dps: 38047.70491 + tps: 19463.58994 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77973" value: { - dps: 37985.6366 - tps: 19418.40639 + dps: 38045.42128 + tps: 19433.04904 } } dps_results: { key: "TestDemonology-AllItems-StarcatcherCompass-77993" value: { - dps: 38355.88216 - tps: 19559.80199 + dps: 38394.27926 + tps: 19574.18466 } } dps_results: { key: "TestDemonology-AllItems-StayofExecution-68996" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Stonemother'sKiss-61411" value: { - dps: 37882.17192 - tps: 19274.2759 + dps: 37920.14234 + tps: 19289.24934 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62465" value: { - dps: 38483.29517 - tps: 19488.02949 + dps: 38520.95641 + tps: 19501.28363 } } dps_results: { key: "TestDemonology-AllItems-StumpofTime-62470" value: { - dps: 38594.39927 - tps: 19500.97581 + dps: 38631.07779 + tps: 19512.483 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-59332" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-SymbioticWorm-65048" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-TalismanofSinisterOrder-65804" value: { - dps: 37889.22567 - tps: 19172.73385 + dps: 37908.2876 + tps: 19199.591 } } dps_results: { key: "TestDemonology-AllItems-Tank-CommanderInsignia-63841" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-55819" value: { - dps: 37456.94996 - tps: 19067.23265 + dps: 37507.31143 + tps: 19104.39284 } } dps_results: { key: "TestDemonology-AllItems-TearofBlood-56351" value: { - dps: 37684.26255 - tps: 19223.51954 + dps: 37760.7113 + tps: 19286.41369 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-55810" value: { - dps: 37909.40012 - tps: 19245.98394 + dps: 37978.13846 + tps: 19301.69117 } } dps_results: { key: "TestDemonology-AllItems-TendrilsofBurrowingDark-56339" value: { - dps: 38374.79016 - tps: 19441.10877 + dps: 38446.01296 + tps: 19497.81882 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-68927" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-TheHungerer-69112" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-59519" value: { - dps: 38536.52713 - tps: 19523.53156 + dps: 38582.57541 + tps: 19536.53396 } } dps_results: { key: "TestDemonology-AllItems-Theralion'sMirror-65105" value: { - dps: 38877.34624 - tps: 19676.61176 + dps: 38905.25314 + tps: 19696.34805 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56121" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Throngus'sFinger-56449" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-55874" value: { - dps: 37292.67896 - tps: 18936.80217 + dps: 37284.27104 + tps: 18991.88914 } } dps_results: { key: "TestDemonology-AllItems-Tia'sGrace-56394" value: { - dps: 37335.71755 - tps: 18966.93405 + dps: 37403.81824 + tps: 19022.12944 } } dps_results: { key: "TestDemonology-AllItems-TinyAbominationinaJar-50706" value: { - dps: 36965.26644 - tps: 18830.14966 + dps: 37025.95768 + tps: 18862.50686 } } dps_results: { key: "TestDemonology-AllItems-Tyrande'sFavoriteDoll-64645" value: { - dps: 37753.99586 - tps: 19403.17082 + dps: 37809.78834 + tps: 19431.74245 } } dps_results: { key: "TestDemonology-AllItems-UnheededWarning-59520" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-UnquenchableFlame-67101" value: { - dps: 36658.63487 - tps: 18706.44277 + dps: 36725.41567 + tps: 18760.71096 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62463" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-62468" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-UnsolvableRiddle-68709" value: { - dps: 37459.01518 - tps: 18999.80519 + dps: 37450.92736 + tps: 19055.11886 } } dps_results: { key: "TestDemonology-AllItems-VariablePulseLightningCapacitor-68925" value: { - dps: 38015.60878 - tps: 19253.55074 + dps: 38060.56663 + tps: 19262.02376 } } dps_results: { key: "TestDemonology-AllItems-Varo'then'sBrooch-72899" value: { - dps: 36999.78267 - tps: 18792.24156 + dps: 37088.03952 + tps: 18860.9333 } } dps_results: { key: "TestDemonology-AllItems-VeilofLies-72900" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-68995" value: { - dps: 36829.08661 - tps: 18810.90074 + dps: 36881.08868 + tps: 18820.29305 } } dps_results: { key: "TestDemonology-AllItems-VesselofAcceleration-69167" value: { - dps: 36838.25959 - tps: 18818.19645 + dps: 36888.11112 + tps: 18826.51269 } } dps_results: { @@ -1749,924 +1749,924 @@ dps_results: { dps_results: { key: "TestDemonology-AllItems-VialofShadows-77207" value: { - dps: 36851.06593 - tps: 18897.20198 + dps: 36917.66775 + tps: 18952.44568 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77979" value: { - dps: 36823.22633 - tps: 18870.50547 + dps: 36889.74838 + tps: 18924.66608 } } dps_results: { key: "TestDemonology-AllItems-VialofShadows-77999" value: { - dps: 36856.32555 - tps: 18902.30493 + dps: 36921.75687 + tps: 18955.75029 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-59515" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-VialofStolenMemories-65109" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-61033" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofConquest-70517" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-61035" value: { - dps: 37550.45677 - tps: 19181.43951 + dps: 37619.42501 + tps: 19236.66195 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofDominance-70518" value: { - dps: 37655.47505 - tps: 19237.34292 + dps: 37724.70088 + tps: 19292.67881 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-61034" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sBadgeofVictory-70519" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAccuracy-61027" value: { - dps: 37221.13734 - tps: 18889.2393 + dps: 37259.29654 + tps: 18901.86879 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofAlacrity-61028" value: { - dps: 37450.1143 - tps: 19224.06629 + dps: 37486.68684 + tps: 19231.36338 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofCruelty-61026" value: { - dps: 37276.8758 - tps: 19049.08739 + dps: 37318.63251 + tps: 19062.95151 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProficiency-61030" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofProwess-61029" value: { - dps: 37483.79498 - tps: 19017.15384 + dps: 37552.15436 + tps: 19072.52994 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sEmblemofTenacity-61032" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-61047" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofConquest-70577" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-61045" value: { - dps: 37714.37599 - tps: 19211.56993 + dps: 37782.75948 + tps: 19266.73724 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofDominance-70578" value: { - dps: 37853.1968 - tps: 19270.66708 + dps: 37922.97596 + tps: 19326.87889 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-61046" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-ViciousGladiator'sInsigniaofVictory-70579" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77198" value: { - dps: 39690.70493 - tps: 20282.72336 + dps: 39741.67875 + tps: 20299.13444 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77975" value: { - dps: 39345.82991 - tps: 20104.06996 + dps: 39396.36863 + tps: 20131.57496 } } dps_results: { key: "TestDemonology-AllItems-WillofUnbinding-77995" value: { - dps: 40073.46599 - tps: 20441.19616 + dps: 40124.74566 + tps: 20465.96725 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-55787" value: { - dps: 37745.69925 - tps: 19283.21389 + dps: 37796.55766 + tps: 19303.87373 } } dps_results: { key: "TestDemonology-AllItems-WitchingHourglass-56320" value: { - dps: 38554.52531 - tps: 19827.33717 + dps: 38629.74941 + tps: 19823.24759 } } dps_results: { key: "TestDemonology-AllItems-World-QuellerFocus-63842" value: { - dps: 37173.29392 - tps: 18906.67029 + dps: 37241.08768 + tps: 18961.64884 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77197" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77974" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-WrathofUnchaining-77994" value: { - dps: 36658.63487 - tps: 18706.70419 + dps: 36725.41567 + tps: 18760.96322 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63742" value: { - dps: 36932.1188 - tps: 18773.49366 + dps: 36999.02262 + tps: 18827.86074 } } dps_results: { key: "TestDemonology-AllItems-Za'brox'sLuckyTooth-63745" value: { - dps: 36932.1188 - tps: 18773.49366 + dps: 36999.02262 + tps: 18827.86074 } } dps_results: { key: "TestDemonology-Average-Default" value: { - dps: 40172.37612 - tps: 20373.9521 + dps: 40219.87173 + tps: 20393.63287 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57718.46972 - tps: 49640.1755 + dps: 57765.92329 + tps: 49792.04044 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40858.31286 - tps: 20682.78275 + dps: 40908.15351 + tps: 20705.48793 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60292.56792 - tps: 28069.93313 + dps: 60401.08808 + tps: 28113.69125 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49821.74374 - tps: 45849.51989 + dps: 49904.74084 + tps: 45796.37965 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29385.65184 - tps: 14598.26218 + dps: 29472.37775 + tps: 14626.4304 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40211.67915 - tps: 18309.22021 + dps: 40296.28548 + tps: 18345.90653 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57581.63568 - tps: 48353.87326 + dps: 57656.37289 + tps: 48487.33858 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41121.21938 - tps: 21822.23455 + dps: 41174.3414 + tps: 21849.4841 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61029.23643 - tps: 30050.48046 + dps: 61125.77314 + tps: 30098.63735 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49527.82615 - tps: 43432.53011 + dps: 49597.43613 + tps: 43532.11453 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29727.34998 - tps: 15369.85968 + dps: 29788.65784 + tps: 15371.54402 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40506.55653 - tps: 19687.52879 + dps: 40570.72497 + tps: 19719.27074 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58209.15657 - tps: 49763.39836 + dps: 58252.96956 + tps: 49883.28858 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41473.97182 - tps: 21162.92818 + dps: 41523.78532 + tps: 21190.00805 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60966.27485 - tps: 28829.64304 + dps: 61076.02755 + tps: 28874.70842 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50150.27 - tps: 46403.21499 + dps: 49999.66112 + tps: 45994.83411 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29973.81708 - tps: 15041.22407 + dps: 29993.6174 + tps: 14994.71272 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40769.0282 - tps: 18859.9107 + dps: 40854.69771 + tps: 18897.58625 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51631.75805 - tps: 42510.95538 + dps: 51678.9299 + tps: 42548.1271 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 36977.93705 - tps: 18311.47311 + dps: 37035.63861 + tps: 18338.80142 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56600.89577 - tps: 26153.92367 + dps: 56689.98191 + tps: 26195.66293 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44517.08871 - tps: 37698.21987 + dps: 44545.47072 + tps: 37635.73318 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27052.47362 - tps: 13231.22755 + dps: 27090.99889 + tps: 13248.55627 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 38500.41867 - tps: 17799.86597 + dps: 38561.45311 + tps: 17828.7083 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57027.55326 - tps: 48840.06524 + dps: 57064.03817 + tps: 48953.38395 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40475.2949 - tps: 20279.23037 + dps: 40468.75607 + tps: 20309.88101 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59754.36296 - tps: 27553.90865 + dps: 59869.81616 + tps: 27596.99226 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49536.46597 - tps: 45514.31362 + dps: 49478.18155 + tps: 45552.62804 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29402.30863 - tps: 14519.7674 + dps: 29397.62168 + tps: 14529.294 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40655.20756 - tps: 18565.76024 + dps: 40719.26373 + tps: 18594.76947 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 56662.48239 - tps: 47269.36784 + dps: 56722.46347 + tps: 47316.16661 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40769.50473 - tps: 21312.45825 + dps: 40816.27604 + tps: 21334.96243 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60913.58696 - tps: 29713.69855 + dps: 61017.69431 + tps: 29761.60303 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49716.17029 - tps: 43313.62945 + dps: 49778.92884 + tps: 43425.66188 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29531.54636 - tps: 15275.04867 + dps: 29572.68422 + tps: 15281.11621 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 40560.6769 - tps: 19501.32366 + dps: 40624.78481 + tps: 19532.65536 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57618.34727 - tps: 49106.35461 + dps: 57681.85692 + tps: 49434.29467 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41080.85692 - tps: 20813.32978 + dps: 41151.13734 + tps: 20855.41552 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60428.35334 - tps: 28292.08861 + dps: 60545.07458 + tps: 28336.5022 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50043.46567 - tps: 45888.27033 + dps: 49867.84729 + tps: 45698.32984 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29823.15238 - tps: 14901.08225 + dps: 29853.47669 + tps: 14905.18765 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 41287.56018 - tps: 19018.43358 + dps: 41352.80713 + tps: 19048.33811 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51016.68895 - tps: 41887.41519 + dps: 51066.95506 + tps: 41929.6332 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 36930.80838 - tps: 18201.82786 + dps: 36979.9843 + tps: 18224.29481 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56500.65879 - tps: 26248.88437 + dps: 56589.84281 + tps: 26291.01051 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45203.15629 - tps: 38460.82063 + dps: 45258.34476 + tps: 38547.01385 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 26969.59668 - tps: 13251.05345 + dps: 27037.2704 + tps: 13280.92026 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 38435.38435 - tps: 17489.92001 + dps: 38496.122 + tps: 17518.02535 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58214.73751 - tps: 49126.11157 + dps: 58242.76496 + tps: 49160.40691 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41412.42796 - tps: 20442.34475 + dps: 41457.50048 + tps: 20526.33066 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61646.82 - tps: 27951.78545 + dps: 61765.20231 + tps: 27994.86908 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50737.35112 - tps: 45818.90764 + dps: 50768.65209 + tps: 45955.84828 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30024.2279 - tps: 14636.03375 + dps: 30016.32147 + tps: 14657.81809 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42102.76077 - tps: 18854.90697 + dps: 42167.84008 + tps: 18883.9162 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57673.14631 - tps: 47383.99994 + dps: 57734.52773 + tps: 47433.34344 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41802.51781 - tps: 21553.42228 + dps: 41848.415 + tps: 21578.76053 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62846.2157 - tps: 30152.71937 + dps: 62951.99368 + tps: 30200.62387 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50949.11292 - tps: 43793.26427 + dps: 51112.67651 + tps: 43930.44594 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30280.18769 - tps: 15432.78438 + dps: 30319.90754 + tps: 15445.28885 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42026.70064 - tps: 19805.6538 + dps: 42091.83655 + tps: 19836.9855 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58780.03367 - tps: 49513.94383 + dps: 58870.60916 + tps: 49662.58554 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 42007.72574 - tps: 20958.71289 + dps: 42051.41511 + tps: 20997.36883 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62326.62305 - tps: 28702.01429 + dps: 62446.26522 + tps: 28746.4279 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 51153.93825 - tps: 46138.7201 + dps: 50879.461 + tps: 45820.35208 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30573.3217 - tps: 15050.25393 + dps: 30598.26474 + tps: 15089.48209 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42746.26315 - tps: 19311.90688 + dps: 42812.53827 + tps: 19341.81142 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 52106.24365 - tps: 41957.10805 + dps: 52157.84743 + tps: 41997.95736 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37842.78072 - tps: 18397.9497 + dps: 37903.35075 + tps: 18430.87171 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58373.91014 - tps: 26655.94382 + dps: 58464.40775 + tps: 26698.06997 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46373.11794 - tps: 38893.87883 + dps: 46430.22172 + tps: 38979.97808 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27738.59719 - tps: 13394.83843 + dps: 27802.83179 + tps: 13425.54157 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39906.70425 - tps: 17781.32032 + dps: 39968.49931 + tps: 17809.42566 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57626.68488 - tps: 49345.05975 + dps: 57652.7586 + tps: 49334.6735 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40804.31915 - tps: 20410.22568 + dps: 40882.42312 + tps: 20471.37614 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61941.42407 - tps: 28071.82212 + dps: 62052.56368 + tps: 28115.63794 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50910.92666 - tps: 47340.99281 + dps: 50958.26796 + tps: 47182.23916 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29868.58321 - tps: 14853.49551 + dps: 29963.10401 + tps: 14908.85132 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42939.88927 - tps: 19875.27568 + dps: 43035.50532 + tps: 19917.66528 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57425.98631 - tps: 47953.84569 + dps: 57496.57783 + tps: 47963.8584 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41026.60543 - tps: 21559.19893 + dps: 41108.30247 + tps: 21601.17877 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62451.52119 - tps: 30624.61778 + dps: 62564.10196 + tps: 30673.51739 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 51433.11912 - tps: 45183.5733 + dps: 51414.33664 + tps: 45141.81581 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30129.52844 - tps: 15638.5011 + dps: 30229.39702 + tps: 15672.38856 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42278.17762 - tps: 20505.26742 + dps: 42345.07901 + tps: 20538.19996 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58269.15859 - tps: 49443.98661 + dps: 58304.39496 + tps: 49575.83146 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41619.15453 - tps: 20980.41469 + dps: 41727.02622 + tps: 21036.82946 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62938.57291 - tps: 28970.4341 + dps: 63051.516 + tps: 29015.81874 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 52010.46794 - tps: 47486.42839 + dps: 51802.61958 + tps: 47176.76997 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30047.99967 - tps: 15156.29558 + dps: 30118.7123 + tps: 15200.48677 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42258.91359 - tps: 20096.68073 + dps: 42331.63012 + tps: 20128.03857 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 52545.32761 - tps: 43333.36815 + dps: 52601.32501 + tps: 43383.51909 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37583.68536 - tps: 18545.28371 + dps: 37659.52522 + tps: 18585.55277 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59112.70027 - tps: 27674.75672 + dps: 59205.83046 + tps: 27719.39096 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46625.42121 - tps: 39752.50601 + dps: 46500.24176 + tps: 39562.77697 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27353.67158 - tps: 13454.58179 + dps: 27429.90784 + tps: 13476.17583 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 39286.11114 - tps: 18576.08012 + dps: 39351.68911 + tps: 18605.97203 } } dps_results: { key: "TestDemonology-SwitchInFrontOfTarget-Default" value: { - dps: 39440.90842 - tps: 20153.37356 + dps: 39465.12928 + tps: 20180.59086 } } From c3b3502895adde893f424463a1f54199072522b4 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 09:00:42 +0100 Subject: [PATCH 116/127] Add reset check for iterations --- proto/shaman.proto | 6 +- sim/common/cata/enchant_effects.go | 4 +- sim/core/character.go | 2 + sim/core/database.go | 10 +++ sim/core/item_swaps.go | 26 +++++--- sim/core/test_utils.go | 2 +- ui/core/components/fire_elemental_inputs.ts | 68 --------------------- ui/shaman/enhancement/sim.ts | 3 +- 8 files changed, 35 insertions(+), 86 deletions(-) delete mode 100644 ui/core/components/fire_elemental_inputs.ts diff --git a/proto/shaman.proto b/proto/shaman.proto index 303c836a0e..07e897c981 100644 --- a/proto/shaman.proto +++ b/proto/shaman.proto @@ -177,9 +177,7 @@ message ShamanTotems { FireTotem fire = 10; WaterTotem water = 11; - // If set, will use fire elemental totem at the start and revert to regular - // fire totems when it expires. - bool use_fire_elemental = 12; + bool use_fire_elemental = 12 [deprecated=true]; // Bonus spell power for fire elemental snapshotting. int32 bonus_spellpower = 13 [deprecated=true]; // No longer used in favor of Item Swapping @@ -187,7 +185,7 @@ message ShamanTotems { int32 bonus_intellect = 15 [deprecated=true]; // No longer used in favor of Item Swapping // Snapshot fire elemental using Tier 10 4 set bonus. - bool enh_tier_ten_bonus = 14; + bool enh_tier_ten_bonus = 14 [deprecated=true]; // No longer used in favor of Item Swapping } enum ShamanShield { diff --git a/sim/common/cata/enchant_effects.go b/sim/common/cata/enchant_effects.go index 45dd66a7e0..fa9bae6ae0 100644 --- a/sim/common/cata/enchant_effects.go +++ b/sim/common/cata/enchant_effects.go @@ -450,7 +450,9 @@ func init() { for _, enchantID := range movementSpeedEnchants { core.NewEnchantEffect(enchantID, func(agent core.Agent) { character := agent.GetCharacter() - character.NewMovementSpeedAura("Minor Run Speed", core.ActionID{SpellID: 13889}, 0.08) + aura := character.NewMovementSpeedAura("Minor Run Speed", core.ActionID{SpellID: 13889}, 0.08) + + character.ItemSwap.RegisterEnchantProc(enchantID, aura) }) } } diff --git a/sim/core/character.go b/sim/core/character.go index 0ea0b2e04f..27a635933e 100644 --- a/sim/core/character.go +++ b/sim/core/character.go @@ -634,6 +634,8 @@ func (character *Character) getCurrentProcMaskFor(pred func(item *Item) bool) Pr } func (character *Character) doneIteration(sim *Simulation) { + character.ItemSwap.doneIteration(sim) + // Need to do pets first, so we can add their results to the owners. for _, pet := range character.Pets { pet.doneIteration(sim) diff --git a/sim/core/database.go b/sim/core/database.go index 4e879f2c10..1976563010 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -476,6 +476,16 @@ func EquipmentSpecFromJsonString(jsonString string) *proto.EquipmentSpec { return es } +func ItemSwapFromJsonString(jsonString string) *proto.ItemSwap { + is := &proto.ItemSwap{} + + data := []byte(jsonString) + if err := protojson.Unmarshal(data, is); err != nil { + panic(err) + } + return is +} + func (equipment *Equipment) Stats() stats.Stats { equipStats := stats.Stats{} diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 57182c2589..1de7f5d966 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -221,6 +221,10 @@ func (swap *ItemSwap) IsEnabled() bool { return swap.character != nil && len(swap.slots) > 0 } +func (swap *ItemSwap) IsValidSwap(swapSet proto.APLActionItemSwap_SwapSet) bool { + return !(swap.swapSet == swapSet || swap.swapSet == proto.APLActionItemSwap_Unknown && swapSet == proto.APLActionItemSwap_Main) +} + func (swap *ItemSwap) IsSwapped() bool { return swap.swapSet == proto.APLActionItemSwap_Swap1 } @@ -275,7 +279,7 @@ func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { } func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool) { - if !swap.IsEnabled() || swap.swapSet == swapSet && !isReset { + if !swap.IsEnabled() || !swap.IsValidSwap(swapSet) { return } @@ -297,17 +301,15 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } } - if !isReset { - statsToSwap := Ternary(isPrepull, swap.equipmentStats.allSlots, swap.equipmentStats.weaponSlots) - if swap.swapSet == proto.APLActionItemSwap_Swap1 { - statsToSwap = statsToSwap.Invert() - } + statsToSwap := Ternary(isPrepull, swap.equipmentStats.allSlots, swap.equipmentStats.weaponSlots) + if swap.IsSwapped() { + statsToSwap = statsToSwap.Invert() + } - if sim.Log != nil { - sim.Log("Item Swap - Stats Change: %v", statsToSwap.FlatString()) - } - character.AddStatsDynamic(sim, statsToSwap) + if sim.Log != nil { + sim.Log("Item Swap - Stats Change: %v", statsToSwap.FlatString()) } + character.AddStatsDynamic(sim, statsToSwap) if !isPrepull && !isReset { if weaponSlotSwapped { @@ -371,6 +373,10 @@ func (swap *ItemSwap) reset(sim *Simulation) { swap.initialized = true } +func (swap *ItemSwap) doneIteration(sim *Simulation) { + swap.reset(sim) +} + func calcItemSwapStatsOffset(originalEquipment Equipment, swapEquipment Equipment, prepullBonusStats stats.Stats, slots []proto.ItemSlot) ItemSwapStats { allSlots := stats.Stats{} weaponSlots := stats.Stats{} diff --git a/sim/core/test_utils.go b/sim/core/test_utils.go index fad01b4a76..6995075f93 100644 --- a/sim/core/test_utils.go +++ b/sim/core/test_utils.go @@ -212,5 +212,5 @@ func GetItemSwapGearSet(dir string, file string) ItemSwapSetCombo { log.Fatalf("failed to load gear json file: %s, %s", filePath, err) } - return ItemSwapSetCombo{Label: file, ItemSwap: &proto.ItemSwap{Items: EquipmentSpecFromJsonString(string(data)).Items}} + return ItemSwapSetCombo{Label: file, ItemSwap: ItemSwapFromJsonString(string(data))} } diff --git a/ui/core/components/fire_elemental_inputs.ts b/ui/core/components/fire_elemental_inputs.ts deleted file mode 100644 index 3ea20572f8..0000000000 --- a/ui/core/components/fire_elemental_inputs.ts +++ /dev/null @@ -1,68 +0,0 @@ -import * as InputHelpers from '../components/input_helpers.js'; -import { IndividualSimUI } from '../individual_sim_ui'; -import { Player } from '../player'; -import { ShamanTotems } from '../proto/shaman'; -import { ActionId } from '../proto_utils/action_id.js'; -import { ShamanSpecs } from '../proto_utils/utils'; -import { EventID } from '../typed_event'; -import { ContentBlock } from './content_block'; -import { Input } from './input'; -import { BooleanPicker } from './pickers/boolean_picker.js'; -import { IconPicker } from './pickers/icon_picker.jsx'; -import { NumberPicker } from './pickers/number_picker.js'; - -export function FireElementalSection(parentElem: HTMLElement, simUI: IndividualSimUI): ContentBlock { - const contentBlock = new ContentBlock(parentElem, 'fire-elemental-settings', { - header: { title: 'Fire Elemental' }, - }); - - const fireElementalIconContainer = Input.newGroupContainer(); - fireElementalIconContainer.classList.add('fire-elemental-icon-container'); - - contentBlock.bodyElement.appendChild(fireElementalIconContainer); - - const fireElementalBooleanIconInput = InputHelpers.makeBooleanIconInput>( - { - getModObject: (player: Player) => player, - getValue: (player: Player) => player.getClassOptions().totems || ShamanTotems.create(), - setValue: (eventID: EventID, player: Player, newVal: ShamanTotems) => { - const newOptions = player.getClassOptions(); - newOptions.totems = newVal; - player.setClassOptions(eventID, newOptions); - - // Hacky fix ItemSwapping is in the Rotation proto, this will let the Rotation know to update showWhen - // TODO move the ItemSwap enabled to a spec option and have the ItemSwap proto be apart of player. - player.rotationChangeEmitter.emit(eventID); - }, - changeEmitter: (player: Player) => player.specOptionsChangeEmitter, - }, - ActionId.fromSpellId(2894), - 'useFireElemental', - ); - - new IconPicker(fireElementalIconContainer, simUI.player, fireElementalBooleanIconInput); - - new BooleanPicker(contentBlock.bodyElement, simUI.player, { - id: 'fire-elemental-use-tier-ten', - label: 'Use Tier 10 (4pc)', - labelTooltip: 'Will use Tier 10 (4pc) to snapshot Fire Elemental.', - inline: true, - getValue: (player: Player) => player.getClassOptions().totems?.enhTierTenBonus || false, - setValue: (eventID: EventID, player: Player, newVal: boolean) => { - const newOptions = player.getClassOptions(); - - if (newOptions.totems) { - newOptions.totems.enhTierTenBonus = newVal; - } - - player.setClassOptions(eventID, newOptions); - }, - changedEvent: (player: Player) => player.currentStatsEmitter, - showWhen: (player: Player) => { - const hasBonus = player.getCurrentStats().sets.includes("Frost Witch's Battlegear (4pc)"); - return hasBonus; - }, - }); - - return contentBlock; -} diff --git a/ui/shaman/enhancement/sim.ts b/ui/shaman/enhancement/sim.ts index 477e2b9c7f..92bb129294 100644 --- a/ui/shaman/enhancement/sim.ts +++ b/ui/shaman/enhancement/sim.ts @@ -1,4 +1,3 @@ -import { FireElementalSection } from '../../core/components/fire_elemental_inputs.js'; import * as BuffDebuffInputs from '../../core/components/inputs/buffs_debuffs.js'; import * as OtherInputs from '../../core/components/inputs/other_inputs.js'; import { ReforgeOptimizer } from '../../core/components/suggest_reforges_action'; @@ -136,7 +135,7 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecEnhancementShaman, { ItemSlot.ItemSlotMainHand, ItemSlot.ItemSlotOffHand, ], - customSections: [ShamanInputs.TotemsSection, FireElementalSection], + customSections: [ShamanInputs.TotemsSection], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: false, From 3433deedc9a9610488aedadb7e4abb2fe14a5ea1 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 12:39:12 +0100 Subject: [PATCH 117/127] Add missing item swap registrations --- sim/common/cata/dragonwrath.go | 8 +- sim/common/tbc/_caster_items.go | 42 ++ sim/common/tbc/_caster_trinkets.go | 72 ++++ sim/common/tbc/_enchant_effects.go | 247 ++++++++++++ sim/common/tbc/_melee_items.go | 370 +++++++++++++++++ sim/common/tbc/_melee_trinkets.go | 243 +++++++++++ sim/common/tbc/_metagems.go | 107 +++++ sim/common/tbc/_other_items.go | 13 + sim/common/tbc/caster_items.go | 49 --- sim/common/tbc/caster_trinkets.go | 79 ---- sim/common/tbc/enchant_effects.go | 255 ------------ sim/common/tbc/melee_items.go | 377 ------------------ sim/common/tbc/melee_trinkets.go | 250 ------------ sim/common/tbc/metagems.go | 114 ------ sim/common/tbc/other_items.go | 18 - sim/common/wotlk/capacitors.go | 55 ++- sim/common/wotlk/enchant_effects.go | 10 +- sim/common/wotlk/other_effects.go | 74 ++-- sim/common/wotlk/shadowmourne.go | 16 +- sim/core/database.go | 4 + sim/core/item_effects.go | 34 +- sim/core/item_swaps.go | 41 +- sim/core/major_cooldown.go | 5 + sim/death_knight/blood/TestBlood.results | 4 +- sim/death_knight/unholy/TestUnholy.results | 6 +- sim/hunter/survival/TestSV.results | 4 +- sim/mage/combustion.go | 2 +- sim/mage/items.go | 8 + sim/mage/mage.go | 1 + sim/mage/talents_arcane.go | 2 +- sim/mage/talents_frost.go | 2 +- sim/shaman/items.go | 29 +- sim/warlock/demonology/TestDemonology.results | 156 ++++---- ui/warlock/demonology/presets.ts | 2 - 34 files changed, 1329 insertions(+), 1370 deletions(-) create mode 100644 sim/common/tbc/_caster_items.go create mode 100644 sim/common/tbc/_caster_trinkets.go create mode 100644 sim/common/tbc/_enchant_effects.go create mode 100644 sim/common/tbc/_melee_items.go create mode 100644 sim/common/tbc/_melee_trinkets.go create mode 100644 sim/common/tbc/_metagems.go create mode 100644 sim/common/tbc/_other_items.go delete mode 100644 sim/common/tbc/caster_items.go delete mode 100644 sim/common/tbc/caster_trinkets.go delete mode 100644 sim/common/tbc/enchant_effects.go delete mode 100644 sim/common/tbc/melee_items.go delete mode 100644 sim/common/tbc/melee_trinkets.go delete mode 100644 sim/common/tbc/metagems.go delete mode 100644 sim/common/tbc/other_items.go diff --git a/sim/common/cata/dragonwrath.go b/sim/common/cata/dragonwrath.go index 0ec7599bd1..93b87a09d4 100644 --- a/sim/common/cata/dragonwrath.go +++ b/sim/common/cata/dragonwrath.go @@ -194,7 +194,8 @@ func GetDRTSpellConfig(spell *core.Spell) core.SpellConfig { func init() { core.NewItemEffect(71086, func(a core.Agent) { - unit := &a.GetCharacter().Unit + character := a.GetCharacter() + unit := &character.Unit registerSpells(unit) unit.OnSpellRegistered(func(spell *core.Spell) { @@ -209,7 +210,8 @@ func init() { lastTimestamp := time.Duration(0) spellList := map[*core.Spell]bool{} - core.MakePermanent(unit.RegisterAura(core.Aura{ + + aura := core.MakePermanent(unit.RegisterAura(core.Aura{ ActionID: core.ActionID{ItemID: 71086}, Label: "Dragonwrath, Tarecgosa's Rest - Handler", OnReset: func(aura *core.Aura, sim *core.Simulation) { @@ -322,6 +324,8 @@ func init() { config.getDoTHandler(spell.SpellID)(sim, spell, result) }, })) + + character.ItemSwap.RegisterProc(71086, aura) }) // register custom global spell handlers diff --git a/sim/common/tbc/_caster_items.go b/sim/common/tbc/_caster_items.go new file mode 100644 index 0000000000..478beb68b4 --- /dev/null +++ b/sim/common/tbc/_caster_items.go @@ -0,0 +1,42 @@ +package tbc + +// Keep these (and their functions) in alphabetical order. +// func init() { +// // Proc effects. Keep these in order by item ID. +// core.AddEffectsToTest = false + +// core.NewItemEffect(29305, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Band of the Eternal Sage Proc", core.ActionID{ItemID: 29305}, stats.Stats{stats.SpellPower: 95}, time.Second*10) + +// // Your offensive spells have a chance on hit to increase your spell damage by 95 for 10 secs. +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 60, +// } +// const proc = 0.1 + +// character.RegisterAura(core.Aura{ +// Label: "Band of the Eternal Sage", +// 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 spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { +// return +// } +// if !result.Landed() { +// return +// } +// if !icd.IsReady(sim) || sim.RandomFloat("Band of the Eternal Sage") > proc { // can't activate if on CD or didn't proc +// return +// } +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_caster_trinkets.go b/sim/common/tbc/_caster_trinkets.go new file mode 100644 index 0000000000..8c6982c721 --- /dev/null +++ b/sim/common/tbc/_caster_trinkets.go @@ -0,0 +1,72 @@ +package tbc + +// func init() { +// core.AddEffectsToTest = false +// // Offensive trinkets. Keep these in order by item ID. +// core.NewSimpleStatOffensiveTrinketEffect(32483, stats.Stats{stats.HasteRating: 175}, time.Second*20, time.Minute*2) // Skull of Gul'dan +// core.NewSimpleStatOffensiveTrinketEffect(33829, stats.Stats{stats.SpellPower: 211}, time.Second*20, time.Minute*2) // Hex Shrunken Head +// core.NewSimpleStatOffensiveTrinketEffect(34429, stats.Stats{stats.SpellPower: 320}, time.Second*15, time.Second*90) // Shifting Naaru Sliver + +// // Even though these item effects are handled elsewhere, add them so they are +// // detected for automatic testing. +// for _, itemID := range core.AlchStoneItemIDs { +// core.NewItemEffect(itemID, func(core.Agent) {}) +// } + +// core.NewItemEffect(21625, func(agent core.Agent) { // Scarab Brooch +// character := agent.GetCharacter() +// actionID := core.ActionID{ItemID: 21625} + +// shieldSpell := character.GetOrRegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 26470}, +// SpellSchool: core.SpellSchoolNature, +// ProcMask: core.ProcMaskSpellHealing, +// Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagHelpful, + +// DamageMultiplier: 1, +// ThreatMultiplier: 1, + +// Shield: core.ShieldConfig{ +// Aura: core.Aura{ +// Label: "Scarab Brooch Shield", +// Duration: time.Second * 30, +// }, +// }, +// }) + +// activeAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ +// Name: "Persistent Shield", +// ActionID: core.ActionID{SpellID: 26467}, +// Callback: core.CallbackOnHealDealt, +// Duration: time.Second * 30, +// Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { +// shieldSpell.Shield(result.Target).Apply(sim, result.Damage*0.15) +// }, +// }) + +// spell := character.RegisterSpell(core.SpellConfig{ +// ActionID: actionID, +// SpellSchool: core.SpellSchoolPhysical, +// ProcMask: core.ProcMaskEmpty, +// Flags: core.SpellFlagNoOnCastComplete, + +// Cast: core.CastConfig{ +// CD: core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Minute * 3, +// }, +// }, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// activeAura.Activate(sim) +// }, +// }) + +// character.AddMajorCooldown(core.MajorCooldown{ +// Type: core.CooldownTypeDPS, +// Spell: spell, +// }) +// }) + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_enchant_effects.go b/sim/common/tbc/_enchant_effects.go new file mode 100644 index 0000000000..b2c8785fdd --- /dev/null +++ b/sim/common/tbc/_enchant_effects.go @@ -0,0 +1,247 @@ +package tbc + +// func init() { +// core.AddEffectsToTest = false +// // Keep these in order by item ID. + +// // TODO: Crusader, Mongoose, and Executioner could also be modelled as AddWeaponEffect instead +// core.AddWeaponEffect(1897, func(agent core.Agent, slot proto.ItemSlot) { +// w := agent.GetCharacter().AutoAttacks.MH() +// if slot == proto.ItemSlot_ItemSlotOffHand { +// w = agent.GetCharacter().AutoAttacks.OH() +// } +// w.BaseDamageMin += 5 +// w.BaseDamageMax += 5 +// }) + +// core.NewEnchantEffect(2523, func(agent core.Agent) { +// agent.GetCharacter().AddBonusRangedHitPercent(30 / core.PhysicalHitRatingPerHitPercent) +// }) +// core.NewEnchantEffect(2724, func(agent core.Agent) { +// agent.GetCharacter().AddBonusRangedCritPercent(28 / core.CritRatingPerCritPercent) +// }) + +// core.NewEnchantEffect(2671, func(agent core.Agent) { +// // Sunfire +// agent.GetCharacter().OnSpellRegistered(func(spell *core.Spell) { +// if spell.SpellSchool.Matches(core.SpellSchoolArcane | core.SpellSchoolFire) { +// spell.BonusSpellPower += 50 +// } +// }) +// }) +// core.NewEnchantEffect(2672, func(agent core.Agent) { +// // Soulfrost +// agent.GetCharacter().OnSpellRegistered(func(spell *core.Spell) { +// if spell.SpellSchool.Matches(core.SpellSchoolFrost | core.SpellSchoolShadow) { +// spell.BonusSpellPower += 54 +// } +// }) +// }) + +// core.AddWeaponEffect(963, func(agent core.Agent, slot proto.ItemSlot) { +// w := agent.GetCharacter().AutoAttacks.MH() +// if slot == proto.ItemSlot_ItemSlotOffHand { +// w = agent.GetCharacter().AutoAttacks.OH() +// } +// w.BaseDamageMin += 7 +// w.BaseDamageMax += 7 +// }) + +// // ApplyCrusaderEffect will be applied twice if there is two weapons with this enchant. +// // However, it will automatically overwrite one of them, so it should be ok. +// // A single application of the aura will handle both mh and oh procs. +// core.NewEnchantEffect(1900, func(agent core.Agent) { +// character := agent.GetCharacter() + +// // -4 str per level over 60 +// const strBonus = 100.0 - 4.0*float64(core.CharacterLevel-60) +// mhAura := character.NewTemporaryStatsAura("Crusader Enchant MH", core.ActionID{SpellID: 20007, Tag: 1}, stats.Stats{stats.Strength: strBonus}, time.Second*15) +// ohAura := character.NewTemporaryStatsAura("Crusader Enchant OH", core.ActionID{SpellID: 20007, Tag: 2}, stats.Stats{stats.Strength: strBonus}, time.Second*15) + +// aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ +// Name: "Crusader Enchant", +// Duration: core.NeverExpires, +// Callback: core.CallbackOnSpellHitDealt, +// Outcome: core.OutcomeLanded, +// DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(1900, 1.0, 0), +// Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if spell.IsMH() { +// mhAura.Activate(sim) +// } else { +// ohAura.Activate(sim) +// } +// }, +// }) + +// character.ItemSwap.RegisterEnchantProc(1900, aura) +// }) + +// core.NewEnchantEffect(2929, func(agent core.Agent) { +// agent.GetCharacter().PseudoStats.BonusDamage += 2 +// }) + +// // ApplyMongooseEffect will be applied twice if there is two weapons with this enchant. +// // However, it will automatically overwrite one of them, so it should be ok. +// // A single application of the aura will handle both mh and oh procs. +// core.NewEnchantEffect(2673, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(2673, 0.73, 0) + +// mhAura := character.NewTemporaryStatsAura("Lightning Speed MH", core.ActionID{SpellID: 28093, Tag: 1}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) +// ohAura := character.NewTemporaryStatsAura("Lightning Speed OH", core.ActionID{SpellID: 28093, Tag: 2}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) + +// aura := character.GetOrRegisterAura(core.Aura{ +// Label: "Mongoose Enchant", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "mongoose") { +// if spell.IsMH() { +// mhAura.Activate(sim) +// } else { +// ohAura.Activate(sim) +// } +// } +// }, +// }) + +// character.ItemSwap.RegisterEnchantProc(2673, aura) +// }) + +// core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { +// w := agent.GetCharacter().AutoAttacks.Ranged() +// w.BaseDamageMin += 12 +// w.BaseDamageMax += 12 +// }) + +// core.NewEnchantEffect(2621, func(agent core.Agent) { +// character := agent.GetCharacter() +// character.PseudoStats.ThreatMultiplier *= 0.98 +// }) +// core.NewEnchantEffect(2613, func(agent core.Agent) { +// character := agent.GetCharacter() +// character.PseudoStats.ThreatMultiplier *= 1.02 +// }) + +// core.NewEnchantEffect(3225, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3225, 1.0, 0) + +// procAura := character.NewTemporaryStatsAura("Executioner Proc", core.ActionID{SpellID: 42976}, stats.Stats{stats.CritRating: 120}, time.Second*15) + +// aura := character.GetOrRegisterAura(core.Aura{ +// Label: "Executioner", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Executioner") { +// procAura.Activate(sim) +// } +// }, +// }) + +// character.ItemSwap.RegisterEnchantProc(3225, aura) +// }) + +// // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 +// applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 25, +// } + +// label := "Deathfrost-" +// if isMH { +// label += "MH" +// } else { +// label += "OH" +// } +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(3273, 2.15, 0) + +// aura := character.GetOrRegisterAura(core.Aura{ +// Label: label, +// 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.Damage == 0 { +// return +// } + +// if spell.ProcMask.Matches(core.Ternary(isMH, core.ProcMaskMeleeMH, core.ProcMaskMeleeOH)) { +// if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { +// procSpell.Cast(sim, result.Target) +// } +// } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { +// if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { +// icd.Use(sim) +// procSpell.Cast(sim, result.Target) +// } +// } +// }, +// }) + +// meleeWeaponSlots := core.MeleeWeaponSlots() +// character.ItemSwap.RegisterEnchantProcWithSlots(3273, aura, core.Ternary(isMH, meleeWeaponSlots[:1], meleeWeaponSlots[1:])) +// } + +// core.NewEnchantEffect(3273, func(agent core.Agent) { +// character := agent.GetCharacter() + +// actionID := core.ActionID{SpellID: 46579} +// if spell := character.GetSpell(actionID); spell != nil { +// // This function gets called twice when dual wielding this enchant, but we +// // handle both in one call. +// return +// } + +// debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) +// for i, target := range character.Env.Encounter.TargetUnits { +// aura := target.GetOrRegisterAura(core.Aura{ +// Label: "Deathfrost", +// ActionID: actionID, +// Duration: time.Second * 8, +// }) +// core.AtkSpeedReductionEffect(aura, 1.15) +// debuffs[i] = aura +// } + +// procSpell := character.RegisterSpell(core.SpellConfig{ +// ActionID: actionID, +// SpellSchool: core.SpellSchoolFrost, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: character.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 1, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) +// if result.Landed() { +// debuffs[target.Index].Activate(sim) +// } +// spell.DealDamage(sim, result) +// }, +// }) + +// applyDeathfrostForWeapon(character, procSpell, true) +// applyDeathfrostForWeapon(character, procSpell, false) +// }) + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_melee_items.go b/sim/common/tbc/_melee_items.go new file mode 100644 index 0000000000..de2c3bdde5 --- /dev/null +++ b/sim/common/tbc/_melee_items.go @@ -0,0 +1,370 @@ +package tbc + +// func init() { +// core.AddEffectsToTest = false + +// // Proc effects. Keep these in order by item ID. + +// core.NewItemEffect(9449, func(agent core.Agent) { +// character := agent.GetCharacter() + +// // Assumes that the user will swap pummelers to have the buff for the whole fight. +// character.AddStat(stats.HasteRating, 500) +// }) + +// core.NewItemEffect(19019, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(19019, 6.0, 0) + +// procActionID := core.ActionID{SpellID: 21992} + +// singleTargetSpell := character.RegisterSpell(core.SpellConfig{ +// ActionID: procActionID.WithTag(1), +// SpellSchool: core.SpellSchoolNature, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: character.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 0.5, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// spell.CalcAndDealDamage(sim, target, 300, spell.OutcomeMagicHitAndCrit) +// }, +// }) + +// makeDebuffAura := func(target *core.Unit) *core.Aura { +// return target.GetOrRegisterAura(core.Aura{ +// Label: "Thunderfury", +// ActionID: procActionID, +// Duration: time.Second * 12, +// OnGain: func(aura *core.Aura, sim *core.Simulation) { +// target.AddStatDynamic(sim, stats.NatureResistance, -25) +// }, +// OnExpire: func(aura *core.Aura, sim *core.Simulation) { +// target.AddStatDynamic(sim, stats.NatureResistance, 25) +// }, +// }) +// } + +// numHits := min(5, character.Env.GetNumTargets()) +// debuffAuras := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) +// for i, target := range character.Env.Encounter.TargetUnits { +// debuffAuras[i] = makeDebuffAura(target) +// } + +// bounceSpell := character.RegisterSpell(core.SpellConfig{ +// ActionID: procActionID.WithTag(2), +// SpellSchool: core.SpellSchoolNature, +// ProcMask: core.ProcMaskEmpty, + +// ThreatMultiplier: 1, +// FlatThreatBonus: 63, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// curTarget := target +// for hitIndex := int32(0); hitIndex < numHits; hitIndex++ { +// result := spell.CalcDamage(sim, curTarget, 0, spell.OutcomeMagicHit) +// if result.Landed() { +// debuffAuras[target.Index].Activate(sim) +// } +// spell.DealDamage(sim, result) +// curTarget = sim.Environment.NextTargetUnit(curTarget) +// } +// }, +// }) + +// character.RegisterAura(core.Aura{ +// Label: "Thunderfury", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Thunderfury") { +// singleTargetSpell.Cast(sim, result.Target) +// bounceSpell.Cast(sim, result.Target) +// } +// }, +// }) +// }) + +// core.NewItemEffect(24114, func(agent core.Agent) { +// agent.GetCharacter().PseudoStats.BonusDamage += 5 +// }) + +// core.NewItemEffect(29297, func(agent core.Agent) { +// character := agent.GetCharacter() + +// const procChance = 0.03 +// procAura := character.NewTemporaryStatsAura("Band of the Eternal Defender Proc", core.ActionID{ItemID: 29297}, stats.Stats{stats.Armor: 800}, time.Second*10) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 60, +// } + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Band of the Eternal Defender", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if !result.Landed() || !spell.SpellSchool.Matches(core.SpellSchoolPhysical) { +// return +// } +// if !icd.IsReady(sim) { +// return +// } +// if sim.RandomFloat("Band of the Eternal Defender") < procChance { +// icd.Use(sim) +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(29301, func(agent core.Agent) { +// character := agent.GetCharacter() + +// procAura := character.NewTemporaryStatsAura("Band of the Eternal Champion Proc", core.ActionID{ItemID: 29301}, stats.Stats{stats.AttackPower: 160, stats.RangedAttackPower: 160}, time.Second*10) +// dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 60, +// } + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Band of the Eternal Champion", +// 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() { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Band of the Eternal Champion") { +// icd.Use(sim) +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(29996, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(29996, 1.0, 0) + +// actionID := core.ActionID{ItemID: 29996} + +// var resourceMetricsRage *core.ResourceMetrics +// var resourceMetricsEnergy *core.ResourceMetrics +// if character.HasRageBar() { +// resourceMetricsRage = character.NewRageMetrics(actionID) +// } +// if character.HasEnergyBar() { +// resourceMetricsEnergy = character.NewEnergyMetrics(actionID) +// } + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Rod of the Sun King", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Rod of the Sun King") { +// switch spell.Unit.GetCurrentPowerBar() { +// case core.RageBar: +// spell.Unit.AddRage(sim, 5, resourceMetricsRage) +// case core.EnergyBar: +// spell.Unit.AddEnergy(sim, 10, resourceMetricsEnergy) +// } +// } +// }, +// }) +// }) + +// core.NewItemEffect(31193, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(31193, 0, 0.02) + +// procSpell := character.GetOrRegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 24585}, +// SpellSchool: core.SpellSchoolShadow, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: character.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 1, + +// BonusCoefficient: 1, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// baseDamage := sim.Roll(48, 54) +// spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMagicHitAndCrit) +// }, +// }) + +// core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ +// Name: "Blade of Unquenched Thirst Trigger", +// ActionID: core.ActionID{ItemID: 31193}, +// Callback: core.CallbackOnSpellHitDealt, +// Outcome: core.OutcomeLanded, +// DPM: dpm, +// Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { +// procSpell.Cast(sim, result.Target) +// }, +// }) +// }) + +// core.NewItemEffect(32262, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) + +// procSpell := character.GetOrRegisterSpell(core.SpellConfig{ +// ActionID: core.ActionID{SpellID: 40291}, +// SpellSchool: core.SpellSchoolShadow, +// ProcMask: core.ProcMaskEmpty, + +// DamageMultiplier: 1, +// CritMultiplier: character.DefaultSpellCritMultiplier(), +// ThreatMultiplier: 1, + +// ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { +// spell.CalcAndDealDamage(sim, target, 20, spell.OutcomeMagicHitAndCrit) +// }, +// }) + +// procAura := character.GetOrRegisterAura(core.Aura{ +// Label: "Siphon Essence", +// ActionID: core.ActionID{SpellID: 40291}, +// Duration: time.Second * 6, +// OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { +// return +// } + +// procSpell.Cast(sim, result.Target) +// }, +// }) + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Syphon of the Nathrezim", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Syphon Of The Nathrezim") { +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(32375, func(agent core.Agent) { +// character := agent.GetCharacter() + +// const procChance = 0.02 +// procAura := character.NewTemporaryStatsAura("Bulwark Of Azzinoth Proc", core.ActionID{ItemID: 32375}, stats.Stats{stats.Armor: 2000}, time.Second*10) + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Bulwark Of Azzinoth", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if result.Landed() && spell.SpellSchool.Matches(core.SpellSchoolPhysical) && sim.RandomFloat("Bulwark of Azzinoth") < procChance { +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(34473, func(agent core.Agent) { +// character := agent.GetCharacter() + +// procAura := character.NewTemporaryStatsAura("Commendation of Kael'Thas Proc", core.ActionID{ItemID: 34473}, stats.Stats{stats.DodgeRating: 152}, time.Second*10) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 30, +// } + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Commendation of Kael'Thas", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { +// return +// } + +// if aura.Unit.CurrentHealthPercent() >= 0.35 { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.NewItemEffect(12590, func(agent core.Agent) { +// character := agent.GetCharacter() + +// dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) + +// effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) + +// character.GetOrRegisterAura(core.Aura{ +// Label: "Felstriker", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Felstriker") { +// effectAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_melee_trinkets.go b/sim/common/tbc/_melee_trinkets.go new file mode 100644 index 0000000000..420a0e46fc --- /dev/null +++ b/sim/common/tbc/_melee_trinkets.go @@ -0,0 +1,243 @@ +package tbc + +// func init() { +// core.AddEffectsToTest = false + +// // Offensive trinkets. Keep these in order by item ID. +// core.NewSimpleStatOffensiveTrinketEffect(29383, stats.Stats{stats.AttackPower: 278, stats.RangedAttackPower: 278}, time.Second*20, time.Minute*2) // Bloodlust Brooch +// core.NewSimpleStatOffensiveTrinketEffect(32658, stats.Stats{stats.Agility: 150}, time.Second*20, time.Minute*2) // Badge of Tenacity +// core.NewSimpleStatOffensiveTrinketEffect(33831, stats.Stats{stats.AttackPower: 360, stats.RangedAttackPower: 360}, time.Second*20, time.Minute*2) // Berserkers Call +// core.NewSimpleStatOffensiveTrinketEffect(38287, stats.Stats{stats.AttackPower: 278, stats.RangedAttackPower: 278}, time.Second*20, time.Minute*2) // Empty Direbrew Mug + +// // Defensive trinkets. Keep these in order by item ID. +// core.NewSimpleStatDefensiveTrinketEffect(29387, stats.Stats{stats.DodgeRating: 200}, time.Second*40, time.Minute*2) // Gnomeregan Auto-Blocker 600 (Cata Became Auto-Dodger) +// core.NewSimpleStatDefensiveTrinketEffect(32501, stats.Stats{stats.Health: 1750}, time.Second*20, time.Minute*3) // Shadowmoon Insignia +// core.NewSimpleStatDefensiveTrinketEffect(38289, stats.Stats{stats.DodgeRating: 66}, time.Second*40, time.Minute*2) // Coren's Lucky Coin + +// // Proc effects. Keep these in order by item ID. + +// core.NewItemEffect(11815, func(agent core.Agent) { +// character := agent.GetCharacter() +// if !character.AutoAttacks.AutoSwingMelee { +// return +// } + +// var handOfJusticeSpell *core.Spell +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 2, +// } +// procChance := 0.013333 + +// character.RegisterAura(core.Aura{ +// Label: "Hand of Justice", +// Duration: core.NeverExpires, +// OnInit: func(aura *core.Aura, sim *core.Simulation) { +// config := *character.AutoAttacks.MHConfig() +// config.ActionID = core.ActionID{ItemID: 11815} +// handOfJusticeSpell = character.GetOrRegisterSpell(config) +// }, +// 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) { +// // https://wotlk.wowhead.com/spell=15600/hand-of-justice, proc mask = 20. +// if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// if sim.RandomFloat("HandOfJustice") > procChance { +// return +// } +// icd.Use(sim) + +// aura.Unit.AutoAttacks.MaybeReplaceMHSwing(sim, handOfJusticeSpell).Cast(sim, result.Target) +// }, +// }) +// }) + +// core.NewItemEffect(28830, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Dragonspine Trophy Proc", core.ActionID{ItemID: 28830}, stats.Stats{stats.HasteRating: 325}, time.Second*10) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 20, +// } +// dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + +// character.RegisterAura(core.Aura{ +// Label: "Dragonspine Trophy", +// 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() { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "dragonspine") { +// icd.Use(sim) +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(30627, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Tsunami Talisman Proc", core.ActionID{ItemID: 30627}, stats.Stats{stats.AttackPower: 340, stats.RangedAttackPower: 340}, time.Second*10) +// const procChance = 0.1 + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 45, +// } + +// character.RegisterAura(core.Aura{ +// Label: "Tsunami Talisman", +// 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.Outcome.Matches(core.OutcomeCrit) { +// return +// } +// if !spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { +// return +// } +// if !icd.IsReady(sim) { +// return +// } +// if sim.RandomFloat("Tsunami Talisman") > procChance { +// return +// } + +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.NewItemEffect(32505, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Madness of the Betrayer Proc", core.ActionID{ItemID: 32505}, stats.Stats{stats.CritRating: 42}, time.Second*10) + +// dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) + +// character.RegisterAura(core.Aura{ +// Label: "Madness of the Betrayer", +// 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() { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Madness of the Betrayer") { +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// core.NewItemEffect(34427, func(agent core.Agent) { +// character := agent.GetCharacter() + +// var bonusPerStack stats.Stats +// procAura := character.RegisterAura(core.Aura{ +// Label: "Blackened Naaru Sliver Proc", +// ActionID: core.ActionID{ItemID: 34427}, +// Duration: time.Second * 20, +// MaxStacks: 10, +// OnInit: func(aura *core.Aura, sim *core.Simulation) { +// bonusPerStack = stats.Stats{stats.AttackPower: 44, stats.RangedAttackPower: 44} +// }, +// OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { +// character.AddStatsDynamic(sim, bonusPerStack.Multiply(float64(newStacks-oldStacks))) +// }, +// OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { +// if result.Landed() && spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { +// aura.AddStack(sim) +// } +// }, +// }) + +// const procChance = 0.1 + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 45, +// } + +// character.RegisterAura(core.Aura{ +// Label: "Blackened Naaru Sliver", +// 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) { +// // mask 340 +// if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { +// return +// } +// if !icd.IsReady(sim) { +// return +// } +// if sim.RandomFloat("Blackened Naaru Sliver") > procChance { +// return +// } + +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.NewItemEffect(34472, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Shard of Contempt Proc", core.ActionID{ItemID: 34472}, stats.Stats{stats.AttackPower: 230, stats.RangedAttackPower: 230}, time.Second*20) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 45, +// } +// const procChance = 0.1 + +// character.RegisterAura(core.Aura{ +// Label: "Shard of Contempt", +// 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(core.ProcMaskMeleeOrRanged) { +// return +// } +// if !icd.IsReady(sim) { +// return +// } +// if sim.RandomFloat("Shard of Contempt") > procChance { +// return +// } + +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_metagems.go b/sim/common/tbc/_metagems.go new file mode 100644 index 0000000000..aa56c6a68c --- /dev/null +++ b/sim/common/tbc/_metagems.go @@ -0,0 +1,107 @@ +package tbc + +// func init() { +// core.AddEffectsToTest = false +// // Keep these in order by item ID. + +// core.NewItemEffect(25893, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Mystic Focus Proc", core.ActionID{ItemID: 25893}, stats.Stats{stats.HasteRating: 320}, time.Second*4) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 35, +// } + +// character.RegisterAura(core.Aura{ +// Label: "Mystical Skyfire Diamond", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { +// if !icd.IsReady(sim) || sim.RandomFloat("Mystical Skyfire Diamond") > 0.15 { +// return +// } +// icd.Use(sim) +// procAura.Activate(sim) +// }, +// }) +// }) + +// core.NewItemEffect(25899, func(agent core.Agent) { +// agent.GetCharacter().PseudoStats.BonusDamage += 3 +// }) + +// core.NewItemEffect(25901, func(agent core.Agent) { +// character := agent.GetCharacter() +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 15, +// } +// manaMetrics := character.NewManaMetrics(core.ActionID{ItemID: 25901}) + +// character.RegisterAura(core.Aura{ +// Label: "Insightful Earthstorm Diamond", +// Duration: core.NeverExpires, +// OnReset: func(aura *core.Aura, sim *core.Simulation) { +// aura.Activate(sim) +// }, +// OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { +// if !icd.IsReady(sim) || sim.RandomFloat("Insightful Earthstorm Diamond") > 0.04 { +// return +// } +// icd.Use(sim) +// character.AddMana(sim, 300, manaMetrics) +// }, +// }) +// }) + +// core.NewItemEffect(32410, func(agent core.Agent) { +// character := agent.GetCharacter() +// procAura := character.NewTemporaryStatsAura("Thundering Skyfire Diamond Proc", core.ActionID{ItemID: 32410}, stats.Stats{stats.HasteRating: 240}, time.Second*6) + +// icd := core.Cooldown{ +// Timer: character.NewTimer(), +// Duration: time.Second * 40, +// } +// dpm := character.AutoAttacks.NewPPMManager(1.5, core.ProcMaskWhiteHit) // Mask 68, melee or ranged auto attacks. + +// character.RegisterAura(core.Aura{ +// Label: "Thundering Skyfire Diamond", +// 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() { +// return +// } + +// if !icd.IsReady(sim) { +// return +// } + +// if dpm.Proc(sim, spell.ProcMask, "Thundering Skyfire Diamond") { +// icd.Use(sim) +// procAura.Activate(sim) +// } +// }, +// }) +// }) + +// // Eternal Earthstorm +// core.NewItemEffect(35501, func(agent core.Agent) { +// agent.GetCharacter().PseudoStats.BlockDamageReduction += 0.01 +// }) + +// core.NewItemEffect(35503, func(agent core.Agent) { +// agent.GetCharacter().MultiplyStat(stats.Intellect, 1.02) +// }) + +// // These are handled in character.go, but create empty effects, so they are included in tests. +// core.NewItemEffect(34220, func(_ core.Agent) {}) // Chaotic Skyfire Diamond +// core.NewItemEffect(32409, func(_ core.Agent) {}) // Relentless Earthstorm Diamond + +// core.AddEffectsToTest = true +// } diff --git a/sim/common/tbc/_other_items.go b/sim/common/tbc/_other_items.go new file mode 100644 index 0000000000..eda89463fe --- /dev/null +++ b/sim/common/tbc/_other_items.go @@ -0,0 +1,13 @@ +package tbc + +// func init() { +// core.NewItemEffect(30892, func(agent core.Agent) { +// for _, pet := range agent.GetCharacter().Pets { +// if pet.IsGuardian() { +// continue // not sure if this applies to guardians. +// } +// pet.PseudoStats.DamageDealtMultiplier *= 1.03 +// pet.AddStat(stats.PhysicalCritPercent, 2) +// } +// }) +// } diff --git a/sim/common/tbc/caster_items.go b/sim/common/tbc/caster_items.go deleted file mode 100644 index 1d6664d88c..0000000000 --- a/sim/common/tbc/caster_items.go +++ /dev/null @@ -1,49 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -// Keep these (and their functions) in alphabetical order. -func init() { - // Proc effects. Keep these in order by item ID. - core.AddEffectsToTest = false - - core.NewItemEffect(29305, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Band of the Eternal Sage Proc", core.ActionID{ItemID: 29305}, stats.Stats{stats.SpellPower: 95}, time.Second*10) - - // Your offensive spells have a chance on hit to increase your spell damage by 95 for 10 secs. - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 60, - } - const proc = 0.1 - - character.RegisterAura(core.Aura{ - Label: "Band of the Eternal Sage", - 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 spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { - return - } - if !result.Landed() { - return - } - if !icd.IsReady(sim) || sim.RandomFloat("Band of the Eternal Sage") > proc { // can't activate if on CD or didn't proc - return - } - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/caster_trinkets.go b/sim/common/tbc/caster_trinkets.go deleted file mode 100644 index 70b5f7b174..0000000000 --- a/sim/common/tbc/caster_trinkets.go +++ /dev/null @@ -1,79 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.AddEffectsToTest = false - // Offensive trinkets. Keep these in order by item ID. - core.NewSimpleStatOffensiveTrinketEffect(32483, stats.Stats{stats.HasteRating: 175}, time.Second*20, time.Minute*2) // Skull of Gul'dan - core.NewSimpleStatOffensiveTrinketEffect(33829, stats.Stats{stats.SpellPower: 211}, time.Second*20, time.Minute*2) // Hex Shrunken Head - core.NewSimpleStatOffensiveTrinketEffect(34429, stats.Stats{stats.SpellPower: 320}, time.Second*15, time.Second*90) // Shifting Naaru Sliver - - // Even though these item effects are handled elsewhere, add them so they are - // detected for automatic testing. - for _, itemID := range core.AlchStoneItemIDs { - core.NewItemEffect(itemID, func(core.Agent) {}) - } - - core.NewItemEffect(21625, func(agent core.Agent) { // Scarab Brooch - character := agent.GetCharacter() - actionID := core.ActionID{ItemID: 21625} - - shieldSpell := character.GetOrRegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 26470}, - SpellSchool: core.SpellSchoolNature, - ProcMask: core.ProcMaskSpellHealing, - Flags: core.SpellFlagNoOnCastComplete | core.SpellFlagHelpful, - - DamageMultiplier: 1, - ThreatMultiplier: 1, - - Shield: core.ShieldConfig{ - Aura: core.Aura{ - Label: "Scarab Brooch Shield", - Duration: time.Second * 30, - }, - }, - }) - - activeAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Persistent Shield", - ActionID: core.ActionID{SpellID: 26467}, - Callback: core.CallbackOnHealDealt, - Duration: time.Second * 30, - Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - shieldSpell.Shield(result.Target).Apply(sim, result.Damage*0.15) - }, - }) - - spell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskEmpty, - Flags: core.SpellFlagNoOnCastComplete, - - Cast: core.CastConfig{ - CD: core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Minute * 3, - }, - }, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - activeAura.Activate(sim) - }, - }) - - character.AddMajorCooldown(core.MajorCooldown{ - Type: core.CooldownTypeDPS, - Spell: spell, - }) - }) - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/enchant_effects.go b/sim/common/tbc/enchant_effects.go deleted file mode 100644 index d485dcd638..0000000000 --- a/sim/common/tbc/enchant_effects.go +++ /dev/null @@ -1,255 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/proto" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.AddEffectsToTest = false - // Keep these in order by item ID. - - // TODO: Crusader, Mongoose, and Executioner could also be modelled as AddWeaponEffect instead - core.AddWeaponEffect(1897, func(agent core.Agent, slot proto.ItemSlot) { - w := agent.GetCharacter().AutoAttacks.MH() - if slot == proto.ItemSlot_ItemSlotOffHand { - w = agent.GetCharacter().AutoAttacks.OH() - } - w.BaseDamageMin += 5 - w.BaseDamageMax += 5 - }) - - core.NewEnchantEffect(2523, func(agent core.Agent) { - agent.GetCharacter().AddBonusRangedHitPercent(30 / core.PhysicalHitRatingPerHitPercent) - }) - core.NewEnchantEffect(2724, func(agent core.Agent) { - agent.GetCharacter().AddBonusRangedCritPercent(28 / core.CritRatingPerCritPercent) - }) - - core.NewEnchantEffect(2671, func(agent core.Agent) { - // Sunfire - agent.GetCharacter().OnSpellRegistered(func(spell *core.Spell) { - if spell.SpellSchool.Matches(core.SpellSchoolArcane | core.SpellSchoolFire) { - spell.BonusSpellPower += 50 - } - }) - }) - core.NewEnchantEffect(2672, func(agent core.Agent) { - // Soulfrost - agent.GetCharacter().OnSpellRegistered(func(spell *core.Spell) { - if spell.SpellSchool.Matches(core.SpellSchoolFrost | core.SpellSchoolShadow) { - spell.BonusSpellPower += 54 - } - }) - }) - - core.AddWeaponEffect(963, func(agent core.Agent, slot proto.ItemSlot) { - w := agent.GetCharacter().AutoAttacks.MH() - if slot == proto.ItemSlot_ItemSlotOffHand { - w = agent.GetCharacter().AutoAttacks.OH() - } - w.BaseDamageMin += 7 - w.BaseDamageMax += 7 - }) - - // ApplyCrusaderEffect will be applied twice if there is two weapons with this enchant. - // However, it will automatically overwrite one of them, so it should be ok. - // A single application of the aura will handle both mh and oh procs. - core.NewEnchantEffect(1900, func(agent core.Agent) { - character := agent.GetCharacter() - - // -4 str per level over 60 - const strBonus = 100.0 - 4.0*float64(core.CharacterLevel-60) - mhAura := character.NewTemporaryStatsAura("Crusader Enchant MH", core.ActionID{SpellID: 20007, Tag: 1}, stats.Stats{stats.Strength: strBonus}, time.Second*15) - ohAura := character.NewTemporaryStatsAura("Crusader Enchant OH", core.ActionID{SpellID: 20007, Tag: 2}, stats.Stats{stats.Strength: strBonus}, time.Second*15) - - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Crusader Enchant", - Duration: core.NeverExpires, - Callback: core.CallbackOnSpellHitDealt, - Outcome: core.OutcomeLanded, - DPM: character.AutoAttacks.NewDynamicProcManagerForEnchant(1900, 1.0, 0), - Handler: func(sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if spell.IsMH() { - mhAura.Activate(sim) - } else { - ohAura.Activate(sim) - } - }, - }) - - character.ItemSwap.RegisterEnchantProc(1900, aura) - }) - - core.NewEnchantEffect(2929, func(agent core.Agent) { - agent.GetCharacter().PseudoStats.BonusDamage += 2 - }) - - // ApplyMongooseEffect will be applied twice if there is two weapons with this enchant. - // However, it will automatically overwrite one of them, so it should be ok. - // A single application of the aura will handle both mh and oh procs. - core.NewEnchantEffect(2673, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(2673, 0.73, 0) - - mhAura := character.NewTemporaryStatsAura("Lightning Speed MH", core.ActionID{SpellID: 28093, Tag: 1}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) - ohAura := character.NewTemporaryStatsAura("Lightning Speed OH", core.ActionID{SpellID: 28093, Tag: 2}, stats.Stats{stats.HasteRating: 30.0, stats.Agility: 120}, time.Second*15) - - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Mongoose Enchant", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "mongoose") { - if spell.IsMH() { - mhAura.Activate(sim) - } else { - ohAura.Activate(sim) - } - } - }, - }) - - character.ItemSwap.RegisterEnchantProc(2673, aura) - }) - - core.AddWeaponEffect(2723, func(agent core.Agent, _ proto.ItemSlot) { - w := agent.GetCharacter().AutoAttacks.Ranged() - w.BaseDamageMin += 12 - w.BaseDamageMax += 12 - }) - - core.NewEnchantEffect(2621, func(agent core.Agent) { - character := agent.GetCharacter() - character.PseudoStats.ThreatMultiplier *= 0.98 - }) - core.NewEnchantEffect(2613, func(agent core.Agent) { - character := agent.GetCharacter() - character.PseudoStats.ThreatMultiplier *= 1.02 - }) - - core.NewEnchantEffect(3225, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForEnchant(3225, 1.0, 0) - - procAura := character.NewTemporaryStatsAura("Executioner Proc", core.ActionID{SpellID: 42976}, stats.Stats{stats.CritRating: 120}, time.Second*15) - - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Executioner", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Executioner") { - procAura.Activate(sim) - } - }, - }) - - character.ItemSwap.RegisterEnchantProc(3225, aura) - }) - - // https://web.archive.org/web/20100702102132/http://elitistjerks.com/f15/t27347-deathfrost_its_mechanics/p2/#post789470 - applyDeathfrostForWeapon := func(character *core.Character, procSpell *core.Spell, isMH bool) { - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 25, - } - - label := "Deathfrost-" - if isMH { - label += "MH" - } else { - label += "OH" - } - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(3273, 2.15, 0) - - aura := character.GetOrRegisterAura(core.Aura{ - Label: label, - 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.Damage == 0 { - return - } - - if spell.ProcMask.Matches(core.Ternary(isMH, core.ProcMaskMeleeMH, core.ProcMaskMeleeOH)) { - if dpm.Proc(sim, spell.ProcMask, "Deathfrost") { - procSpell.Cast(sim, result.Target) - } - } else if spell.ProcMask.Matches(core.ProcMaskSpellDamage) { - if icd.IsReady(sim) && sim.RandomFloat("Deathfrost") < 0.5 { - icd.Use(sim) - procSpell.Cast(sim, result.Target) - } - } - }, - }) - - meleeWeaponSlots := core.MeleeWeaponSlots() - character.ItemSwap.RegisterEnchantProcWithSlots(3273, aura, core.Ternary(isMH, meleeWeaponSlots[:1], meleeWeaponSlots[1:])) - } - - core.NewEnchantEffect(3273, func(agent core.Agent) { - character := agent.GetCharacter() - - actionID := core.ActionID{SpellID: 46579} - if spell := character.GetSpell(actionID); spell != nil { - // This function gets called twice when dual wielding this enchant, but we - // handle both in one call. - return - } - - debuffs := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) - for i, target := range character.Env.Encounter.TargetUnits { - aura := target.GetOrRegisterAura(core.Aura{ - Label: "Deathfrost", - ActionID: actionID, - Duration: time.Second * 8, - }) - core.AtkSpeedReductionEffect(aura, 1.15) - debuffs[i] = aura - } - - procSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: actionID, - SpellSchool: core.SpellSchoolFrost, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - result := spell.CalcDamage(sim, target, 150, spell.OutcomeMagicCrit) - if result.Landed() { - debuffs[target.Index].Activate(sim) - } - spell.DealDamage(sim, result) - }, - }) - - applyDeathfrostForWeapon(character, procSpell, true) - applyDeathfrostForWeapon(character, procSpell, false) - }) - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/melee_items.go b/sim/common/tbc/melee_items.go deleted file mode 100644 index ce5bfa3e17..0000000000 --- a/sim/common/tbc/melee_items.go +++ /dev/null @@ -1,377 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.AddEffectsToTest = false - - // Proc effects. Keep these in order by item ID. - - core.NewItemEffect(9449, func(agent core.Agent) { - character := agent.GetCharacter() - - // Assumes that the user will swap pummelers to have the buff for the whole fight. - character.AddStat(stats.HasteRating, 500) - }) - - core.NewItemEffect(19019, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(19019, 6.0, 0) - - procActionID := core.ActionID{SpellID: 21992} - - singleTargetSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: procActionID.WithTag(1), - SpellSchool: core.SpellSchoolNature, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 0.5, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, 300, spell.OutcomeMagicHitAndCrit) - }, - }) - - makeDebuffAura := func(target *core.Unit) *core.Aura { - return target.GetOrRegisterAura(core.Aura{ - Label: "Thunderfury", - ActionID: procActionID, - Duration: time.Second * 12, - OnGain: func(aura *core.Aura, sim *core.Simulation) { - target.AddStatDynamic(sim, stats.NatureResistance, -25) - }, - OnExpire: func(aura *core.Aura, sim *core.Simulation) { - target.AddStatDynamic(sim, stats.NatureResistance, 25) - }, - }) - } - - numHits := min(5, character.Env.GetNumTargets()) - debuffAuras := make([]*core.Aura, len(character.Env.Encounter.TargetUnits)) - for i, target := range character.Env.Encounter.TargetUnits { - debuffAuras[i] = makeDebuffAura(target) - } - - bounceSpell := character.RegisterSpell(core.SpellConfig{ - ActionID: procActionID.WithTag(2), - SpellSchool: core.SpellSchoolNature, - ProcMask: core.ProcMaskEmpty, - - ThreatMultiplier: 1, - FlatThreatBonus: 63, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - curTarget := target - for hitIndex := int32(0); hitIndex < numHits; hitIndex++ { - result := spell.CalcDamage(sim, curTarget, 0, spell.OutcomeMagicHit) - if result.Landed() { - debuffAuras[target.Index].Activate(sim) - } - spell.DealDamage(sim, result) - curTarget = sim.Environment.NextTargetUnit(curTarget) - } - }, - }) - - character.RegisterAura(core.Aura{ - Label: "Thunderfury", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Thunderfury") { - singleTargetSpell.Cast(sim, result.Target) - bounceSpell.Cast(sim, result.Target) - } - }, - }) - }) - - core.NewItemEffect(24114, func(agent core.Agent) { - agent.GetCharacter().PseudoStats.BonusDamage += 5 - }) - - core.NewItemEffect(29297, func(agent core.Agent) { - character := agent.GetCharacter() - - const procChance = 0.03 - procAura := character.NewTemporaryStatsAura("Band of the Eternal Defender Proc", core.ActionID{ItemID: 29297}, stats.Stats{stats.Armor: 800}, time.Second*10) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 60, - } - - character.GetOrRegisterAura(core.Aura{ - Label: "Band of the Eternal Defender", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.SpellSchool.Matches(core.SpellSchoolPhysical) { - return - } - if !icd.IsReady(sim) { - return - } - if sim.RandomFloat("Band of the Eternal Defender") < procChance { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(29301, func(agent core.Agent) { - character := agent.GetCharacter() - - procAura := character.NewTemporaryStatsAura("Band of the Eternal Champion Proc", core.ActionID{ItemID: 29301}, stats.Stats{stats.AttackPower: 160, stats.RangedAttackPower: 160}, time.Second*10) - dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 60, - } - - character.GetOrRegisterAura(core.Aura{ - Label: "Band of the Eternal Champion", - 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() { - return - } - - if !icd.IsReady(sim) { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Band of the Eternal Champion") { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(29996, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(29996, 1.0, 0) - - actionID := core.ActionID{ItemID: 29996} - - var resourceMetricsRage *core.ResourceMetrics - var resourceMetricsEnergy *core.ResourceMetrics - if character.HasRageBar() { - resourceMetricsRage = character.NewRageMetrics(actionID) - } - if character.HasEnergyBar() { - resourceMetricsEnergy = character.NewEnergyMetrics(actionID) - } - - character.GetOrRegisterAura(core.Aura{ - Label: "Rod of the Sun King", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Rod of the Sun King") { - switch spell.Unit.GetCurrentPowerBar() { - case core.RageBar: - spell.Unit.AddRage(sim, 5, resourceMetricsRage) - case core.EnergyBar: - spell.Unit.AddEnergy(sim, 10, resourceMetricsEnergy) - } - } - }, - }) - }) - - core.NewItemEffect(31193, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(31193, 0, 0.02) - - procSpell := character.GetOrRegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 24585}, - SpellSchool: core.SpellSchoolShadow, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - BonusCoefficient: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := sim.Roll(48, 54) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMagicHitAndCrit) - }, - }) - - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ - Name: "Blade of Unquenched Thirst Trigger", - ActionID: core.ActionID{ItemID: 31193}, - Callback: core.CallbackOnSpellHitDealt, - Outcome: core.OutcomeLanded, - DPM: dpm, - Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { - procSpell.Cast(sim, result.Target) - }, - }) - }) - - core.NewItemEffect(32262, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) - - procSpell := character.GetOrRegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 40291}, - SpellSchool: core.SpellSchoolShadow, - ProcMask: core.ProcMaskEmpty, - - DamageMultiplier: 1, - CritMultiplier: character.DefaultSpellCritMultiplier(), - ThreatMultiplier: 1, - - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - spell.CalcAndDealDamage(sim, target, 20, spell.OutcomeMagicHitAndCrit) - }, - }) - - procAura := character.GetOrRegisterAura(core.Aura{ - Label: "Siphon Essence", - ActionID: core.ActionID{SpellID: 40291}, - Duration: time.Second * 6, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { - return - } - - procSpell.Cast(sim, result.Target) - }, - }) - - character.GetOrRegisterAura(core.Aura{ - Label: "Syphon of the Nathrezim", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Syphon Of The Nathrezim") { - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(32375, func(agent core.Agent) { - character := agent.GetCharacter() - - const procChance = 0.02 - procAura := character.NewTemporaryStatsAura("Bulwark Of Azzinoth Proc", core.ActionID{ItemID: 32375}, stats.Stats{stats.Armor: 2000}, time.Second*10) - - character.GetOrRegisterAura(core.Aura{ - Label: "Bulwark Of Azzinoth", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if result.Landed() && spell.SpellSchool.Matches(core.SpellSchoolPhysical) && sim.RandomFloat("Bulwark of Azzinoth") < procChance { - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(34473, func(agent core.Agent) { - character := agent.GetCharacter() - - procAura := character.NewTemporaryStatsAura("Commendation of Kael'Thas Proc", core.ActionID{ItemID: 34473}, stats.Stats{stats.DodgeRating: 152}, time.Second*10) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 30, - } - - character.GetOrRegisterAura(core.Aura{ - Label: "Commendation of Kael'Thas", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnSpellHitTaken: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { - return - } - - if aura.Unit.CurrentHealthPercent() >= 0.35 { - return - } - - if !icd.IsReady(sim) { - return - } - - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.NewItemEffect(12590, func(agent core.Agent) { - character := agent.GetCharacter() - - dpm := character.AutoAttacks.NewDynamicProcManagerForWeaponEffect(12590, 1.0, 0) - - effectAura := character.NewTemporaryStatsAura("Felstriker Proc", core.ActionID{SpellID: 16551}, stats.Stats{stats.PhysicalCritPercent: 100}, time.Second*3) - - character.GetOrRegisterAura(core.Aura{ - Label: "Felstriker", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Felstriker") { - effectAura.Activate(sim) - } - }, - }) - }) - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/melee_trinkets.go b/sim/common/tbc/melee_trinkets.go deleted file mode 100644 index f02e471dfe..0000000000 --- a/sim/common/tbc/melee_trinkets.go +++ /dev/null @@ -1,250 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.AddEffectsToTest = false - - // Offensive trinkets. Keep these in order by item ID. - core.NewSimpleStatOffensiveTrinketEffect(29383, stats.Stats{stats.AttackPower: 278, stats.RangedAttackPower: 278}, time.Second*20, time.Minute*2) // Bloodlust Brooch - core.NewSimpleStatOffensiveTrinketEffect(32658, stats.Stats{stats.Agility: 150}, time.Second*20, time.Minute*2) // Badge of Tenacity - core.NewSimpleStatOffensiveTrinketEffect(33831, stats.Stats{stats.AttackPower: 360, stats.RangedAttackPower: 360}, time.Second*20, time.Minute*2) // Berserkers Call - core.NewSimpleStatOffensiveTrinketEffect(38287, stats.Stats{stats.AttackPower: 278, stats.RangedAttackPower: 278}, time.Second*20, time.Minute*2) // Empty Direbrew Mug - - // Defensive trinkets. Keep these in order by item ID. - core.NewSimpleStatDefensiveTrinketEffect(29387, stats.Stats{stats.DodgeRating: 200}, time.Second*40, time.Minute*2) // Gnomeregan Auto-Blocker 600 (Cata Became Auto-Dodger) - core.NewSimpleStatDefensiveTrinketEffect(32501, stats.Stats{stats.Health: 1750}, time.Second*20, time.Minute*3) // Shadowmoon Insignia - core.NewSimpleStatDefensiveTrinketEffect(38289, stats.Stats{stats.DodgeRating: 66}, time.Second*40, time.Minute*2) // Coren's Lucky Coin - - // Proc effects. Keep these in order by item ID. - - core.NewItemEffect(11815, func(agent core.Agent) { - character := agent.GetCharacter() - if !character.AutoAttacks.AutoSwingMelee { - return - } - - var handOfJusticeSpell *core.Spell - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 2, - } - procChance := 0.013333 - - character.RegisterAura(core.Aura{ - Label: "Hand of Justice", - Duration: core.NeverExpires, - OnInit: func(aura *core.Aura, sim *core.Simulation) { - config := *character.AutoAttacks.MHConfig() - config.ActionID = core.ActionID{ItemID: 11815} - handOfJusticeSpell = character.GetOrRegisterSpell(config) - }, - 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) { - // https://wotlk.wowhead.com/spell=15600/hand-of-justice, proc mask = 20. - if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMelee) { - return - } - - if !icd.IsReady(sim) { - return - } - - if sim.RandomFloat("HandOfJustice") > procChance { - return - } - icd.Use(sim) - - aura.Unit.AutoAttacks.MaybeReplaceMHSwing(sim, handOfJusticeSpell).Cast(sim, result.Target) - }, - }) - }) - - core.NewItemEffect(28830, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Dragonspine Trophy Proc", core.ActionID{ItemID: 28830}, stats.Stats{stats.HasteRating: 325}, time.Second*10) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 20, - } - dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) - - character.RegisterAura(core.Aura{ - Label: "Dragonspine Trophy", - 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() { - return - } - - if !icd.IsReady(sim) { - return - } - - if dpm.Proc(sim, spell.ProcMask, "dragonspine") { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(30627, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Tsunami Talisman Proc", core.ActionID{ItemID: 30627}, stats.Stats{stats.AttackPower: 340, stats.RangedAttackPower: 340}, time.Second*10) - const procChance = 0.1 - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 45, - } - - character.RegisterAura(core.Aura{ - Label: "Tsunami Talisman", - 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.Outcome.Matches(core.OutcomeCrit) { - return - } - if !spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { - return - } - if !icd.IsReady(sim) { - return - } - if sim.RandomFloat("Tsunami Talisman") > procChance { - return - } - - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.NewItemEffect(32505, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Madness of the Betrayer Proc", core.ActionID{ItemID: 32505}, stats.Stats{stats.CritRating: 42}, time.Second*10) - - dpm := character.AutoAttacks.NewPPMManager(1.0, core.ProcMaskMeleeOrRanged) - - character.RegisterAura(core.Aura{ - Label: "Madness of the Betrayer", - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Madness of the Betrayer") { - procAura.Activate(sim) - } - }, - }) - }) - - core.NewItemEffect(34427, func(agent core.Agent) { - character := agent.GetCharacter() - - var bonusPerStack stats.Stats - procAura := character.RegisterAura(core.Aura{ - Label: "Blackened Naaru Sliver Proc", - ActionID: core.ActionID{ItemID: 34427}, - Duration: time.Second * 20, - MaxStacks: 10, - OnInit: func(aura *core.Aura, sim *core.Simulation) { - bonusPerStack = stats.Stats{stats.AttackPower: 44, stats.RangedAttackPower: 44} - }, - OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks int32, newStacks int32) { - character.AddStatsDynamic(sim, bonusPerStack.Multiply(float64(newStacks-oldStacks))) - }, - OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { - if result.Landed() && spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { - aura.AddStack(sim) - } - }, - }) - - const procChance = 0.1 - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 45, - } - - character.RegisterAura(core.Aura{ - Label: "Blackened Naaru Sliver", - 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) { - // mask 340 - if !result.Landed() || !spell.ProcMask.Matches(core.ProcMaskMeleeOrRanged) { - return - } - if !icd.IsReady(sim) { - return - } - if sim.RandomFloat("Blackened Naaru Sliver") > procChance { - return - } - - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.NewItemEffect(34472, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Shard of Contempt Proc", core.ActionID{ItemID: 34472}, stats.Stats{stats.AttackPower: 230, stats.RangedAttackPower: 230}, time.Second*20) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 45, - } - const procChance = 0.1 - - character.RegisterAura(core.Aura{ - Label: "Shard of Contempt", - 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(core.ProcMaskMeleeOrRanged) { - return - } - if !icd.IsReady(sim) { - return - } - if sim.RandomFloat("Shard of Contempt") > procChance { - return - } - - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/metagems.go b/sim/common/tbc/metagems.go deleted file mode 100644 index 389d231a36..0000000000 --- a/sim/common/tbc/metagems.go +++ /dev/null @@ -1,114 +0,0 @@ -package tbc - -import ( - "time" - - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.AddEffectsToTest = false - // Keep these in order by item ID. - - core.NewItemEffect(25893, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Mystic Focus Proc", core.ActionID{ItemID: 25893}, stats.Stats{stats.HasteRating: 320}, time.Second*4) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 35, - } - - character.RegisterAura(core.Aura{ - Label: "Mystical Skyfire Diamond", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if !icd.IsReady(sim) || sim.RandomFloat("Mystical Skyfire Diamond") > 0.15 { - return - } - icd.Use(sim) - procAura.Activate(sim) - }, - }) - }) - - core.NewItemEffect(25899, func(agent core.Agent) { - agent.GetCharacter().PseudoStats.BonusDamage += 3 - }) - - core.NewItemEffect(25901, func(agent core.Agent) { - character := agent.GetCharacter() - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 15, - } - manaMetrics := character.NewManaMetrics(core.ActionID{ItemID: 25901}) - - character.RegisterAura(core.Aura{ - Label: "Insightful Earthstorm Diamond", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, - OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if !icd.IsReady(sim) || sim.RandomFloat("Insightful Earthstorm Diamond") > 0.04 { - return - } - icd.Use(sim) - character.AddMana(sim, 300, manaMetrics) - }, - }) - }) - - core.NewItemEffect(32410, func(agent core.Agent) { - character := agent.GetCharacter() - procAura := character.NewTemporaryStatsAura("Thundering Skyfire Diamond Proc", core.ActionID{ItemID: 32410}, stats.Stats{stats.HasteRating: 240}, time.Second*6) - - icd := core.Cooldown{ - Timer: character.NewTimer(), - Duration: time.Second * 40, - } - dpm := character.AutoAttacks.NewPPMManager(1.5, core.ProcMaskWhiteHit) // Mask 68, melee or ranged auto attacks. - - character.RegisterAura(core.Aura{ - Label: "Thundering Skyfire Diamond", - 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() { - return - } - - if !icd.IsReady(sim) { - return - } - - if dpm.Proc(sim, spell.ProcMask, "Thundering Skyfire Diamond") { - icd.Use(sim) - procAura.Activate(sim) - } - }, - }) - }) - - // Eternal Earthstorm - core.NewItemEffect(35501, func(agent core.Agent) { - agent.GetCharacter().PseudoStats.BlockDamageReduction += 0.01 - }) - - core.NewItemEffect(35503, func(agent core.Agent) { - agent.GetCharacter().MultiplyStat(stats.Intellect, 1.02) - }) - - // These are handled in character.go, but create empty effects, so they are included in tests. - core.NewItemEffect(34220, func(_ core.Agent) {}) // Chaotic Skyfire Diamond - core.NewItemEffect(32409, func(_ core.Agent) {}) // Relentless Earthstorm Diamond - - core.AddEffectsToTest = true -} diff --git a/sim/common/tbc/other_items.go b/sim/common/tbc/other_items.go deleted file mode 100644 index 400821888d..0000000000 --- a/sim/common/tbc/other_items.go +++ /dev/null @@ -1,18 +0,0 @@ -package tbc - -import ( - "github.com/wowsims/cata/sim/core" - "github.com/wowsims/cata/sim/core/stats" -) - -func init() { - core.NewItemEffect(30892, func(agent core.Agent) { - for _, pet := range agent.GetCharacter().Pets { - if pet.IsGuardian() { - continue // not sure if this applies to guardians. - } - pet.PseudoStats.DamageDealtMultiplier *= 1.03 - pet.AddStat(stats.PhysicalCritPercent, 2) - } - }) -} diff --git a/sim/common/wotlk/capacitors.go b/sim/common/wotlk/capacitors.go index 72e0c70e67..65252dd168 100644 --- a/sim/common/wotlk/capacitors.go +++ b/sim/common/wotlk/capacitors.go @@ -71,7 +71,9 @@ func newCapacitorDamageEffect(config CapacitorDamageEffect) { capacitorAura.Activate(sim) capacitorAura.AddStack(sim) } - core.MakeProcTriggerAura(&character.Unit, config.Trigger) + triggerAura := core.MakeProcTriggerAura(&character.Unit, config.Trigger) + + character.ItemSwap.RegisterProc(config.ID, triggerAura) }) } @@ -174,40 +176,25 @@ func init() { return } - var mhSpell *core.Spell - var ohSpell *core.Spell - initSpells := func() { - mhSpell = character.GetOrRegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 71433}, // "Manifest Anger" + registerSpell := func(spellID int32, procMask core.ProcMask, autoAttackConfig *core.SpellConfig, weaponDamagefn func(sim *core.Simulation, ap float64) float64) *core.Spell { + return character.GetOrRegisterSpell(core.SpellConfig{ + ActionID: core.ActionID{SpellID: spellID}, // "Manifest Anger" SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskMeleeMHSpecial, + ProcMask: procMask, Flags: core.SpellFlagMeleeMetrics | core.SpellFlagIncludeTargetBonusDamage | core.SpellFlagNoOnCastComplete, - DamageMultiplier: character.AutoAttacks.MHConfig().DamageMultiplier * 0.5, - CritMultiplier: character.AutoAttacks.MHConfig().CritMultiplier, - ThreatMultiplier: character.AutoAttacks.MHConfig().ThreatMultiplier, + DamageMultiplier: autoAttackConfig.DamageMultiplier * 0.5, + CritMultiplier: autoAttackConfig.CritMultiplier, + ThreatMultiplier: autoAttackConfig.ThreatMultiplier, ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := character.MHWeaponDamage(sim, spell.MeleeAttackPower()) + baseDamage := weaponDamagefn(sim, spell.MeleeAttackPower()) spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit) }, }) - - if character.AutoAttacks.IsDualWielding { - ohSpell = character.GetOrRegisterSpell(core.SpellConfig{ - ActionID: core.ActionID{SpellID: 71434}, // "Manifest Anger" - SpellSchool: core.SpellSchoolPhysical, - ProcMask: core.ProcMaskMeleeOHSpecial, - Flags: core.SpellFlagMeleeMetrics | core.SpellFlagIncludeTargetBonusDamage | core.SpellFlagNoOnCastComplete, - DamageMultiplier: character.AutoAttacks.OHConfig().DamageMultiplier * 0.5, - CritMultiplier: character.AutoAttacks.OHConfig().CritMultiplier, - ThreatMultiplier: character.AutoAttacks.OHConfig().ThreatMultiplier, - ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - baseDamage := character.OHWeaponDamage(sim, spell.MeleeAttackPower()) - spell.CalcAndDealDamage(sim, target, baseDamage, spell.OutcomeMeleeWeaponSpecialHitAndCrit) - }, - }) - } } + var mhSpell *core.Spell + var ohSpell *core.Spell + firstProc := core.MainHand capacitorAura := makeCapacitorAura(&character.Unit, CapacitorAura{ @@ -217,7 +204,8 @@ func init() { Duration: core.NeverExpires, MaxStacks: maxStacks, OnInit: func(aura *core.Aura, sim *core.Simulation) { - initSpells() + mhSpell = registerSpell(71433, core.ProcMaskMeleeMHSpecial, character.AutoAttacks.MHConfig(), character.MHWeaponDamage) + ohSpell = registerSpell(71434, core.ProcMaskMeleeOHSpecial, character.AutoAttacks.OHConfig(), character.OHWeaponDamage) }, }, Handler: func(sim *core.Simulation) { @@ -229,7 +217,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: name + " Trigger", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeOrMeleeProc, @@ -240,17 +228,24 @@ func init() { if spell == mhSpell || spell == ohSpell { // can't proc itself return } + hasOffHand := character.OffHand().ID != 0 if !capacitorAura.IsActive() { if spell.ProcMask.Matches(core.ProcMaskMeleeMH | core.ProcMaskMeleeProc) { firstProc = core.MainHand - } else { + } else if hasOffHand { firstProc = core.OffHand } } + if firstProc == core.OffHand && !hasOffHand { + return + } + capacitorAura.Activate(sim) capacitorAura.AddStack(sim) }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) } diff --git a/sim/common/wotlk/enchant_effects.go b/sim/common/wotlk/enchant_effects.go index 1278bb0cce..201d2ac020 100644 --- a/sim/common/wotlk/enchant_effects.go +++ b/sim/common/wotlk/enchant_effects.go @@ -32,12 +32,8 @@ func init() { }, }) - aura := character.GetOrRegisterAura(core.Aura{ - Label: "Giant Slayer", - Duration: core.NeverExpires, - OnReset: func(aura *core.Aura, sim *core.Simulation) { - aura.Activate(sim) - }, + aura := core.MakePermanent(character.GetOrRegisterAura(core.Aura{ + Label: "Giant Slayer", OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if !result.Landed() { return @@ -51,7 +47,7 @@ func init() { procSpell.Cast(sim, result.Target) } }, - }) + })) character.ItemSwap.RegisterEnchantProc(3251, aura) }) diff --git a/sim/common/wotlk/other_effects.go b/sim/common/wotlk/other_effects.go index 18d030f86d..c75db768d7 100644 --- a/sim/common/wotlk/other_effects.go +++ b/sim/common/wotlk/other_effects.go @@ -200,6 +200,8 @@ func init() { for _, aura := range auras { aura.Icd = triggerAura.Icd } + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -331,7 +333,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Val'anyr, Hammer of Ancient Kings Trigger", Callback: core.CallbackOnHealDealt | core.CallbackOnPeriodicHealDealt, Harmful: true, // Better name for this would be, 'nonzero' @@ -342,6 +344,8 @@ func init() { activeAura.Activate(sim) }, }) + + character.ItemSwap.RegisterProc(46017, triggerAura) }) // core.NewItemEffect(50259, func(agent core.Agent) { @@ -450,7 +454,7 @@ func init() { } procAura.Icd = &icd - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: name + " Trigger", Callback: core.CallbackOnSpellHitTaken, ProcMask: core.ProcMaskMelee, @@ -463,7 +467,10 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) + }) NewItemEffectWithHeroic(func(isHeroic bool) { @@ -513,6 +520,8 @@ func init() { }, }) procAura.Icd = triggerAura.Icd + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -617,7 +626,7 @@ func init() { }, }) - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: name + " Trigger", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, @@ -633,6 +642,8 @@ func init() { procAura.Activate(sim) }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -765,7 +776,7 @@ func init() { eligibleUnits := character.Env.Raid.AllUnits - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: "Althor's Abacus Trigger", Callback: core.CallbackOnHealDealt | core.CallbackOnPeriodicHealDealt, ProcChance: 0.3, @@ -777,6 +788,8 @@ func init() { spell.Cast(sim, healTarget) }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -877,7 +890,7 @@ func init() { } procAura.Icd = &icd - core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: name + " Trigger", Callback: core.CallbackOnSpellHitTaken, ProcMask: core.ProcMaskMelee, @@ -890,6 +903,8 @@ func init() { } }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -928,22 +943,17 @@ func init() { }, }) - character.GetOrRegisterAura(core.Aura{ - Label: name, - 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() { - return - } - - if dpm.Proc(sim, spell.ProcMask, name) { - proc.Cast(sim, result.Target) - } + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + Name: name, + DPM: dpm, + Callback: core.CallbackOnSpellHitDealt, + Outcome: core.OutcomeLanded, + Handler: func(sim *core.Simulation, _ *core.Spell, result *core.SpellResult) { + proc.Cast(sim, result.Target) }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -987,7 +997,7 @@ func init() { }, }) - aura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&character.Unit, core.ProcTrigger{ Name: name + " Trigger", Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMelee, @@ -998,7 +1008,7 @@ func init() { }, }) - character.ItemSwap.RegisterProc(itemID, aura) + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) @@ -1082,30 +1092,30 @@ func init() { // }) NewItemEffectWithHeroic(func(isHeroic bool) { - itemId := int32(50179) - spellId := int32(71870) - triggerSpellId := int32(71871) + itemID := int32(50179) + spellID := int32(71870) + triggerSpellID := int32(71871) strengthGain := float64(100) healingReceived := float64(300) procName := "Last Word" triggerName := "Last Word Proc Trigger" if isHeroic { - itemId = 50708 - spellId = 71872 - triggerSpellId = 71873 + itemID = 50708 + spellID = 71872 + triggerSpellID = 71873 strengthGain = 115 healingReceived = 340 triggerName += " H" procName += " H" } - core.NewItemEffect(itemId, func(agent core.Agent) { + core.NewItemEffect(itemID, func(agent core.Agent) { character := agent.GetCharacter() procAura := character.GetOrRegisterAura(core.Aura{ Label: procName, - ActionID: core.ActionID{SpellID: spellId}, + ActionID: core.ActionID{SpellID: spellID}, Duration: time.Second * 10, OnGain: func(aura *core.Aura, sim *core.Simulation) { aura.Unit.AddStatsDynamic(sim, stats.Stats{stats.Strength: strengthGain}) @@ -1117,9 +1127,9 @@ func init() { }, }) - core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ + triggerAura := core.MakeProcTriggerAura(&agent.GetCharacter().Unit, core.ProcTrigger{ Name: triggerName, - ActionID: core.ActionID{SpellID: triggerSpellId}, + ActionID: core.ActionID{SpellID: triggerSpellID}, Callback: core.CallbackOnSpellHitDealt, ProcMask: core.ProcMaskMeleeOrMeleeProc, ProcChance: 0.37, @@ -1128,6 +1138,8 @@ func init() { procAura.Activate(sim) }, }) + + character.ItemSwap.RegisterProc(itemID, triggerAura) }) }) } diff --git a/sim/common/wotlk/shadowmourne.go b/sim/common/wotlk/shadowmourne.go index b73dcce6be..b401d89d2e 100644 --- a/sim/common/wotlk/shadowmourne.go +++ b/sim/common/wotlk/shadowmourne.go @@ -20,13 +20,13 @@ func init() { // https://web.archive.org/web/20100508065259/http://elitistjerks.com/f81/t37462-warrior_dps_calculation_spreadsheet/p109/ // arrives at ~80% with "2000 white swings" on a dummy. core.NewItemEffect(49623, func(agent core.Agent) { - player := agent.GetCharacter() + character := agent.GetCharacter() - dpm := player.AutoAttacks.NewPPMManager(12, core.ProcMaskMeleeOrMeleeProc) + dpm := character.AutoAttacks.NewPPMManager(12, core.ProcMaskMeleeOrMeleeProc) - chaosBaneAura := player.NewTemporaryStatsAura("Chaos Bane", core.ActionID{SpellID: 73422}, stats.Stats{stats.Strength: 270}, time.Second*10) + chaosBaneAura := character.NewTemporaryStatsAura("Chaos Bane", core.ActionID{SpellID: 73422}, stats.Stats{stats.Strength: 270}, time.Second*10) - choasBaneSpell := player.RegisterSpell(core.SpellConfig{ + choasBaneSpell := character.RegisterSpell(core.SpellConfig{ ActionID: core.ActionID{SpellID: 71904}, SpellSchool: core.SpellSchoolShadow, ProcMask: core.ProcMaskEmpty, // not sure if this can proc things. @@ -42,13 +42,13 @@ func init() { }, }) - stackingAura := player.GetOrRegisterAura(core.Aura{ + stackingAura := character.GetOrRegisterAura(core.Aura{ Label: "Soul Fragment", Duration: time.Minute, ActionID: core.ActionID{SpellID: 71905}, MaxStacks: 10, OnStacksChange: func(aura *core.Aura, sim *core.Simulation, oldStacks, newStacks int32) { - player.AddStatDynamic(sim, stats.Strength, float64(newStacks-oldStacks)*30) + character.AddStatDynamic(sim, stats.Strength, float64(newStacks-oldStacks)*30) if newStacks == aura.MaxStacks { choasBaneSpell.Cast(sim, nil) @@ -59,7 +59,7 @@ func init() { }, }) - core.MakePermanent(player.GetOrRegisterAura(core.Aura{ + aura := core.MakePermanent(character.GetOrRegisterAura(core.Aura{ Label: "Shadowmourne", OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { if chaosBaneAura.IsActive() { @@ -72,5 +72,7 @@ func init() { } }, })) + + character.ItemSwap.RegisterProc(49623, aura) }) } diff --git a/sim/core/database.go b/sim/core/database.go index 1976563010..dd61a22d48 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -607,6 +607,10 @@ var itemTypeToSlotsMap = map[proto.ItemType][]proto.ItemSlot{ } func eligibleSlotsForItem(item *Item, isFuryWarrior bool) []proto.ItemSlot { + if item == nil { + return nil + } + if slots, ok := itemTypeToSlotsMap[item.Type]; ok { return slots } diff --git a/sim/core/item_effects.go b/sim/core/item_effects.go index a85decbed2..e3253ff1e2 100644 --- a/sim/core/item_effects.go +++ b/sim/core/item_effects.go @@ -97,29 +97,27 @@ func AddWeaponEffect(id int32, weaponEffect ApplyWeaponEffect) { // Helpers for making common types of active item effects. func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration, sharedCDFunc func(*Character) Cooldown, otherEffects ApplyEffect) { - registerCD := MakeTemporaryStatsOnUseCDRegistration( - "ItemActive-"+strconv.Itoa(int(itemID)), - bonus, - duration, - SpellConfig{ - ActionID: ActionID{ItemID: itemID}, - }, - func(character *Character) Cooldown { - return Cooldown{ - Timer: character.NewTimer(), - Duration: cooldown, - } - }, - sharedCDFunc, - ) - NewItemEffect(itemID, func(agent Agent) { + registerCD := MakeTemporaryStatsOnUseCDRegistration( + "ItemActive-"+strconv.Itoa(int(itemID)), + bonus, + duration, + SpellConfig{ + ActionID: ActionID{ItemID: itemID}, + }, + func(character *Character) Cooldown { + return Cooldown{ + Timer: character.NewTimer(), + Duration: cooldown, + } + }, + sharedCDFunc, + ) + registerCD(agent) if otherEffects != nil { otherEffects(agent) } - character := agent.GetCharacter() - character.ItemSwap.RegisterActive(itemID, character.ItemSwap.EligibleSlotsForItem(itemID)) }) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 1de7f5d966..1cb57ddabd 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -27,10 +27,9 @@ type ItemSwap struct { // Holds the items that are selected for swapping swapEquip Equipment // Holds items that are currently not equipped - unEquippedItems Equipment - swapSet proto.APLActionItemSwap_SwapSet - prepullBonusStats stats.Stats - equipmentStats ItemSwapStats + unEquippedItems Equipment + swapSet proto.APLActionItemSwap_SwapSet + equipmentStats ItemSwapStats initialized bool } @@ -90,7 +89,6 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti swapEquip: swapItems, unEquippedItems: swapItems, equipmentStats: equipmentStats, - prepullBonusStats: prepullBonusStats, swapSet: proto.APLActionItemSwap_Unknown, initialized: false, } @@ -101,7 +99,7 @@ func (swap *ItemSwap) initialize(character *Character) { } func (character *Character) RegisterItemSwapCallback(slots []proto.ItemSlot, callback OnItemSwap) { - if character == nil || !character.ItemSwap.IsEnabled() { + if character == nil || !character.ItemSwap.IsEnabled() || len(slots) == 0 { return } @@ -179,7 +177,8 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { } // Helper for handling Item On Use effects to set a 30s cd on the related spell. -func (swap *ItemSwap) RegisterActive(itemID int32, slots []proto.ItemSlot) { +func (swap *ItemSwap) RegisterActive(itemID int32) { + slots := swap.EligibleSlotsForItem(itemID) if !swap.ItemExistsInSwapSet(itemID, slots) { return } @@ -255,6 +254,11 @@ func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32, possibleSlots []proto.It func (swap *ItemSwap) EligibleSlotsForItem(itemID int32) []proto.ItemSlot { eligibleSlots := eligibleSlotsForItem(GetItemByID(itemID), swap.isFuryWarrior) + + if len(eligibleSlots) == 0 { + return []proto.ItemSlot{} + } + if !swap.IsEnabled() { return eligibleSlots } else { @@ -311,12 +315,9 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } character.AddStatsDynamic(sim, statsToSwap) - if !isPrepull && !isReset { - if weaponSlotSwapped { - character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) - character.AutoAttacks.StopRangedUntil(sim, sim.CurrentTime) - } - + if !isPrepull && !isReset && weaponSlotSwapped { + character.AutoAttacks.StopMeleeUntil(sim, sim.CurrentTime, false) + character.AutoAttacks.StopRangedUntil(sim, sim.CurrentTime) character.ExtendGCDUntil(sim, max(character.NextGCDAt(), sim.CurrentTime+GCDDefault)) } @@ -378,24 +379,24 @@ func (swap *ItemSwap) doneIteration(sim *Simulation) { } func calcItemSwapStatsOffset(originalEquipment Equipment, swapEquipment Equipment, prepullBonusStats stats.Stats, slots []proto.ItemSlot) ItemSwapStats { - allSlots := stats.Stats{} - weaponSlots := stats.Stats{} + allSlotStats := stats.Stats{} + weaponSlotStats := stats.Stats{} allWeaponSlots := AllWeaponSlots() - allSlots = allSlots.Add(prepullBonusStats) + allSlotStats = allSlotStats.Add(prepullBonusStats) for _, slot := range slots { slotStats := ItemEquipmentStats(swapEquipment[slot]).Subtract(ItemEquipmentStats(originalEquipment[slot])) - allSlots = allSlots.Add(slotStats) + allSlotStats = allSlotStats.Add(slotStats) if slices.Contains(allWeaponSlots, slot) { - weaponSlots = weaponSlots.Add(slotStats) + weaponSlotStats = weaponSlotStats.Add(slotStats) } } return ItemSwapStats{ - allSlots: allSlots, - weaponSlots: weaponSlots, + allSlots: allSlotStats, + weaponSlots: weaponSlotStats, } } diff --git a/sim/core/major_cooldown.go b/sim/core/major_cooldown.go index 0d03af9f0f..3e7a13fe42 100644 --- a/sim/core/major_cooldown.go +++ b/sim/core/major_cooldown.go @@ -250,6 +250,11 @@ func (mcdm *majorCooldownManager) AddMajorCooldown(mcd MajorCooldown) { if mcd.Spell == nil { panic("Major cooldown must have a Spell!") } + + if mcd.Spell.ActionID.ItemID != 0 { + mcdm.character.ItemSwap.RegisterActive(mcd.Spell.ActionID.ItemID) + } + mcd.Spell.Flags |= SpellFlagAPL | SpellFlagMCD if mcd.Type.Matches(CooldownTypeSurvival) && (mcd.Spell.DefaultCast.EffectiveTime() == 0) { diff --git a/sim/death_knight/blood/TestBlood.results b/sim/death_knight/blood/TestBlood.results index 31f579c2a7..23965a76b5 100644 --- a/sim/death_knight/blood/TestBlood.results +++ b/sim/death_knight/blood/TestBlood.results @@ -302,8 +302,8 @@ dps_results: { dps_results: { key: "TestBlood-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 22619.06096 - tps: 113242.68581 + dps: 22511.14197 + tps: 112665.92123 hps: 6041.01216 } } diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 281932b6f3..8c68977a0a 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -302,9 +302,9 @@ dps_results: { dps_results: { key: "TestUnholy-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 43120.17978 - tps: 32013.58168 - hps: 601.25407 + dps: 42955.3991 + tps: 31848.80099 + hps: 601.25406 } } dps_results: { diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 56f4e61b1a..95dc94cdc2 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -284,8 +284,8 @@ dps_results: { dps_results: { key: "TestSV-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 30154.79748 - tps: 27238.14381 + dps: 30154.19972 + tps: 27237.63164 } } dps_results: { diff --git a/sim/mage/combustion.go b/sim/mage/combustion.go index 711e5e6fce..e66857f283 100644 --- a/sim/mage/combustion.go +++ b/sim/mage/combustion.go @@ -38,7 +38,7 @@ func (mage *Mage) registerCombustionSpell() { spell.DealDamage(sim, result) spell.RelatedDotSpell.Cast(sim, target) } - if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() && spell.ProcMask&core.ProcMaskSpellProc == 0 { + if mage.Has4pcT13 && spell.ProcMask&core.ProcMaskSpellProc == 0 { spell.CD.Reduce(time.Second * time.Duration(5*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/items.go b/sim/mage/items.go index 3f93e750fe..6713bcf146 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -123,6 +123,14 @@ var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ // combustion.go // talents_arcane.go // talents_frost.go + + mage := agent.(MageAgent).GetMage() + setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { + mage.Has4pcT13 = true + }) + setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { + mage.Has4pcT13 = false + }) }, }, }) diff --git a/sim/mage/mage.go b/sim/mage/mage.go index 8614269163..53a48a9034 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -55,6 +55,7 @@ type Mage struct { // Item sets Has4pcT12 bool + Has4pcT13 bool } func (mage *Mage) GetCharacter() *core.Character { diff --git a/sim/mage/talents_arcane.go b/sim/mage/talents_arcane.go index 9b330e5b5b..43062eb9cd 100644 --- a/sim/mage/talents_arcane.go +++ b/sim/mage/talents_arcane.go @@ -331,7 +331,7 @@ func (mage *Mage) registerArcanePowerCD() { }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { arcanePowerAura.Activate(sim) - if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() { + if mage.Has4pcT13 { spell.CD.Reduce(time.Second * time.Duration(7*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/talents_frost.go b/sim/mage/talents_frost.go index 546923f1ab..e9fac76a8f 100644 --- a/sim/mage/talents_frost.go +++ b/sim/mage/talents_frost.go @@ -121,7 +121,7 @@ func (mage *Mage) registerIcyVeinsCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { icyVeinsAura.Activate(sim) - if mage.t13ProcAura != nil && mage.t13ProcAura.IsActive() { + if mage.Has4pcT13 { spell.CD.Reduce(time.Second * time.Duration(15*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 9234bccd3b..18b1772aa3 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -423,36 +423,19 @@ var ItemSetSpiritwalkersBattlegear = core.NewItemSet(core.ItemSet{ } spiritWolves := []*SpiritWolf{shaman.SpiritWolves.SpiritWolf1, shaman.SpiritWolves.SpiritWolf2} - procTriggerAuras := make([]*core.Aura, len(spiritWolves)) for _, wolf := range spiritWolves { aura := setBonusAura.MakeDependentProcTriggerAura(&wolf.Unit, wolfProcTriggerConfig) - procTriggerAuras = append(procTriggerAuras, aura) - } - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - for index, wolf := range spiritWolves { - aura := procTriggerAuras[index] - if aura != nil { - wolf.Pet.OnPetEnable = func(sim *core.Simulation) { - aura.Activate(sim) - } - wolf.Pet.OnPetDisable = func(sim *core.Simulation) { - aura.Deactivate(sim) - } + wolf.Pet.OnPetEnable = func(sim *core.Simulation) { + if setBonusAura.IsActive() { + aura.Activate(sim) } } - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - for index, wolf := range spiritWolves { - aura := procTriggerAuras[index] - if aura != nil { - aura.Deactivate(sim) - } - wolf.Pet.OnPetEnable = nil - wolf.Pet.OnPetDisable = nil + wolf.Pet.OnPetDisable = func(sim *core.Simulation) { + aura.Deactivate(sim) } - }) + } }, }, }) diff --git a/sim/warlock/demonology/TestDemonology.results b/sim/warlock/demonology/TestDemonology.results index 212f9d9b47..da9764a63f 100644 --- a/sim/warlock/demonology/TestDemonology.results +++ b/sim/warlock/demonology/TestDemonology.results @@ -1994,21 +1994,21 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57765.92329 - tps: 49792.04044 + dps: 57765.88701 + tps: 49792.4927 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40908.15351 + dps: 40908.21782 tps: 20705.48793 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60401.08808 + dps: 60401.4096 tps: 28113.69125 } } @@ -2022,8 +2022,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29472.37775 - tps: 14626.4304 + dps: 29472.35206 + tps: 14626.37927 } } dps_results: { @@ -2036,35 +2036,35 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57656.37289 + dps: 57656.40418 tps: 48487.33858 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41174.3414 - tps: 21849.4841 + dps: 41174.50984 + tps: 21849.59062 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61125.77314 + dps: 61126.09466 tps: 30098.63735 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49597.43613 + dps: 49597.44949 tps: 43532.11453 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29788.65784 + dps: 29788.67387 tps: 15371.54402 } } @@ -2078,21 +2078,21 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58252.96956 - tps: 49883.28858 + dps: 58252.93329 + tps: 49883.74084 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41523.78532 + dps: 41523.84962 tps: 21190.00805 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61076.02755 + dps: 61076.34906 tps: 28874.70842 } } @@ -2106,7 +2106,7 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29993.6174 + dps: 29993.63826 tps: 14994.71272 } } @@ -2120,29 +2120,29 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51678.9299 + dps: 51678.9612 tps: 42548.1271 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37035.63861 + dps: 37035.70292 tps: 18338.80142 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56689.98191 + dps: 56690.30343 tps: 26195.66293 } } dps_results: { key: "TestDemonology-Settings-Goblin-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 44545.47072 - tps: 37635.73318 + dps: 44545.4666 + tps: 37635.72865 } } dps_results: { @@ -2162,29 +2162,29 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57064.03817 + dps: 57064.0856 tps: 48953.38395 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40468.75607 + dps: 40468.82037 tps: 20309.88101 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 59869.81616 + dps: 59870.13768 tps: 27596.99226 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49478.18155 - tps: 45552.62804 + dps: 49473.13125 + tps: 45546.97853 } } dps_results: { @@ -2204,21 +2204,21 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 56722.46347 + dps: 56722.49477 tps: 47316.16661 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 40816.27604 + dps: 40816.34034 tps: 21334.96243 } } dps_results: { key: "TestDemonology-Settings-Human-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61017.69431 + dps: 61018.01583 tps: 29761.60303 } } @@ -2246,28 +2246,28 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57681.85692 + dps: 57681.90435 tps: 49434.29467 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41151.13734 + dps: 41151.20164 tps: 20855.41552 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 60545.07458 + dps: 60545.3961 tps: 28336.5022 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 49867.84729 + dps: 49868.24618 tps: 45698.32984 } } @@ -2288,29 +2288,29 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 51066.95506 - tps: 41929.6332 + dps: 51067.03507 + tps: 41929.68671 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 36979.9843 + dps: 36980.04861 tps: 18224.29481 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 56589.84281 + dps: 56590.16432 tps: 26291.01051 } } dps_results: { key: "TestDemonology-Settings-Human-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 45258.34476 - tps: 38547.01385 + dps: 45258.58089 + tps: 38547.26106 } } dps_results: { @@ -2330,21 +2330,21 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58242.76496 + dps: 58242.81239 tps: 49160.40691 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41457.50048 + dps: 41457.56479 tps: 20526.33066 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 61765.20231 + dps: 61765.52383 tps: 27994.86908 } } @@ -2372,21 +2372,21 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57734.52773 + dps: 57734.55903 tps: 47433.34344 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41848.415 + dps: 41848.4793 tps: 21578.76053 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62951.99368 + dps: 62952.31519 tps: 30200.62387 } } @@ -2400,7 +2400,7 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-DefaultTalents-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30319.90754 + dps: 30320.50448 tps: 15445.28885 } } @@ -2414,28 +2414,28 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58870.60916 + dps: 58870.65659 tps: 49662.58554 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 42051.41511 + dps: 42051.47941 tps: 20997.36883 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 62446.26522 + dps: 62446.58674 tps: 28746.4279 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 50879.461 + dps: 50879.87334 tps: 45820.35208 } } @@ -2456,29 +2456,29 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 52157.84743 - tps: 41997.95736 + dps: 52157.92744 + tps: 41998.01088 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37903.35075 + dps: 37903.41505 tps: 18430.87171 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-ShortSingleTarget" value: { - dps: 58464.40775 + dps: 58464.72927 tps: 26698.06997 } } dps_results: { key: "TestDemonology-Settings-Orc-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46430.22172 - tps: 38979.97808 + dps: 46430.45786 + tps: 38980.22529 } } dps_results: { @@ -2498,8 +2498,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57652.7586 - tps: 49334.6735 + dps: 57652.98962 + tps: 49334.9296 } } dps_results: { @@ -2526,8 +2526,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 29963.10401 - tps: 14908.85132 + dps: 29963.06196 + tps: 14908.80513 } } dps_results: { @@ -2540,15 +2540,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 57496.57783 - tps: 47963.8584 + dps: 57497.06379 + tps: 47964.38055 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-DefaultTalents-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41108.30247 - tps: 21601.17877 + dps: 41109.13836 + tps: 21602.80258 } } dps_results: { @@ -2582,15 +2582,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongMultiTarget" value: { - dps: 58304.39496 - tps: 49575.83146 + dps: 58304.62597 + tps: 49576.08756 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 41727.02622 - tps: 21036.82946 + dps: 41726.51177 + tps: 21036.30322 } } dps_results: { @@ -2610,15 +2610,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 30118.7123 - tps: 15200.48677 + dps: 30119.01256 + tps: 15201.19683 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-incinerate-NoBuffs-25.0yards-ShortSingleTarget" value: { - dps: 42331.63012 - tps: 20128.03857 + dps: 42333.13142 + tps: 20131.58886 } } dps_results: { @@ -2631,8 +2631,8 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-FullBuffs-25.0yards-LongSingleTarget" value: { - dps: 37659.52522 - tps: 18585.55277 + dps: 37659.42405 + tps: 18584.64563 } } dps_results: { @@ -2645,15 +2645,15 @@ dps_results: { dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongMultiTarget" value: { - dps: 46500.24176 + dps: 46500.25328 tps: 39562.77697 } } dps_results: { key: "TestDemonology-Settings-Troll-p3-Incinerate-Demonology Warlock-shadow-bolt-NoBuffs-25.0yards-LongSingleTarget" value: { - dps: 27429.90784 - tps: 13476.17583 + dps: 27429.99684 + tps: 13476.269 } } dps_results: { diff --git a/ui/warlock/demonology/presets.ts b/ui/warlock/demonology/presets.ts index ff6ad6a7ed..161f88354c 100644 --- a/ui/warlock/demonology/presets.ts +++ b/ui/warlock/demonology/presets.ts @@ -110,8 +110,6 @@ export const DefaultOptions = WarlockOptions.create({ classOptions: { summon: Summon.Felguard, detonateSeed: false, - prepullMastery: 225, - prepullPostSnapshotMana: 0, }, }); From 4e95cefe43b2a3d5358cab46beb760caaf65dfb2 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 13:36:32 +0100 Subject: [PATCH 118/127] Update Bryntroll rng seed results --- sim/death_knight/blood/TestBlood.results | 4 ++-- sim/death_knight/unholy/TestUnholy.results | 4 ++-- sim/hunter/survival/TestSV.results | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sim/death_knight/blood/TestBlood.results b/sim/death_knight/blood/TestBlood.results index 23965a76b5..31f579c2a7 100644 --- a/sim/death_knight/blood/TestBlood.results +++ b/sim/death_knight/blood/TestBlood.results @@ -302,8 +302,8 @@ dps_results: { dps_results: { key: "TestBlood-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 22511.14197 - tps: 112665.92123 + dps: 22619.06096 + tps: 113242.68581 hps: 6041.01216 } } diff --git a/sim/death_knight/unholy/TestUnholy.results b/sim/death_knight/unholy/TestUnholy.results index 8c68977a0a..e3462ae22a 100644 --- a/sim/death_knight/unholy/TestUnholy.results +++ b/sim/death_knight/unholy/TestUnholy.results @@ -302,8 +302,8 @@ dps_results: { dps_results: { key: "TestUnholy-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 42955.3991 - tps: 31848.80099 + dps: 43120.17978 + tps: 32013.58168 hps: 601.25406 } } diff --git a/sim/hunter/survival/TestSV.results b/sim/hunter/survival/TestSV.results index 95dc94cdc2..56f4e61b1a 100644 --- a/sim/hunter/survival/TestSV.results +++ b/sim/hunter/survival/TestSV.results @@ -284,8 +284,8 @@ dps_results: { dps_results: { key: "TestSV-AllItems-Bryntroll,theBoneArbiter-50709" value: { - dps: 30154.19972 - tps: 27237.63164 + dps: 30154.79748 + tps: 27238.14381 } } dps_results: { From a01163d64f7f8b534ff241f49155db56f75d3e6d Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 13:41:52 +0100 Subject: [PATCH 119/127] Add DTR OnExpire to flush spell queue --- sim/common/cata/dragonwrath.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sim/common/cata/dragonwrath.go b/sim/common/cata/dragonwrath.go index 93b87a09d4..b014ba5054 100644 --- a/sim/common/cata/dragonwrath.go +++ b/sim/common/cata/dragonwrath.go @@ -218,6 +218,10 @@ func init() { lastTimestamp = time.Duration(0) spellList = map[*core.Spell]bool{} }, + OnExpire: func(aura *core.Aura, sim *core.Simulation) { + lastTimestamp = sim.CurrentTime + spellList = map[*core.Spell]bool{} + }, OnSpellHitDealt: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell, result *core.SpellResult) { // Handle direct damage only and make sure we're not proccing of our own spell From cd51e4d41f2e37d98fd033238b52988ff3ea0266 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 18:16:30 +0100 Subject: [PATCH 120/127] Add load settings ignoreUnknownFields prop --- ui/core/individual_sim_ui.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ui/core/individual_sim_ui.tsx b/ui/core/individual_sim_ui.tsx index 535382c9c3..558e6960b4 100644 --- a/ui/core/individual_sim_ui.tsx +++ b/ui/core/individual_sim_ui.tsx @@ -353,7 +353,7 @@ export abstract class IndividualSimUI extends SimUI { const savedSettings = window.localStorage.getItem(this.getSettingsStorageKey()); if (savedSettings != null) { try { - const settings = IndividualSimSettings.fromJsonString(savedSettings); + const settings = IndividualSimSettings.fromJsonString(savedSettings, { ignoreUnknownFields: true }); this.fromProto(initEventID, settings); } catch (e) { console.warn('Failed to parse saved settings: ' + e); @@ -514,7 +514,11 @@ export abstract class IndividualSimUI extends SimUI { this.player.getRaid()!.setBuffs(eventID, this.individualConfig.defaults.raidBuffs); this.player.setEpWeights(eventID, this.individualConfig.defaults.epWeights); if (this.individualConfig.defaults.itemSwap) { - this.player.itemSwapSettings.setItemSwapSettings(eventID, true, this.sim.db.lookupItemSwap(this.individualConfig.defaults.itemSwap || ItemSwap.create())); + this.player.itemSwapSettings.setItemSwapSettings( + eventID, + true, + this.sim.db.lookupItemSwap(this.individualConfig.defaults.itemSwap || ItemSwap.create()), + ); } const defaultRatios = this.player.getDefaultEpRatios(tankSpec, healingSpec); From e6a880eeaed65d7e553b8173da4878d1b8b1b80e Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 20:46:20 +0100 Subject: [PATCH 121/127] Fix prepull melee swings --- sim/core/item_swaps.go | 42 +- sim/warrior/fury/TestFury.results | 768 +++++++++++++++--------------- 2 files changed, 404 insertions(+), 406 deletions(-) diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 1cb57ddabd..2d3bcf3781 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -297,7 +297,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap continue } - swap.swapItem(sim, slot, isReset) + swap.swapItem(sim, slot, isPrepull, isReset) weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped for _, onSwap := range swap.onSwapCallbacks[slot] { @@ -324,7 +324,7 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap swap.swapSet = swapSet } -func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isReset bool) { +func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isPrepull bool, isReset bool) { oldItem := *swap.GetEquippedItemBySlot(slot) if isReset { @@ -334,27 +334,25 @@ func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isReset boo } swap.unEquippedItems[slot] = oldItem - swap.finalizeItemSwap(sim, slot) -} -func (swap *ItemSwap) finalizeItemSwap(sim *Simulation, slot proto.ItemSlot) { - character := swap.character - switch slot { - case proto.ItemSlot_ItemSlotMainHand: - if character.AutoAttacks.AutoSwingMelee { - character.AutoAttacks.SetMH(character.WeaponFromMainHand(swap.mhCritMultiplier)) - } - case proto.ItemSlot_ItemSlotOffHand: - if character.AutoAttacks.AutoSwingMelee { - weapon := character.WeaponFromOffHand(swap.ohCritMultiplier) - character.AutoAttacks.SetOH(weapon) - character.AutoAttacks.IsDualWielding = weapon.SwingSpeed != 0 - character.AutoAttacks.EnableMeleeSwing(sim) - character.PseudoStats.CanBlock = character.OffHand().WeaponType == proto.WeaponType_WeaponTypeShield - } - case proto.ItemSlot_ItemSlotRanged: - if character.AutoAttacks.AutoSwingRanged { - character.AutoAttacks.SetRanged(character.WeaponFromRanged(swap.rangedCritMultiplier)) + if !isPrepull { + switch slot { + case proto.ItemSlot_ItemSlotMainHand: + if swap.character.AutoAttacks.AutoSwingMelee { + swap.character.AutoAttacks.SetMH(swap.character.WeaponFromMainHand(swap.mhCritMultiplier)) + } + case proto.ItemSlot_ItemSlotOffHand: + if swap.character.AutoAttacks.AutoSwingMelee { + weapon := swap.character.WeaponFromOffHand(swap.ohCritMultiplier) + swap.character.AutoAttacks.SetOH(weapon) + swap.character.AutoAttacks.IsDualWielding = weapon.SwingSpeed != 0 + swap.character.AutoAttacks.EnableMeleeSwing(sim) + swap.character.PseudoStats.CanBlock = swap.character.OffHand().WeaponType == proto.WeaponType_WeaponTypeShield + } + case proto.ItemSlot_ItemSlotRanged: + if swap.character.AutoAttacks.AutoSwingRanged { + swap.character.AutoAttacks.SetRanged(swap.character.WeaponFromRanged(swap.rangedCritMultiplier)) + } } } } diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index bf5ca51f3b..f195574edd 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2169,1345 +2169,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99390.00501 - tps: 107676.83226 + dps: 98949.58737 + tps: 107121.31103 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39228.91334 - tps: 33045.10555 + dps: 38837.31151 + tps: 32838.3516 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51667.29825 - tps: 42694.60907 + dps: 51460.43208 + tps: 42476.49406 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67727.23969 - tps: 74350.06038 + dps: 67145.6191 + tps: 73608.9278 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24196.77191 - tps: 19982.56207 + dps: 24128.70401 + tps: 19945.98196 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28073.83312 - tps: 22097.53409 + dps: 28034.81089 + tps: 22065.24622 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98550.01464 - tps: 106477.9764 + dps: 99167.3007 + tps: 107358.02957 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38677.14578 - tps: 32658.48763 + dps: 38919.88094 + tps: 32911.90612 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51433.81046 - tps: 42535.28983 + dps: 51827.40981 + tps: 42805.26407 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67214.1878 - tps: 73685.04702 + dps: 67270.45531 + tps: 73746.67078 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24372.78337 - tps: 20191.98542 + dps: 24169.07647 + tps: 19980.29007 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27965.04334 - tps: 21966.46353 + dps: 28216.69655 + tps: 22221.5636 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99390.00501 - tps: 107676.83226 + dps: 98949.58737 + tps: 107121.31103 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38291.55984 - tps: 31682.40334 + dps: 38294.37441 + tps: 31854.92695 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50878.83054 - tps: 41749.78032 + dps: 50310.80958 + tps: 41435.83952 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67727.23969 - tps: 74350.06038 + dps: 67145.6191 + tps: 73608.9278 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24009.55588 - tps: 19489.58037 + dps: 23761.89209 + tps: 19285.03085 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27773.65174 - tps: 21679.15728 + dps: 28060.4489 + tps: 21816.56485 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98550.01464 - tps: 106477.9764 + dps: 99167.3007 + tps: 107358.02957 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38272.62929 - tps: 31704.04379 + dps: 38376.75927 + tps: 31927.70383 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51274.86857 - tps: 42214.19296 + dps: 50672.68761 + tps: 41758.0038 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67214.1878 - tps: 73685.04702 + dps: 67270.45531 + tps: 73746.67078 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23854.60655 - tps: 19401.2975 + dps: 23802.09299 + tps: 19318.97785 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27611.88314 - tps: 21373.06225 + dps: 28241.72296 + tps: 21970.98634 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81834.45006 - tps: 89126.40032 + dps: 82111.42544 + tps: 89541.70663 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31394.70974 - tps: 27094.44126 + dps: 31286.68646 + tps: 27067.40349 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41683.07174 - tps: 35483.70214 + dps: 41696.93811 + tps: 35395.30239 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55951.16779 - tps: 61931.34023 + dps: 55687.9054 + tps: 61549.90212 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19480.62857 - tps: 16610.21861 + dps: 19280.02073 + tps: 16485.81767 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22482.38375 - tps: 18189.43904 + dps: 22514.03432 + tps: 18094.10603 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81528.07775 - tps: 88529.92024 + dps: 82293.05351 + tps: 89740.17001 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31330.30426 - tps: 27027.45598 + dps: 31354.43076 + tps: 27129.14537 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41687.17758 - tps: 35282.49359 + dps: 41995.74705 + tps: 35668.96464 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55489.75044 - tps: 61205.2409 + dps: 55790.96511 + tps: 61664.49042 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19519.30437 - tps: 16656.92208 + dps: 19312.69562 + tps: 16514.32972 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22181.15932 - tps: 17834.44789 + dps: 22658.00673 + tps: 18220.6202 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81834.45006 - tps: 89126.40032 + dps: 82111.42544 + tps: 89541.70663 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31213.81143 - tps: 26398.86659 + dps: 31110.68099 + tps: 26300.37335 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41407.77503 - tps: 34822.42299 + dps: 41201.5275 + tps: 34450.03066 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55951.16779 - tps: 61931.34023 + dps: 55687.9054 + tps: 61549.90212 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19364.88869 - tps: 16050.71738 + dps: 19280.8582 + tps: 15998.6057 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22329.52416 - tps: 17684.21954 + dps: 22422.66881 + tps: 17740.68092 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 81528.07775 - tps: 88529.92024 + dps: 82293.05351 + tps: 89740.17001 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31127.24182 - tps: 26365.46661 + dps: 31178.71285 + tps: 26361.57521 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41691.4634 - tps: 34875.42083 + dps: 41495.55542 + tps: 34715.64659 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55489.75044 - tps: 61205.2409 + dps: 55790.96511 + tps: 61664.49042 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19267.4714 - tps: 15895.04797 + dps: 19313.27529 + tps: 16026.51444 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22060.35695 - tps: 17360.92793 + dps: 22566.62461 + tps: 17865.25088 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149673.47397 - tps: 164834.93436 + dps: 149906.71851 + tps: 164780.91961 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50072.54937 - tps: 41207.06615 + dps: 49817.23078 + tps: 40959.86834 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65492.22102 - tps: 52784.0147 + dps: 65165.07046 + tps: 52517.80122 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106491.52224 - tps: 118623.36599 + dps: 105758.01773 + tps: 117859.11427 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31914.81415 - tps: 25670.85317 + dps: 31957.13478 + tps: 25512.25535 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37311.42239 - tps: 28390.99981 + dps: 36779.59912 + tps: 27960.05924 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149311.92742 - tps: 164342.81111 + dps: 150234.38112 + tps: 165141.03629 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49742.47937 - tps: 41119.10385 + dps: 49924.90371 + tps: 41051.64155 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65712.11471 - tps: 52926.68969 + dps: 65631.18121 + tps: 52917.33387 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105426.7275 - tps: 117436.20222 + dps: 105955.48631 + tps: 118079.45873 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31969.30776 - tps: 25637.83248 + dps: 32012.27747 + tps: 25556.41628 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37074.03557 - tps: 28212.85723 + dps: 37022.36511 + tps: 28155.28437 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149673.47397 - tps: 164834.93436 + dps: 149906.71851 + tps: 164780.91961 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49607.22999 - tps: 39890.22929 + dps: 49915.17092 + tps: 40051.00327 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65176.83347 - tps: 52076.35347 + dps: 64681.16513 + tps: 51470.78666 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106491.52224 - tps: 118623.36599 + dps: 105758.01773 + tps: 117859.11427 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32100.45154 - tps: 24940.20336 + dps: 31968.63156 + tps: 24939.13148 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36876.75795 - tps: 27403.55878 + dps: 36614.31302 + tps: 27130.48319 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149311.92742 - tps: 164342.81111 + dps: 150234.38112 + tps: 165141.03629 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49658.60225 - tps: 39705.54469 + dps: 50021.66575 + tps: 40140.88139 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 66029.30102 - tps: 52664.54849 + dps: 65143.65737 + tps: 51864.01013 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105426.7275 - tps: 117436.20222 + dps: 105955.48631 + tps: 118079.45873 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31890.31061 - tps: 24813.34728 + dps: 32023.17947 + tps: 24981.85439 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36865.37693 - tps: 27592.45977 + dps: 36853.80047 + tps: 27320.07802 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123938.86079 - tps: 137500.7135 + dps: 123235.1684 + tps: 136531.80883 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39875.45563 - tps: 33773.74665 + dps: 39914.83038 + tps: 33818.96114 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52452.44903 - tps: 43610.77265 + dps: 52371.3802 + tps: 43612.82869 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88397.74304 - tps: 99353.97514 + dps: 87643.43916 + tps: 98383.75587 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25536.86056 - tps: 21210.97181 + dps: 25251.16521 + tps: 20940.09682 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30367.29259 - tps: 24244.28737 + dps: 29638.57389 + tps: 23534.38315 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124303.37109 - tps: 137702.44149 + dps: 123504.5959 + tps: 136829.65305 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40083.71106 - tps: 33864.62273 + dps: 40000.17138 + tps: 33893.25919 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52406.63216 - tps: 43477.62108 + dps: 52750.24202 + tps: 43945.80431 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88396.13695 - tps: 99347.18561 + dps: 87807.56591 + tps: 98568.49093 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25493.10021 - tps: 21166.88584 + dps: 25295.19005 + tps: 20976.60793 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30237.11715 - tps: 24025.71031 + dps: 29833.47313 + tps: 23697.50685 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123938.86079 - tps: 137500.7135 + dps: 123235.1684 + tps: 136531.80883 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40240.6521 - tps: 32933.30046 + dps: 40255.42749 + tps: 32886.98131 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53132.55253 - tps: 43223.74577 + dps: 52634.55444 + tps: 42495.15244 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88397.74304 - tps: 99353.97514 + dps: 87643.43916 + tps: 98383.75587 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25682.35432 - tps: 20452.26187 + dps: 25576.38566 + tps: 20508.43464 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29917.00691 - tps: 23035.17177 + dps: 29863.38572 + tps: 22901.23997 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124303.37109 - tps: 137702.44149 + dps: 123504.5959 + tps: 136829.65305 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40348.25857 - tps: 33073.45076 + dps: 40340.64637 + tps: 32959.97037 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52464.50827 - tps: 42436.1244 + dps: 53014.30499 + tps: 42823.07515 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88396.13695 - tps: 99347.18561 + dps: 87807.56591 + tps: 98568.49093 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25665.55013 - tps: 20542.75951 + dps: 25620.63493 + tps: 20544.30976 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30031.74137 - tps: 23177.63713 + dps: 30056.99407 + tps: 23059.48596 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99320.43295 - tps: 107442.32546 + dps: 99284.62616 + tps: 107527.11992 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38934.71235 - tps: 32648.87006 + dps: 38797.28869 + tps: 32534.01027 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51037.79045 - tps: 42095.38595 + dps: 50576.26905 + tps: 41633.85003 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67758.25967 - tps: 74293.46922 + dps: 68126.44053 + tps: 74746.5713 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24159.02677 - tps: 19908.19271 + dps: 24090.43076 + tps: 19895.02957 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28084.54744 - tps: 22097.66395 + dps: 27699.05965 + tps: 21818.6416 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99113.22588 - tps: 107062.68034 + dps: 99498.38738 + tps: 107759.92875 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38798.77898 - tps: 32674.9526 + dps: 38877.08226 + tps: 32604.99612 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50571.99687 - tps: 41535.87641 + dps: 50931.82417 + tps: 41951.48147 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67107.6997 - tps: 73474.83819 + dps: 68247.32426 + tps: 74880.05571 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24057.76809 - tps: 19834.28135 + dps: 24129.38495 + tps: 19928.14345 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27936.22147 - tps: 21885.59239 + dps: 27875.27675 + tps: 21970.29092 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99320.43295 - tps: 107442.32546 + dps: 99284.62616 + tps: 107527.11992 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38334.75411 - tps: 31720.56575 + dps: 38118.37479 + tps: 31528.99958 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49696.4704 - tps: 40718.62815 + dps: 49810.05069 + tps: 40835.65477 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67758.25967 - tps: 74293.46922 + dps: 68126.44053 + tps: 74746.5713 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23796.35124 - tps: 19237.72478 + dps: 23944.21388 + tps: 19439.32126 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27536.4369 - tps: 21196.24848 + dps: 26950.41436 + tps: 20812.54791 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99113.22588 - tps: 107062.68034 + dps: 99498.38738 + tps: 107759.92875 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38062.41788 - tps: 31472.66221 + dps: 38196.95499 + tps: 31598.28416 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 48916.23259 - tps: 39926.0347 + dps: 50158.31636 + tps: 41144.20646 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67107.6997 - tps: 73474.83819 + dps: 68247.32426 + tps: 74880.05571 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23844.49671 - tps: 19275.41069 + dps: 23982.56571 + tps: 19471.51837 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27535.448 - tps: 21174.29616 + dps: 27121.41242 + tps: 20957.12264 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82491.19655 - tps: 89778.50671 + dps: 82630.29522 + tps: 89953.06088 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31263.63565 - tps: 27021.71691 + dps: 31197.40563 + tps: 26868.77994 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40925.25755 - tps: 34487.26785 + dps: 40912.89789 + tps: 34583.41518 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55851.43143 - tps: 61679.15831 + dps: 55887.35599 + tps: 61827.07531 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19718.99701 - tps: 16761.85251 + dps: 19519.77691 + tps: 16661.11458 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22478.52966 - tps: 17856.88214 + dps: 22448.38595 + tps: 17975.87654 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82007.11593 - tps: 89188.56862 + dps: 82807.24429 + tps: 90146.76848 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31384.92075 - tps: 27052.63877 + dps: 31261.97291 + tps: 26927.4127 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41058.32112 - tps: 34445.08841 + dps: 41201.71572 + tps: 34847.52668 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55948.43161 - tps: 61866.78631 + dps: 55987.59192 + tps: 61938.58409 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19517.21458 - tps: 16542.52257 + dps: 19551.47664 + tps: 16688.78238 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22183.40099 - tps: 17717.07793 + dps: 22589.32385 + tps: 18100.00024 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82491.19655 - tps: 89778.50671 + dps: 82630.29522 + tps: 89953.06088 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31040.35156 - tps: 26163.54343 + dps: 30888.83638 + tps: 26022.84457 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40754.86768 - tps: 33877.22784 + dps: 41002.82975 + tps: 34341.72235 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55851.43143 - tps: 61679.15831 + dps: 55887.35599 + tps: 61827.07531 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19461.55818 - tps: 16120.41168 + dps: 19438.56898 + tps: 16044.95485 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22198.51734 - tps: 17374.79781 + dps: 22280.49271 + tps: 17512.72817 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82007.11593 - tps: 89188.56862 + dps: 82807.24429 + tps: 90146.76848 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31031.88017 - tps: 26190.74162 + dps: 30954.37682 + tps: 26081.66849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40184.50837 - tps: 33518.44119 + dps: 41289.98776 + tps: 34600.72988 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55948.43161 - tps: 61866.78631 + dps: 55987.59192 + tps: 61938.58409 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19372.13268 - tps: 16052.56119 + dps: 19469.65676 + tps: 16071.47839 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22112.08 - tps: 17196.76659 + dps: 22420.21094 + tps: 17633.92058 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150407.12967 - tps: 165635.27898 + dps: 147866.00819 + tps: 162739.83049 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49403.36511 - tps: 40377.63609 + dps: 49319.45713 + tps: 40347.8773 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64790.63404 - tps: 51733.67 + dps: 64200.71621 + tps: 51402.65594 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106322.72342 - tps: 118414.63574 + dps: 105965.51434 + tps: 117997.13688 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32117.55974 - tps: 25619.41969 + dps: 31966.61586 + tps: 25550.56045 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36935.30559 - tps: 28334.7175 + dps: 36332.31719 + tps: 27726.67966 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149853.21322 - tps: 164794.70044 + dps: 148182.59425 + tps: 163088.77576 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49219.70584 - tps: 40254.39123 + dps: 49420.06194 + tps: 40432.37284 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64655.64093 - tps: 51615.27072 + dps: 64648.53098 + tps: 51782.29888 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107097.64534 - tps: 119245.88849 + dps: 106160.14386 + tps: 118214.72583 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32080.3219 - tps: 25616.33627 + dps: 32020.22687 + tps: 25593.2213 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36922.10582 - tps: 28077.54217 + dps: 36566.8042 + tps: 27914.87461 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150407.12967 - tps: 165635.27898 + dps: 147866.00819 + tps: 162739.83049 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49508.42957 - tps: 39532.74654 + dps: 49745.41018 + tps: 39722.09752 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64901.95617 - tps: 51036.0327 + dps: 63748.30056 + tps: 50043.23353 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106322.72342 - tps: 118414.63574 + dps: 105965.51434 + tps: 117997.13688 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31991.39439 - tps: 24791.73856 + dps: 32176.93207 + tps: 25015.88947 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37058.76458 - tps: 27664.63678 + dps: 36370.25406 + tps: 27090.84006 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149853.21322 - tps: 164794.70044 + dps: 148182.59425 + tps: 163088.77576 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49589.73013 - tps: 39592.13842 + dps: 49846.21503 + tps: 39805.841 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65030.09435 - tps: 51368.23325 + dps: 64196.48289 + tps: 50418.58389 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 107097.64534 - tps: 119245.88849 + dps: 106160.14386 + tps: 118214.72583 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32143.79831 - tps: 24967.98799 + dps: 32230.23389 + tps: 25057.60663 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36423.40844 - tps: 26942.86739 + dps: 36602.64948 + tps: 27274.86959 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124550.04679 - tps: 138096.05579 + dps: 123526.76619 + tps: 136914.32338 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39609.0147 - tps: 33494.53815 + dps: 39389.0227 + tps: 33240.97143 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51990.65274 - tps: 42983.3699 + dps: 52043.0382 + tps: 43224.07867 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88379.93237 - tps: 99257.18374 + dps: 87979.75774 + tps: 98783.92063 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25601.88909 - tps: 21250.35691 + dps: 25108.71593 + tps: 20685.62676 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29771.38074 - tps: 23299.73111 + dps: 29132.02888 + tps: 22588.94592 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124447.88759 - tps: 138043.41412 + dps: 123789.30248 + tps: 137205.04389 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39908.99511 - tps: 33892.51933 + dps: 39470.09113 + tps: 33311.10212 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52377.0661 - tps: 43454.1865 + dps: 52413.49809 + tps: 43549.49437 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87641.86479 - tps: 98376.82701 + dps: 88140.57861 + tps: 98964.99817 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25285.55609 - tps: 20922.08268 + dps: 25152.27477 + tps: 20721.22069 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29441.85661 - tps: 22992.11947 + dps: 29319.28562 + tps: 22742.65075 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124550.04679 - tps: 138096.05579 + dps: 123526.76619 + tps: 136914.32338 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40071.80631 - tps: 32778.09947 + dps: 40014.72178 + tps: 32771.59868 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51877.8635 - tps: 41563.19806 + dps: 51384.25484 + tps: 41532.52632 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88379.93237 - tps: 99257.18374 + dps: 87979.75774 + tps: 98783.92063 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25824.04411 - tps: 20685.30307 + dps: 25841.50351 + tps: 20624.43602 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29705.88328 - tps: 22725.93969 + dps: 28988.02234 + tps: 21879.56831 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 124447.88759 - tps: 138043.41412 + dps: 123789.30248 + tps: 137205.04389 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40334.21523 - tps: 33056.37652 + dps: 40095.95862 + tps: 32840.5451 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52161.13034 - tps: 42137.98083 + dps: 51742.12028 + tps: 41839.75091 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87641.86479 - tps: 98376.82701 + dps: 88140.57861 + tps: 98964.99817 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25581.13519 - tps: 20360.7366 + dps: 25884.55312 + tps: 20658.95595 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29210.66442 - tps: 22253.76953 + dps: 29174.61619 + tps: 22030.04428 } } dps_results: { From 532083fda443a32b15a7f1dec636a5ac3b868aa6 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 20:56:53 +0100 Subject: [PATCH 122/127] Add Item Swap slots to Arms Sim --- ui/warrior/arms/sim.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ui/warrior/arms/sim.ts b/ui/warrior/arms/sim.ts index f9b00634a0..a3479b2299 100644 --- a/ui/warrior/arms/sim.ts +++ b/ui/warrior/arms/sim.ts @@ -6,7 +6,7 @@ import { IndividualSimUI, registerSpecConfig } from '../../core/individual_sim_u import { Player } from '../../core/player'; import { PlayerClasses } from '../../core/player_classes'; import { APLRotation } from '../../core/proto/apl'; -import { Debuffs, Faction, IndividualBuffs, PartyBuffs, PseudoStat, Race, RaidBuffs, Spec, Stat } from '../../core/proto/common'; +import { Debuffs, Faction, IndividualBuffs, ItemSlot, PartyBuffs, PseudoStat, Race, RaidBuffs, Spec, Stat } from '../../core/proto/common'; import { Stats, UnitStat } from '../../core/proto_utils/stats'; import * as WarriorInputs from '../inputs'; import * as Presets from './presets'; @@ -106,6 +106,25 @@ const SPEC_CONFIG = registerSpecConfig(Spec.SpecArmsWarrior, { otherInputs: { inputs: [WarriorInputs.StartingRage(), WarriorInputs.StanceSnapshot(), OtherInputs.InputDelay, OtherInputs.TankAssignment, OtherInputs.InFrontOfTarget], }, + itemSwapSlots: [ + ItemSlot.ItemSlotHead, + ItemSlot.ItemSlotNeck, + ItemSlot.ItemSlotShoulder, + ItemSlot.ItemSlotBack, + ItemSlot.ItemSlotChest, + ItemSlot.ItemSlotWrist, + ItemSlot.ItemSlotHands, + ItemSlot.ItemSlotWaist, + ItemSlot.ItemSlotLegs, + ItemSlot.ItemSlotFeet, + ItemSlot.ItemSlotFinger1, + ItemSlot.ItemSlotFinger2, + ItemSlot.ItemSlotTrinket1, + ItemSlot.ItemSlotTrinket2, + ItemSlot.ItemSlotMainHand, + ItemSlot.ItemSlotOffHand, + ItemSlot.ItemSlotRanged, + ], encounterPicker: { // Whether to include 'Execute Duration (%)' in the 'Encounter' section of the settings tab. showExecuteProportion: true, From df90fb3ba9f55f235f763963bf149a6f34e49138 Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 21:15:34 +0100 Subject: [PATCH 123/127] Update Elemental item swap --- sim/shaman/elemental/TestElemental.results | 4 ++-- ui/shaman/elemental/apls/aoe.apl.json | 5 +++-- ui/shaman/elemental/apls/default.apl.json | 5 +++-- ui/shaman/elemental/gear_sets/p4_item_swap.gear.json | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/sim/shaman/elemental/TestElemental.results b/sim/shaman/elemental/TestElemental.results index cd44e0e78a..3c45d246e1 100644 --- a/sim/shaman/elemental/TestElemental.results +++ b/sim/shaman/elemental/TestElemental.results @@ -1383,8 +1383,8 @@ dps_results: { dps_results: { key: "TestElemental-AllItems-RuthlessGladiator'sInsigniaofDominance-70402" value: { - dps: 40634.05106 - tps: 627.54343 + dps: 40694.88724 + tps: 624.76467 } } dps_results: { diff --git a/ui/shaman/elemental/apls/aoe.apl.json b/ui/shaman/elemental/apls/aoe.apl.json index 92b97ce50d..cf779eccea 100644 --- a/ui/shaman/elemental/apls/aoe.apl.json +++ b/ui/shaman/elemental/apls/aoe.apl.json @@ -3,8 +3,9 @@ "prepullActions": [ {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":99742}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":109844}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":107804}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":109842}}},"doAtValue":{"const":{"val":"-1s"}}}, @@ -13,7 +14,7 @@ {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":421}}},"doAtValue":{"const":{"val":"-1s"}}} ], diff --git a/ui/shaman/elemental/apls/default.apl.json b/ui/shaman/elemental/apls/default.apl.json index ed1feab1cf..10e2ad20e0 100644 --- a/ui/shaman/elemental/apls/default.apl.json +++ b/ui/shaman/elemental/apls/default.apl.json @@ -3,8 +3,9 @@ "prepullActions": [ {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, - {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, + {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"activateAura":{"auraId":{"spellId":99742}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":109844}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":107804}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":109842}}},"doAtValue":{"const":{"val":"-1s"}}}, @@ -13,7 +14,7 @@ {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":403}}},"doAtValue":{"const":{"val":"-1s"}}} ], diff --git a/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json b/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json index da17c12c84..f37418523f 100644 --- a/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json +++ b/ui/shaman/elemental/gear_sets/p4_item_swap.gear.json @@ -25,7 +25,7 @@ {}, {}, { - "id": 62467 + "id": 70402 }, { "id": 56339 From dbace7a90dd1e34512c45e75b5f674e922db381b Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Tue, 14 Jan 2025 21:22:18 +0100 Subject: [PATCH 124/127] Fix gems in Ele P4 set --- ui/shaman/elemental/gear_sets/p4.default.gear.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/shaman/elemental/gear_sets/p4.default.gear.json b/ui/shaman/elemental/gear_sets/p4.default.gear.json index d8ab3a0618..72ef0e866d 100644 --- a/ui/shaman/elemental/gear_sets/p4.default.gear.json +++ b/ui/shaman/elemental/gear_sets/p4.default.gear.json @@ -8,7 +8,7 @@ { "id": 78393, "enchant": 4257, "gems": [71881, 0], "reforging": 117 }, { "id": 78666, "enchant": 4068, "gems": [71881, 0], "reforging": 148 }, { "id": 78463, "gems": [71881, 71881, 71881], "reforging": 119 }, - { "id": 78718, "enchant": 4114, "gems": [52207, 52207, 52208], "reforging": 119 }, + { "id": 78718, "enchant": 4114, "gems": [71881, 71881, 71854], "reforging": 119 }, { "id": 78405, "enchant": 4069, "gems": [71881, 71881], "reforging": 117 }, { "id": 78491, "gems": [71881], "reforging": 119 }, { "id": 78419, "gems": [71881] }, From 8ff9eaa6b50eedc51bee3a2f1a04daa2cefd195e Mon Sep 17 00:00:00 2001 From: Adrian Klingen Date: Wed, 15 Jan 2025 21:55:40 +0100 Subject: [PATCH 125/127] Set proc ICD to NeverExpire when not equipped --- sim/core/apl_actions_misc.go | 18 +- sim/core/item_swaps.go | 30 +- sim/warrior/fury/TestFury.results | 768 +++++++++++----------- ui/shaman/elemental/apls/aoe.apl.json | 4 +- ui/shaman/elemental/apls/default.apl.json | 4 +- ui/warrior/fury/apls/smf.apl.json | 2 +- ui/warrior/fury/apls/tg.apl.json | 2 +- 7 files changed, 424 insertions(+), 404 deletions(-) diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index a43c57ba27..419e257936 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -79,13 +79,21 @@ func (action *APLActionCancelAura) String() string { } func (action *APLActionActivateAura) IsReady(sim *Simulation) bool { - return true + return action.aura.Icd == nil || action.aura.Icd != nil && action.aura.Icd.IsReady(sim) } func (action *APLActionActivateAura) Execute(sim *Simulation) { + if !action.IsReady(sim) { + if sim.Log != nil { + action.aura.Unit.Log(sim, "Could not activate aura %s because it's not ready", action.aura.ActionID) + } + return + } + if sim.Log != nil { action.aura.Unit.Log(sim, "Activating aura %s", action.aura.ActionID) } + action.aura.Activate(sim) if action.aura.Icd != nil { action.aura.Icd.Use(sim) @@ -117,9 +125,15 @@ func (rot *APLRotation) newActionActivateAuraWithStacks(config *proto.APLActionA } } func (action *APLActionActivateAuraWithStacks) IsReady(sim *Simulation) bool { - return true + return action.aura.Icd == nil || action.aura.Icd != nil && action.aura.Icd.IsReady(sim) } func (action *APLActionActivateAuraWithStacks) Execute(sim *Simulation) { + if !action.IsReady(sim) { + if sim.Log != nil { + action.aura.Unit.Log(sim, "Could not activate aura %s (%d stacks) because it's not ready", action.aura.ActionID, action.numStacks) + } + return + } if sim.Log != nil { action.aura.Unit.Log(sim, "Activating aura %s (%d stacks)", action.aura.ActionID, action.numStacks) } diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index 2d3bcf3781..d422e9edf8 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -89,7 +89,7 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti swapEquip: swapItems, unEquippedItems: swapItems, equipmentStats: equipmentStats, - swapSet: proto.APLActionItemSwap_Unknown, + swapSet: proto.APLActionItemSwap_Main, initialized: false, } } @@ -152,12 +152,15 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isItemProc := config.ItemID != 0 isEnchantEffectProc := config.EnchantId != 0 character := swap.character + hasIcd := config.Aura.Icd != nil character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, _ proto.ItemSlot) { isItemSlotMatch := false - + // Enchant effects such as Weapon/Back do not trigger an ICD + var shouldUpdateIcd bool if isItemProc { isItemSlotMatch = character.hasItemEquipped(config.ItemID, config.Slots) + shouldUpdateIcd = hasIcd } else if isEnchantEffectProc { isItemSlotMatch = character.hasEnchantEquipped(config.EnchantId, config.Slots) } @@ -165,13 +168,15 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { if isItemSlotMatch { if !config.Aura.IsActive() { config.Aura.Activate(sim) - // Enchant effects such as Weapon/Back do not trigger an ICD - if isItemProc && config.Aura.Icd != nil { - config.Aura.Icd.Use(sim) - } + } + if shouldUpdateIcd { + config.Aura.Icd.Use(sim) } } else { config.Aura.Deactivate(sim) + if shouldUpdateIcd { + config.Aura.Icd.Set(NeverExpires) + } } }) } @@ -179,9 +184,6 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { // Helper for handling Item On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterActive(itemID int32) { slots := swap.EligibleSlotsForItem(itemID) - if !swap.ItemExistsInSwapSet(itemID, slots) { - return - } swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { hasItemEquipped := swap.character.hasItemEquipped(itemID, slots) @@ -221,7 +223,7 @@ func (swap *ItemSwap) IsEnabled() bool { } func (swap *ItemSwap) IsValidSwap(swapSet proto.APLActionItemSwap_SwapSet) bool { - return !(swap.swapSet == swapSet || swap.swapSet == proto.APLActionItemSwap_Unknown && swapSet == proto.APLActionItemSwap_Main) + return swap.swapSet != swapSet } func (swap *ItemSwap) IsSwapped() bool { @@ -248,7 +250,7 @@ func (swap *ItemSwap) ItemExistsInMainEquip(itemID int32, possibleSlots []proto. return swap.originalEquip.containsItemInSlots(itemID, possibleSlots) } -func (swap *ItemSwap) ItemExistsInSwapSet(itemID int32, possibleSlots []proto.ItemSlot) bool { +func (swap *ItemSwap) ItemExistsInSwapEquip(itemID int32, possibleSlots []proto.ItemSlot) bool { return swap.swapEquip.containsItemInSlots(itemID, possibleSlots) } @@ -283,7 +285,7 @@ func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { } func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool) { - if !swap.IsEnabled() || !swap.IsValidSwap(swapSet) { + if !swap.IsEnabled() || !swap.IsValidSwap(swapSet) && !isReset { return } @@ -305,6 +307,10 @@ func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap } } + if !swap.IsValidSwap(swapSet) && isReset { + return + } + statsToSwap := Ternary(isPrepull, swap.equipmentStats.allSlots, swap.equipmentStats.weaponSlots) if swap.IsSwapped() { statsToSwap = statsToSwap.Invert() diff --git a/sim/warrior/fury/TestFury.results b/sim/warrior/fury/TestFury.results index f195574edd..2f3319ebb6 100644 --- a/sim/warrior/fury/TestFury.results +++ b/sim/warrior/fury/TestFury.results @@ -2169,1345 +2169,1345 @@ dps_results: { dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98949.58737 - tps: 107121.31103 + dps: 99420.22341 + tps: 107707.2754 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38837.31151 - tps: 32838.3516 + dps: 38724.81286 + tps: 32635.35582 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51460.43208 - tps: 42476.49406 + dps: 50608.75791 + tps: 41861.75661 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67145.6191 - tps: 73608.9278 + dps: 67706.21876 + tps: 74393.85832 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24128.70401 - tps: 19945.98196 + dps: 24234.5116 + tps: 20113.07153 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28034.81089 - tps: 22065.24622 + dps: 27787.62287 + tps: 21782.3933 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99167.3007 - tps: 107358.02957 + dps: 99693.4096 + tps: 107994.92009 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38919.88094 - tps: 32911.90612 + dps: 38807.94926 + tps: 32711.86919 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51827.40981 - tps: 42805.26407 + dps: 51010.36494 + tps: 42219.98139 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67270.45531 - tps: 73746.67078 + dps: 67876.89262 + tps: 74583.91666 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24169.07647 - tps: 19980.29007 + dps: 24280.95917 + tps: 20150.71489 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28216.69655 - tps: 22221.5636 + dps: 27980.1913 + tps: 21951.78671 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 98949.58737 - tps: 107121.31103 + dps: 99420.22341 + tps: 107707.2754 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38294.37441 - tps: 31854.92695 + dps: 37914.38638 + tps: 31452.09127 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50310.80958 - tps: 41435.83952 + dps: 49847.95379 + tps: 40852.89234 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67145.6191 - tps: 73608.9278 + dps: 67706.21876 + tps: 74393.85832 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23761.89209 - tps: 19285.03085 + dps: 23762.94082 + tps: 19206.636 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28060.4489 - tps: 21816.56485 + dps: 27748.16923 + tps: 21537.74869 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99167.3007 - tps: 107358.02957 + dps: 99693.4096 + tps: 107994.92009 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38376.75927 - tps: 31927.70383 + dps: 38007.2874 + tps: 31533.24867 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50672.68761 - tps: 41758.0038 + dps: 50312.49727 + tps: 41273.33635 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 67270.45531 - tps: 73746.67078 + dps: 67876.89262 + tps: 74583.91666 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23802.09299 - tps: 19318.97785 + dps: 23811.94507 + tps: 19246.44799 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28241.72296 - tps: 21970.98634 + dps: 27940.47949 + tps: 21703.23638 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82111.42544 - tps: 89541.70663 + dps: 81764.30937 + tps: 88752.94469 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31286.68646 - tps: 27067.40349 + dps: 31144.65131 + tps: 26957.18606 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41696.93811 - tps: 35395.30239 + dps: 41397.10774 + tps: 35004.7755 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55687.9054 - tps: 61549.90212 + dps: 56078.57135 + tps: 61903.44014 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19280.02073 - tps: 16485.81767 + dps: 19383.84856 + tps: 16479.23714 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22514.03432 - tps: 18094.10603 + dps: 22798.36332 + tps: 18383.71532 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82293.05351 - tps: 89740.17001 + dps: 81956.38133 + tps: 88961.35288 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31354.43076 - tps: 27129.14537 + dps: 31206.34058 + tps: 27017.93021 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41995.74705 - tps: 35668.96464 + dps: 41689.39891 + tps: 35266.33486 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55790.96511 - tps: 61664.49042 + dps: 56195.84675 + tps: 62033.68393 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19312.69562 - tps: 16514.32972 + dps: 19408.72062 + tps: 16500.66627 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22658.00673 - tps: 18220.6202 + dps: 22962.71023 + tps: 18531.45848 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82111.42544 - tps: 89541.70663 + dps: 81764.30937 + tps: 88752.94469 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31110.68099 - tps: 26300.37335 + dps: 31291.06825 + tps: 26439.53181 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41201.5275 - tps: 34450.03066 + dps: 41185.46546 + tps: 34649.11523 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55687.9054 - tps: 61549.90212 + dps: 56078.57135 + tps: 61903.44014 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19280.8582 - tps: 15998.6057 + dps: 19298.35543 + tps: 16035.86901 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22422.66881 - tps: 17740.68092 + dps: 22338.82069 + tps: 17765.10013 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82293.05351 - tps: 89740.17001 + dps: 81956.38133 + tps: 88961.35288 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31178.71285 - tps: 26361.57521 + dps: 31376.14791 + tps: 26509.62174 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41495.55542 - tps: 34715.64659 + dps: 41461.6421 + tps: 34895.51141 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55790.96511 - tps: 61664.49042 + dps: 56195.84675 + tps: 62033.68393 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19313.27529 - tps: 16026.51444 + dps: 19342.21747 + tps: 16075.19801 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22566.62461 - tps: 17865.25088 + dps: 22497.18312 + tps: 17903.71693 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149906.71851 - tps: 164780.91961 + dps: 148951.42001 + tps: 163922.56056 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49817.23078 - tps: 40959.86834 + dps: 49998.06106 + tps: 41089.61465 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65165.07046 - tps: 52517.80122 + dps: 65231.99068 + tps: 52517.96214 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105758.01773 - tps: 117859.11427 + dps: 105026.96941 + tps: 116887.92585 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31957.13478 - tps: 25512.25535 + dps: 31649.33147 + tps: 25348.65909 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36779.59912 - tps: 27960.05924 + dps: 37290.61065 + tps: 28409.87292 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150234.38112 - tps: 165141.03629 + dps: 149341.38916 + tps: 164354.8147 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49924.90371 - tps: 41051.64155 + dps: 50140.00537 + tps: 41208.29178 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65631.18121 - tps: 52917.33387 + dps: 65628.42746 + tps: 52859.08286 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105955.48631 - tps: 118079.45873 + dps: 105261.89814 + tps: 117147.24766 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32012.27747 - tps: 25556.41628 + dps: 31669.83292 + tps: 25364.88849 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 37022.36511 - tps: 28155.28437 + dps: 37529.10169 + tps: 28598.82637 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 149906.71851 - tps: 164780.91961 + dps: 148951.42001 + tps: 163922.56056 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49915.17092 - tps: 40051.00327 + dps: 49522.40543 + tps: 39730.01222 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64681.16513 - tps: 51470.78666 + dps: 64588.24741 + tps: 51162.14702 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105758.01773 - tps: 117859.11427 + dps: 105026.96941 + tps: 116887.92585 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31968.63156 - tps: 24939.13148 + dps: 32136.18475 + tps: 24979.86795 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36614.31302 - tps: 27130.48319 + dps: 36934.18938 + tps: 27639.36943 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 150234.38112 - tps: 165141.03629 + dps: 149341.38916 + tps: 164354.8147 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 50021.66575 - tps: 40140.88139 + dps: 49652.17363 + tps: 39838.04512 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 65143.65737 - tps: 51864.01013 + dps: 65039.25295 + tps: 51537.00056 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105955.48631 - tps: 118079.45873 + dps: 105261.89814 + tps: 117147.24766 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32023.17947 - tps: 24981.85439 + dps: 32207.74707 + tps: 25035.45727 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36853.80047 - tps: 27320.07802 + dps: 37167.14251 + tps: 27833.28661 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123235.1684 - tps: 136531.80883 + dps: 123346.95597 + tps: 136864.81924 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39914.83038 - tps: 33818.96114 + dps: 39825.06045 + tps: 33785.77497 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52371.3802 - tps: 43612.82869 + dps: 52650.89482 + tps: 43839.17333 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87643.43916 - tps: 98383.75587 + dps: 86574.56981 + tps: 97262.35932 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25251.16521 - tps: 20940.09682 + dps: 25289.8851 + tps: 20958.0516 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29638.57389 - tps: 23534.38315 + dps: 29687.65265 + tps: 23668.5666 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123504.5959 - tps: 136829.65305 + dps: 123608.27627 + tps: 137155.23028 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40000.17138 - tps: 33893.25919 + dps: 39869.36986 + tps: 33826.65503 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52750.24202 - tps: 43945.80431 + dps: 53024.8501 + tps: 44173.1271 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87807.56591 - tps: 98568.49093 + dps: 86745.84379 + tps: 97455.40276 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25295.19005 - tps: 20976.60793 + dps: 25333.28136 + tps: 20992.84253 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29833.47313 - tps: 23697.50685 + dps: 29885.83092 + tps: 23830.38492 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123235.1684 - tps: 136531.80883 + dps: 123346.95597 + tps: 136864.81924 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40255.42749 - tps: 32886.98131 + dps: 40420.81986 + tps: 33134.64351 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52634.55444 - tps: 42495.15244 + dps: 53094.42535 + tps: 43147.24898 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87643.43916 - tps: 98383.75587 + dps: 86574.56981 + tps: 97262.35932 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25576.38566 - tps: 20508.43464 + dps: 25631.62743 + tps: 20434.10887 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29863.38572 - tps: 22901.23997 + dps: 29665.79519 + tps: 22717.24709 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123504.5959 - tps: 136829.65305 + dps: 123608.27627 + tps: 137155.23028 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40340.64637 - tps: 32959.97037 + dps: 40524.89094 + tps: 33220.69741 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 53014.30499 - tps: 42823.07515 + dps: 53553.24938 + tps: 43551.20742 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87807.56591 - tps: 98568.49093 + dps: 86745.84379 + tps: 97455.40276 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25620.63493 - tps: 20544.30976 + dps: 25672.01503 + tps: 20467.37385 } } dps_results: { key: "TestFury-Settings-Troll-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 30056.99407 - tps: 23059.48596 + dps: 29834.44387 + tps: 22866.22728 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99284.62616 - tps: 107527.11992 + dps: 99517.478 + tps: 107781.03849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38797.28869 - tps: 32534.01027 + dps: 38905.09453 + tps: 32811.16739 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50576.26905 - tps: 41633.85003 + dps: 51023.04145 + tps: 41911.86992 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68126.44053 - tps: 74746.5713 + dps: 67687.87347 + tps: 74165.95574 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24090.43076 - tps: 19895.02957 + dps: 24140.99679 + tps: 19932.25819 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27699.05965 - tps: 21818.6416 + dps: 27524.24488 + tps: 21615.99289 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99498.38738 - tps: 107759.92875 + dps: 99758.43807 + tps: 108045.51454 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38877.08226 - tps: 32604.99612 + dps: 38997.84851 + tps: 32893.94572 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50931.82417 - tps: 41951.48147 + dps: 51495.55756 + tps: 42327.4119 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68247.32426 - tps: 74880.05571 + dps: 67849.25339 + tps: 74338.232 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 24129.38495 - tps: 19928.14345 + dps: 24178.48887 + tps: 19964.10937 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27875.27675 - tps: 21970.29092 + dps: 27728.98655 + tps: 21795.64278 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99284.62616 - tps: 107527.11992 + dps: 99517.478 + tps: 107781.03849 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38118.37479 - tps: 31528.99958 + dps: 38383.50503 + tps: 31868.44751 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 49810.05069 - tps: 40835.65477 + dps: 50111.20222 + tps: 41203.68184 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68126.44053 - tps: 74746.5713 + dps: 67687.87347 + tps: 74165.95574 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23944.21388 - tps: 19439.32126 + dps: 23888.94966 + tps: 19326.23458 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 26950.41436 - tps: 20812.54791 + dps: 26927.73271 + tps: 20900.03806 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 99498.38738 - tps: 107759.92875 + dps: 99758.43807 + tps: 108045.51454 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 38196.95499 - tps: 31598.28416 + dps: 38453.40047 + tps: 31927.02379 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 50158.31636 - tps: 41144.20646 + dps: 50540.12403 + tps: 41574.90242 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 68247.32426 - tps: 74880.05571 + dps: 67849.25339 + tps: 74338.232 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 23982.56571 - tps: 19471.51837 + dps: 23936.26357 + tps: 19367.07825 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 27121.41242 - tps: 20957.12264 + dps: 27139.6141 + tps: 21079.12559 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82630.29522 - tps: 89953.06088 + dps: 82783.82269 + tps: 90213.68431 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31197.40563 - tps: 26868.77994 + dps: 31470.86067 + tps: 27095.07005 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 40912.89789 - tps: 34583.41518 + dps: 40676.54525 + tps: 34502.71955 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55887.35599 - tps: 61827.07531 + dps: 55846.42502 + tps: 61626.66613 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19519.77691 - tps: 16661.11458 + dps: 19367.88147 + tps: 16506.69884 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22448.38595 - tps: 17975.87654 + dps: 22176.39027 + tps: 17591.67003 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82807.24429 - tps: 90146.76848 + dps: 82958.0648 + tps: 90405.15215 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 31261.97291 - tps: 26927.4127 + dps: 31552.98209 + tps: 27168.36726 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41201.71572 - tps: 34847.52668 + dps: 41027.11567 + tps: 34821.58672 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55987.59192 - tps: 61938.58409 + dps: 55944.38299 + tps: 61740.28688 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19551.47664 - tps: 16688.78238 + dps: 19401.82044 + tps: 16536.70615 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22589.32385 - tps: 18100.00024 + dps: 22311.31586 + tps: 17720.34887 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82630.29522 - tps: 89953.06088 + dps: 82783.82269 + tps: 90213.68431 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30888.83638 - tps: 26022.84457 + dps: 31230.54416 + tps: 26426.11917 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41002.82975 - tps: 34341.72235 + dps: 41131.70912 + tps: 34366.75761 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55887.35599 - tps: 61827.07531 + dps: 55846.42502 + tps: 61626.66613 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19438.56898 - tps: 16044.95485 + dps: 19554.7359 + tps: 16204.43628 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22280.49271 - tps: 17512.72817 + dps: 22220.07544 + tps: 17362.39518 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 82807.24429 - tps: 90146.76848 + dps: 82958.0648 + tps: 90405.15215 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 30954.37682 - tps: 26081.66849 + dps: 31299.43207 + tps: 26485.50138 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 41289.98776 - tps: 34600.72988 + dps: 41450.90828 + tps: 34661.1554 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 55987.59192 - tps: 61938.58409 + dps: 55944.38299 + tps: 61740.28688 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 19469.65676 - tps: 16071.47839 + dps: 19581.37938 + tps: 16224.20275 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_smf-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 22420.21094 - tps: 17633.92058 + dps: 22351.74632 + tps: 17477.41324 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147866.00819 - tps: 162739.83049 + dps: 149509.77345 + tps: 164697.98751 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49319.45713 - tps: 40347.8773 + dps: 49586.55539 + tps: 40768.51742 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64200.71621 - tps: 51402.65594 + dps: 64011.57433 + tps: 51450.46487 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105965.51434 - tps: 117997.13688 + dps: 105564.3184 + tps: 117562.0008 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 31966.61586 - tps: 25550.56045 + dps: 31763.66736 + tps: 25463.85601 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36332.31719 - tps: 27726.67966 + dps: 36545.18489 + tps: 27746.3013 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148182.59425 - tps: 163088.77576 + dps: 149845.36217 + tps: 165067.84594 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49420.06194 - tps: 40432.37284 + dps: 49683.31856 + tps: 40848.49788 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64648.53098 - tps: 51782.29888 + dps: 64452.72463 + tps: 51826.35498 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106160.14386 - tps: 118214.72583 + dps: 105762.31957 + tps: 117785.14983 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32020.22687 - tps: 25593.2213 + dps: 31841.04423 + tps: 25525.35642 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36566.8042 - tps: 27914.87461 + dps: 36775.43971 + tps: 27944.30682 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 147866.00819 - tps: 162739.83049 + dps: 149509.77345 + tps: 164697.98751 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49745.41018 - tps: 39722.09752 + dps: 49263.02298 + tps: 39475.52409 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 63748.30056 - tps: 50043.23353 + dps: 63033.55756 + tps: 49489.41867 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 105965.51434 - tps: 117997.13688 + dps: 105564.3184 + tps: 117562.0008 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32176.93207 - tps: 25015.88947 + dps: 32127.5958 + tps: 24950.63331 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36370.25406 - tps: 27090.84006 + dps: 36013.21339 + tps: 26620.70234 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 148182.59425 - tps: 163088.77576 + dps: 149845.36217 + tps: 165067.84594 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 49846.21503 - tps: 39805.841 + dps: 49364.1114 + tps: 39562.51579 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 64196.48289 - tps: 50418.58389 + dps: 63452.18613 + tps: 49835.43193 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 106160.14386 - tps: 118214.72583 + dps: 105762.31957 + tps: 117785.14983 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 32230.23389 - tps: 25057.60663 + dps: 32187.67777 + tps: 24997.70414 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-DefaultTalents-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 36602.64948 - tps: 27274.86959 + dps: 36215.24644 + tps: 26790.1886 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123526.76619 - tps: 136914.32338 + dps: 123184.13896 + tps: 136377.42561 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39389.0227 - tps: 33240.97143 + dps: 39477.0268 + tps: 33230.0905 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52043.0382 - tps: 43224.07867 + dps: 52146.60565 + tps: 43325.13006 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87979.75774 - tps: 98783.92063 + dps: 87407.48289 + tps: 98199.25331 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25108.71593 - tps: 20685.62676 + dps: 25267.16 + tps: 20844.50497 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29132.02888 - tps: 22588.94592 + dps: 29035.38738 + tps: 22610.70344 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123789.30248 - tps: 137205.04389 + dps: 123439.3493 + tps: 136660.22172 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 39470.09113 - tps: 33311.10212 + dps: 39565.14125 + tps: 33306.81169 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 52413.49809 - tps: 43549.49437 + dps: 52493.04123 + tps: 43634.30785 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88140.57861 - tps: 98964.99817 + dps: 87576.94821 + tps: 98392.07626 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25152.27477 - tps: 20721.22069 + dps: 25302.74747 + tps: 20875.28843 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-smf-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29319.28562 - tps: 22742.65075 + dps: 29234.03978 + tps: 22784.00162 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123526.76619 - tps: 136914.32338 + dps: 123184.13896 + tps: 136377.42561 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40014.72178 - tps: 32771.59868 + dps: 40091.08182 + tps: 32808.79665 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51384.25484 - tps: 41532.52632 + dps: 51607.52124 + tps: 41522.46721 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 87979.75774 - tps: 98783.92063 + dps: 87407.48289 + tps: 98199.25331 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25841.50351 - tps: 20624.43602 + dps: 25634.13884 + tps: 20446.78027 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_smf_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 28988.02234 - tps: 21879.56831 + dps: 29140.78691 + tps: 22182.43215 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongMultiTarget" value: { - dps: 123789.30248 - tps: 137205.04389 + dps: 123439.3493 + tps: 136660.22172 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-LongSingleTarget" value: { - dps: 40095.95862 - tps: 32840.5451 + dps: 40172.20055 + tps: 32877.46897 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-FullBuffs-0.0yards-ShortSingleTarget" value: { - dps: 51742.12028 - tps: 41839.75091 + dps: 51945.33225 + tps: 41823.46586 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongMultiTarget" value: { - dps: 88140.57861 - tps: 98964.99817 + dps: 87576.94821 + tps: 98392.07626 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-LongSingleTarget" value: { - dps: 25884.55312 - tps: 20658.95595 + dps: 25665.98126 + tps: 20471.16617 } } dps_results: { key: "TestFury-Settings-Worgen-p3_fury_tg-Titan's Grip-Basic-tg-p3_fury_tg_item_swap-NoBuffs-0.0yards-ShortSingleTarget" value: { - dps: 29174.61619 - tps: 22030.04428 + dps: 29304.56824 + tps: 22322.15602 } } dps_results: { diff --git a/ui/shaman/elemental/apls/aoe.apl.json b/ui/shaman/elemental/apls/aoe.apl.json index cf779eccea..f201d31c8e 100644 --- a/ui/shaman/elemental/apls/aoe.apl.json +++ b/ui/shaman/elemental/apls/aoe.apl.json @@ -1,7 +1,7 @@ { "type": "TypeAPL", "prepullActions": [ - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-90s"}}}, {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, @@ -14,7 +14,7 @@ {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":421}}},"doAtValue":{"const":{"val":"-1s"}}} ], diff --git a/ui/shaman/elemental/apls/default.apl.json b/ui/shaman/elemental/apls/default.apl.json index 10e2ad20e0..f494edd57a 100644 --- a/ui/shaman/elemental/apls/default.apl.json +++ b/ui/shaman/elemental/apls/default.apl.json @@ -1,7 +1,7 @@ { "type": "TypeAPL", "prepullActions": [ - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-54s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-90s"}}}, {"action":{"castSpell":{"spellId":{"spellId":66842}}},"doAtValue":{"const":{"val":"-3s"}}}, {"action":{"castSpell":{"spellId":{"spellId":79206}}},"doAtValue":{"const":{"val":"-1s"}},"hide":true}, {"action":{"activateAura":{"auraId":{"spellId":74221,"tag":1}}},"doAtValue":{"const":{"val":"-1s"}}}, @@ -14,7 +14,7 @@ {"action":{"activateAura":{"auraId":{"spellId":109803}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":91192}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"activateAura":{"auraId":{"spellId":90898}}},"doAtValue":{"const":{"val":"-1s"}}}, - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-1s"}}}, + {"action":{"itemSwap":{"swapSet":"Main"}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"otherId":"OtherActionPotion"}}},"doAtValue":{"const":{"val":"-1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":403}}},"doAtValue":{"const":{"val":"-1s"}}} ], diff --git a/ui/warrior/fury/apls/smf.apl.json b/ui/warrior/fury/apls/smf.apl.json index aa251f3753..4616ec1b09 100644 --- a/ui/warrior/fury/apls/smf.apl.json +++ b/ui/warrior/fury/apls/smf.apl.json @@ -1,7 +1,7 @@ { "type": "TypeAPL", "prepullActions": [ - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-70s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-120s"}}}, {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-20.1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":2458}}},"doAtValue":{"const":{"val":"-2s"}}}, {"action":{"castSpell":{"spellId":{"spellId":6673}}},"doAtValue":{"const":{"val":"-1.7s"}}}, diff --git a/ui/warrior/fury/apls/tg.apl.json b/ui/warrior/fury/apls/tg.apl.json index ab5fcd6fdf..1484694e24 100644 --- a/ui/warrior/fury/apls/tg.apl.json +++ b/ui/warrior/fury/apls/tg.apl.json @@ -1,7 +1,7 @@ { "type": "TypeAPL", "prepullActions": [ - {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-70s"}}}, + {"action":{"itemSwap":{"swapSet":"Swap1"}},"doAtValue":{"const":{"val":"-120s"}}}, {"action":{"castSpell":{"spellId":{"itemId":70142}}},"doAtValue":{"const":{"val":"-20.1s"}}}, {"action":{"castSpell":{"spellId":{"spellId":2458}}},"doAtValue":{"const":{"val":"-2s"}}}, {"action":{"castSpell":{"spellId":{"spellId":6673}}},"doAtValue":{"const":{"val":"-1.7s"}}}, From ab86ceb1da71b5f5da1d0a9b5565b4cabb94786e Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Wed, 15 Jan 2025 19:11:35 -0800 Subject: [PATCH 126/127] Miscellaneous code cleanup On branch feature/add-trinket-swapping Changes to be committed: modified: sim/core/apl.go modified: sim/core/apl_actions_misc.go modified: sim/core/database.go modified: sim/core/item_effects.go modified: sim/core/item_sets.go modified: sim/core/item_swaps.go --- sim/core/apl.go | 10 +-- sim/core/apl_actions_misc.go | 4 +- sim/core/database.go | 28 -------- sim/core/item_effects.go | 28 ++++++++ sim/core/item_sets.go | 76 ++++++++++----------- sim/core/item_swaps.go | 128 +++++++++++++++++++---------------- 6 files changed, 142 insertions(+), 132 deletions(-) diff --git a/sim/core/apl.go b/sim/core/apl.go index 45e6bda7cd..3286c065bd 100644 --- a/sim/core/apl.go +++ b/sim/core/apl.go @@ -153,11 +153,12 @@ func (unit *Unit) newAPLRotation(config *proto.APLRotation) *APLRotation { }) } - // Remove MCDs that are referenced by APL actions, so that the Autocast Other Cooldowns - // action does not include them. agent := unit.Env.GetAgentFromUnit(unit) - character := agent.GetCharacter() if agent != nil { + character := agent.GetCharacter() + + // Remove MCDs that are referenced by APL actions, so that the Autocast Other Cooldowns + // action does not include them. for _, action := range rotation.allAPLActions() { if castSpellAction, ok := action.impl.(*APLActionCastSpell); ok { character.removeInitialMajorCooldown(castSpellAction.spell.ActionID) @@ -168,8 +169,7 @@ func (unit *Unit) newAPLRotation(config *proto.APLRotation) *APLRotation { } // If user has Item Swapping enabled and hasn't swapped back to the main set do it here. - // Pre-cache character in earlier code that uses it - if (character != nil) && character.ItemSwap.IsEnabled() { + if character.ItemSwap.IsEnabled() { var hasMainSwap bool for _, prepullAction := range rotation.allPrepullActions() { if action, ok := prepullAction.impl.(*APLActionItemSwap); ok { diff --git a/sim/core/apl_actions_misc.go b/sim/core/apl_actions_misc.go index 419e257936..a51f9b9029 100644 --- a/sim/core/apl_actions_misc.go +++ b/sim/core/apl_actions_misc.go @@ -79,7 +79,7 @@ func (action *APLActionCancelAura) String() string { } func (action *APLActionActivateAura) IsReady(sim *Simulation) bool { - return action.aura.Icd == nil || action.aura.Icd != nil && action.aura.Icd.IsReady(sim) + return (action.aura.Icd == nil) || action.aura.Icd.IsReady(sim) } func (action *APLActionActivateAura) Execute(sim *Simulation) { @@ -125,7 +125,7 @@ func (rot *APLRotation) newActionActivateAuraWithStacks(config *proto.APLActionA } } func (action *APLActionActivateAuraWithStacks) IsReady(sim *Simulation) bool { - return action.aura.Icd == nil || action.aura.Icd != nil && action.aura.Icd.IsReady(sim) + return (action.aura.Icd == nil) || action.aura.Icd.IsReady(sim) } func (action *APLActionActivateAuraWithStacks) Execute(sim *Simulation) { if !action.IsReady(sim) { diff --git a/sim/core/database.go b/sim/core/database.go index dd61a22d48..cda041d688 100644 --- a/sim/core/database.go +++ b/sim/core/database.go @@ -332,34 +332,6 @@ func (equipment *Equipment) ToEquipmentSpecProto() *proto.EquipmentSpec { } } -func (equipment *Equipment) applyItemEffects(agent Agent, registeredItemEffects map[int32]bool, registeredItemEnchantEffects map[int32]bool, includeGemEffects bool) { - for slot, eq := range equipment { - if applyItemEffect, ok := itemEffects[eq.ID]; ok && !registeredItemEffects[eq.ID] { - applyItemEffect(agent) - registeredItemEffects[eq.ID] = true - } - - if includeGemEffects { - for _, g := range eq.Gems { - if applyGemEffect, ok := itemEffects[g.ID]; ok { - applyGemEffect(agent) - } - } - } - - if applyEnchantEffect, ok := enchantEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { - applyEnchantEffect(agent) - registeredItemEnchantEffects[eq.Enchant.EffectID] = true - } - - if applyWeaponEffect, ok := weaponEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { - applyWeaponEffect(agent, proto.ItemSlot(slot)) - registeredItemEnchantEffects[eq.Enchant.EffectID] = true - } - - } -} - // Structs used for looking up items/gems/enchants type EquipmentSpec [proto.ItemSlot_ItemSlotRanged + 1]ItemSpec diff --git a/sim/core/item_effects.go b/sim/core/item_effects.go index e3253ff1e2..e2a7d1e1af 100644 --- a/sim/core/item_effects.go +++ b/sim/core/item_effects.go @@ -94,6 +94,34 @@ func AddWeaponEffect(id int32, weaponEffect ApplyWeaponEffect) { weaponEffects[id] = weaponEffect } +func (equipment *Equipment) applyItemEffects(agent Agent, registeredItemEffects map[int32]bool, registeredItemEnchantEffects map[int32]bool, includeGemEffects bool) { + for slot, eq := range equipment { + if applyItemEffect, ok := itemEffects[eq.ID]; ok && !registeredItemEffects[eq.ID] { + applyItemEffect(agent) + registeredItemEffects[eq.ID] = true + } + + if includeGemEffects { + for _, g := range eq.Gems { + if applyGemEffect, ok := itemEffects[g.ID]; ok { + applyGemEffect(agent) + } + } + } + + if applyEnchantEffect, ok := enchantEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { + applyEnchantEffect(agent) + registeredItemEnchantEffects[eq.Enchant.EffectID] = true + } + + if applyWeaponEffect, ok := weaponEffects[eq.Enchant.EffectID]; ok && !registeredItemEnchantEffects[eq.Enchant.EffectID] { + applyWeaponEffect(agent, proto.ItemSlot(slot)) + registeredItemEnchantEffects[eq.Enchant.EffectID] = true + } + + } +} + // Helpers for making common types of active item effects. func NewSimpleStatItemActiveEffect(itemID int32, bonus stats.Stats, duration time.Duration, cooldown time.Duration, sharedCDFunc func(*Character) Cooldown, otherEffects ApplyEffect) { diff --git a/sim/core/item_sets.go b/sim/core/item_sets.go index 04e64b0d96..a4ed2d1051 100644 --- a/sim/core/item_sets.go +++ b/sim/core/item_sets.go @@ -92,28 +92,24 @@ func NewItemSet(set ItemSet) *ItemSet { return &set } -func (character *Character) CouldHaveSetBonus(set *ItemSet, numItems int32) bool { - if character.Env != nil && character.Env.IsFinalized() { - panic("CouldHaveSetBonus is very slow and should never be called after finalization. Try caching the value during construction instead!") - } - - if _, ok := set.Bonuses[numItems]; !ok { - panic(fmt.Sprintf("Item set %s does not have a bonus with %d pieces.", set.Name, numItems)) - } +type SetBonus struct { + // Name of the set. + Name string - if character.hasActiveSetBonus(set.Name, numItems) { - return true - } + // Number of pieces required for this bonus. + NumPieces int32 - if character.ItemSwap.IsEnabled() { - return character.hasUnequippedSetBonus(set.Name, numItems) - } + // Function for applying the effects of this set bonus. + BonusEffect ApplySetBonus - return false + // Optional field to override the DefaultItemSetSlots + // For Example: The set contains of 2 weapons + Slots []proto.ItemSlot } type SetBonusCollection []SetBonus +// Returns a list describing all active set bonuses. func (equipment *Equipment) getSetBonuses() SetBonusCollection { var activeBonuses SetBonusCollection @@ -160,6 +156,14 @@ func (equipment *Equipment) getSetBonuses() SetBonusCollection { return activeBonuses } +func (character *Character) getActiveSetBonuses() SetBonusCollection { + return character.Equipment.getSetBonuses() +} + +func (character *Character) getUnequippedSetBonuses() SetBonusCollection { + return character.ItemSwap.unEquippedItems.getSetBonuses() +} + func (collection SetBonusCollection) ContainsBonus(setName string, count int32) bool { for _, bonus := range collection { if (bonus.Name == setName) && (bonus.NumPieces >= count) { @@ -170,39 +174,33 @@ func (collection SetBonusCollection) ContainsBonus(setName string, count int32) return false } -// Returns a list describing all active set bonuses. -func (character *Character) getActiveSetBonuses() SetBonusCollection { - return character.Equipment.getSetBonuses() -} - -func (character *Character) getUnequippedSetBonuses() SetBonusCollection { - return character.ItemSwap.unEquippedItems.getSetBonuses() +// Checks whether the character has an equipped set bonus +func (character *Character) hasActiveSetBonus(setName string, count int32) bool { + return character.getActiveSetBonuses().ContainsBonus(setName, count) } func (character *Character) hasUnequippedSetBonus(setName string, count int32) bool { - unequippedSetBonuses := character.getUnequippedSetBonuses() - return unequippedSetBonuses.ContainsBonus(setName, count) + return character.getUnequippedSetBonuses().ContainsBonus(setName, count) } -type SetBonus struct { - // Name of the set. - Name string +func (character *Character) CouldHaveSetBonus(set *ItemSet, numItems int32) bool { + if character.Env != nil && character.Env.IsFinalized() { + panic("CouldHaveSetBonus is very slow and should never be called after finalization. Try caching the value during construction instead!") + } - // Number of pieces required for this bonus. - NumPieces int32 + if _, ok := set.Bonuses[numItems]; !ok { + panic(fmt.Sprintf("Item set %s does not have a bonus with %d pieces.", set.Name, numItems)) + } - // Function for applying the effects of this set bonus. - BonusEffect ApplySetBonus + if character.hasActiveSetBonus(set.Name, numItems) { + return true + } - // Optional field to override the DefaultItemSetSlots - // For Example: The set contains of 2 weapons - Slots []proto.ItemSlot -} + if character.ItemSwap.IsEnabled() { + return character.hasUnequippedSetBonus(set.Name, numItems) + } -// Checks whether the character has an equipped set bonus -func (character *Character) hasActiveSetBonus(setName string, count int32) bool { - activeSetBonuses := character.getActiveSetBonuses() - return activeSetBonuses.ContainsBonus(setName, count) + return false } // Apply effects from item set bonuses. diff --git a/sim/core/item_swaps.go b/sim/core/item_swaps.go index d422e9edf8..69fbb95f2f 100644 --- a/sim/core/item_swaps.go +++ b/sim/core/item_swaps.go @@ -47,22 +47,22 @@ func (character *Character) enableItemSwap(itemSwap *proto.ItemSwap, mhCritMulti var swapItems Equipment hasItemSwap := make(map[proto.ItemSlot]bool) - for slot, item := range itemSwap.Items { - itemSlot := proto.ItemSlot(slot) - hasItemSwap[itemSlot] = item != nil && item.Id != 0 - swapItems[itemSlot] = toItem(item) + for idx, itemSpec := range itemSwap.Items { + itemSlot := proto.ItemSlot(idx) + hasItemSwap[itemSlot] = itemSpec != nil && itemSpec.Id != 0 + swapItems[itemSlot] = toItem(itemSpec) } - has2H := swapItems[proto.ItemSlot_ItemSlotMainHand].HandType == proto.HandType_HandTypeTwoHand - hasMh := character.HasMHWeapon() - hasOh := character.HasOHWeapon() + has2HSwap := swapItems[proto.ItemSlot_ItemSlotMainHand].HandType == proto.HandType_HandTypeTwoHand + hasMhEquipped := character.HasMHWeapon() + hasOhEquipped := character.HasOHWeapon() // Handle MH and OH together, because present MH + empty OH --> swap MH and unequip OH - if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMh { + if hasItemSwap[proto.ItemSlot_ItemSlotOffHand] && hasMhEquipped { hasItemSwap[proto.ItemSlot_ItemSlotMainHand] = true } - if has2H && hasOh { + if has2HSwap && hasOhEquipped { hasItemSwap[proto.ItemSlot_ItemSlotOffHand] = true } @@ -151,16 +151,16 @@ type ItemSwapProcConfig struct { func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { isItemProc := config.ItemID != 0 isEnchantEffectProc := config.EnchantId != 0 - character := swap.character - hasIcd := config.Aura.Icd != nil + // Enchant effects such as Weapon/Back do not trigger an ICD + shouldUpdateIcd := isItemProc && (config.Aura.Icd != nil) + + character := swap.character character.RegisterItemSwapCallback(config.Slots, func(sim *Simulation, _ proto.ItemSlot) { isItemSlotMatch := false - // Enchant effects such as Weapon/Back do not trigger an ICD - var shouldUpdateIcd bool + if isItemProc { isItemSlotMatch = character.hasItemEquipped(config.ItemID, config.Slots) - shouldUpdateIcd = hasIcd } else if isEnchantEffectProc { isItemSlotMatch = character.hasEnchantEquipped(config.EnchantId, config.Slots) } @@ -175,6 +175,8 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { } else { config.Aura.Deactivate(sim) if shouldUpdateIcd { + // This is a hack to block ActivateAura APL + // actions from executing for unequipped items. config.Aura.Icd.Set(NeverExpires) } } @@ -184,33 +186,39 @@ func (swap *ItemSwap) registerProcInternal(config ItemSwapProcConfig) { // Helper for handling Item On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) RegisterActive(itemID int32) { slots := swap.EligibleSlotsForItem(itemID) + itemActionID := ActionID{ItemID: itemID} + character := swap.character - swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { - hasItemEquipped := swap.character.hasItemEquipped(itemID, slots) + character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { + spell := character.GetSpell(itemActionID) + if spell == nil { + return + } - spell := swap.character.GetSpell(ActionID{ItemID: itemID}) - if spell != nil { - aura := swap.character.GetAuraByID(spell.ActionID) - if aura.IsActive() { - aura.Deactivate(sim) - } - if !hasItemEquipped { - spell.Flags |= SpellFlagSwapped - return - } - spell.Flags &= ^SpellFlagSwapped - if !swap.initialized { - return - } + aura := character.GetAuraByID(spell.ActionID) + if aura.IsActive() { + aura.Deactivate(sim) + } + + hasItemEquipped := character.hasItemEquipped(itemID, slots) + if !hasItemEquipped { + spell.Flags |= SpellFlagSwapped + return + } + + spell.Flags &= ^SpellFlagSwapped - spell.CD.Set(sim.CurrentTime + max(spell.CD.TimeToReady(sim), time.Second*30)) + if !swap.initialized { + return } + + spell.CD.Set(sim.CurrentTime + max(spell.CD.TimeToReady(sim), time.Second*30)) }) } // Helper for handling Enchant On Use effects to set a 30s cd on the related spell. func (swap *ItemSwap) ProcessTinker(spell *Spell, slots []proto.ItemSlot) { - swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, slot proto.ItemSlot) { + swap.character.RegisterItemSwapCallback(slots, func(sim *Simulation, _ proto.ItemSlot) { if spell == nil || !swap.initialized { return } @@ -285,29 +293,29 @@ func (swap *ItemSwap) EligibleSlotsForEffect(effectID int32) []proto.ItemSlot { } func (swap *ItemSwap) SwapItems(sim *Simulation, swapSet proto.APLActionItemSwap_SwapSet, isReset bool) { - if !swap.IsEnabled() || !swap.IsValidSwap(swapSet) && !isReset { + if !swap.IsEnabled() || (!swap.IsValidSwap(swapSet) && !isReset) { return } character := swap.character - weaponSlotSwapped := false isPrepull := sim.CurrentTime < 0 for _, slot := range swap.slots { - if !isReset && !isPrepull && (slot < proto.ItemSlot_ItemSlotMainHand || slot > proto.ItemSlot_ItemSlotRanged) { + if (slot >= proto.ItemSlot_ItemSlotMainHand) && (slot <= proto.ItemSlot_ItemSlotRanged) { + weaponSlotSwapped = true + } else if !isReset && !isPrepull { continue } swap.swapItem(sim, slot, isPrepull, isReset) - weaponSlotSwapped = slot == proto.ItemSlot_ItemSlotMainHand || slot == proto.ItemSlot_ItemSlotOffHand || slot == proto.ItemSlot_ItemSlotRanged || weaponSlotSwapped for _, onSwap := range swap.onSwapCallbacks[slot] { onSwap(sim, slot) } } - if !swap.IsValidSwap(swapSet) && isReset { + if !swap.IsValidSwap(swapSet) { return } @@ -341,24 +349,30 @@ func (swap *ItemSwap) swapItem(sim *Simulation, slot proto.ItemSlot, isPrepull b swap.unEquippedItems[slot] = oldItem - if !isPrepull { - switch slot { - case proto.ItemSlot_ItemSlotMainHand: - if swap.character.AutoAttacks.AutoSwingMelee { - swap.character.AutoAttacks.SetMH(swap.character.WeaponFromMainHand(swap.mhCritMultiplier)) - } - case proto.ItemSlot_ItemSlotOffHand: - if swap.character.AutoAttacks.AutoSwingMelee { - weapon := swap.character.WeaponFromOffHand(swap.ohCritMultiplier) - swap.character.AutoAttacks.SetOH(weapon) - swap.character.AutoAttacks.IsDualWielding = weapon.SwingSpeed != 0 - swap.character.AutoAttacks.EnableMeleeSwing(sim) - swap.character.PseudoStats.CanBlock = swap.character.OffHand().WeaponType == proto.WeaponType_WeaponTypeShield - } - case proto.ItemSlot_ItemSlotRanged: - if swap.character.AutoAttacks.AutoSwingRanged { - swap.character.AutoAttacks.SetRanged(swap.character.WeaponFromRanged(swap.rangedCritMultiplier)) - } + if isPrepull { + return + } + + character := swap.character + + switch slot { + case proto.ItemSlot_ItemSlotMainHand: + if character.AutoAttacks.AutoSwingMelee { + character.AutoAttacks.SetMH(character.WeaponFromMainHand(swap.mhCritMultiplier)) + } + case proto.ItemSlot_ItemSlotOffHand: + // OH slot handling is more involved because we need to dynamically toggle the OH weapon attack on/off + // depending on the updated DW status after the swap. + if character.AutoAttacks.AutoSwingMelee { + weapon := character.WeaponFromOffHand(swap.ohCritMultiplier) + character.AutoAttacks.SetOH(weapon) + character.AutoAttacks.IsDualWielding = weapon.SwingSpeed != 0 + character.AutoAttacks.EnableMeleeSwing(sim) + character.PseudoStats.CanBlock = character.OffHand().WeaponType == proto.WeaponType_WeaponTypeShield + } + case proto.ItemSlot_ItemSlotRanged: + if character.AutoAttacks.AutoSwingRanged { + character.AutoAttacks.SetRanged(character.WeaponFromRanged(swap.rangedCritMultiplier)) } } } @@ -383,11 +397,9 @@ func (swap *ItemSwap) doneIteration(sim *Simulation) { } func calcItemSwapStatsOffset(originalEquipment Equipment, swapEquipment Equipment, prepullBonusStats stats.Stats, slots []proto.ItemSlot) ItemSwapStats { - allSlotStats := stats.Stats{} + allSlotStats := prepullBonusStats weaponSlotStats := stats.Stats{} - allWeaponSlots := AllWeaponSlots() - allSlotStats = allSlotStats.Add(prepullBonusStats) for _, slot := range slots { slotStats := ItemEquipmentStats(swapEquipment[slot]).Subtract(ItemEquipmentStats(originalEquipment[slot])) From 0c9ae89b1016cc79d5ff4e95e3ba3173604cb159 Mon Sep 17 00:00:00 2001 From: NerdEgghead Date: Wed, 15 Jan 2025 20:17:10 -0800 Subject: [PATCH 127/127] Cut down on some boilerplate for custom set bonus implementations by storing the set bonus tracker pointer directly. On branch feature/add-trinket-swapping Changes to be committed: modified: sim/death_knight/dancing_rune_weapon.go modified: sim/death_knight/death_knight.go modified: sim/death_knight/items.go modified: sim/death_knight/talents_frost.go modified: sim/death_knight/talents_unholy.go modified: sim/druid/barkskin.go modified: sim/druid/berserk.go modified: sim/druid/druid.go modified: sim/druid/forms.go modified: sim/druid/items.go modified: sim/druid/lacerate.go modified: sim/druid/mangle.go modified: sim/druid/rake.go modified: sim/druid/survival_instincts.go modified: sim/hunter/cata_items.go modified: sim/hunter/cobra_shot.go modified: sim/hunter/hunter.go modified: sim/hunter/steady_shot.go modified: sim/mage/combustion.go modified: sim/mage/items.go modified: sim/mage/mage.go modified: sim/mage/talents_arcane.go modified: sim/mage/talents_frost.go modified: sim/paladin/inquisition.go modified: sim/paladin/items.go modified: sim/paladin/paladin.go modified: sim/shaman/chain_lightning.go modified: sim/shaman/enhancement/lavalash.go modified: sim/shaman/items.go modified: sim/shaman/shaman.go modified: sim/shaman/talents.go modified: sim/warlock/items.go modified: sim/warlock/soul_fire.go modified: sim/warlock/warlock.go --- sim/death_knight/dancing_rune_weapon.go | 2 +- sim/death_knight/death_knight.go | 6 +++--- sim/death_knight/items.go | 21 +++------------------ sim/death_knight/talents_frost.go | 6 +++--- sim/death_knight/talents_unholy.go | 10 +++++----- sim/druid/barkskin.go | 2 +- sim/druid/berserk.go | 2 +- sim/druid/druid.go | 6 +++--- sim/druid/forms.go | 2 +- sim/druid/items.go | 22 +++------------------- sim/druid/lacerate.go | 2 +- sim/druid/mangle.go | 2 +- sim/druid/rake.go | 2 +- sim/druid/survival_instincts.go | 2 +- sim/hunter/cata_items.go | 7 +------ sim/hunter/cobra_shot.go | 2 +- sim/hunter/hunter.go | 2 +- sim/hunter/steady_shot.go | 2 +- sim/mage/combustion.go | 2 +- sim/mage/items.go | 16 +++++----------- sim/mage/mage.go | 4 ++-- sim/mage/talents_arcane.go | 4 ++-- sim/mage/talents_frost.go | 2 +- sim/paladin/inquisition.go | 2 +- sim/paladin/items.go | 10 ++-------- sim/paladin/paladin.go | 2 +- sim/shaman/chain_lightning.go | 2 +- sim/shaman/enhancement/lavalash.go | 2 +- sim/shaman/items.go | 21 +++------------------ sim/shaman/shaman.go | 6 +++--- sim/shaman/talents.go | 4 ++-- sim/warlock/items.go | 7 +------ sim/warlock/soul_fire.go | 2 +- sim/warlock/warlock.go | 2 +- 34 files changed, 60 insertions(+), 128 deletions(-) diff --git a/sim/death_knight/dancing_rune_weapon.go b/sim/death_knight/dancing_rune_weapon.go index 762b47fbda..92d6c28015 100644 --- a/sim/death_knight/dancing_rune_weapon.go +++ b/sim/death_knight/dancing_rune_weapon.go @@ -72,7 +72,7 @@ func (dk *DeathKnight) registerDancingRuneWeaponSpell() { if hasGlyph { dk.PseudoStats.ThreatMultiplier /= 1.5 } - if dk.HasT12Tank4pc { + if dk.T12Tank4pc.IsActive() { t124PAura.Activate(sim) } }, diff --git a/sim/death_knight/death_knight.go b/sim/death_knight/death_knight.go index bd626ce2c3..8199379ab8 100644 --- a/sim/death_knight/death_knight.go +++ b/sim/death_knight/death_knight.go @@ -75,9 +75,9 @@ type DeathKnight struct { gurthalakTentacles []*cata.TentacleOfTheOldOnesPet // Item sets - HasT12Tank4pc bool - HasT13Dps2pc bool - HasT13Dps4pc bool + T12Tank4pc *core.Aura + T13Dps2pc *core.Aura + T13Dps4pc *core.Aura } func (deathKnight *DeathKnight) GetTentacles() []*cata.TentacleOfTheOldOnesPet { diff --git a/sim/death_knight/items.go b/sim/death_knight/items.go index 1fa9638a2c..6f768d8628 100644 --- a/sim/death_knight/items.go +++ b/sim/death_knight/items.go @@ -219,12 +219,7 @@ var ItemSetElementiumDeathplateBattlearmor = core.NewItemSet(core.ItemSet{ // When your Dancing Rune Weapon expires, you gain 15% additional parry chance for 12 sec. // Implemented in dancing_rune_weapon.go dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT12Tank4pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT12Tank4pc = false - }) + dk.T12Tank4pc = setBonusAura }, }, }) @@ -237,24 +232,14 @@ var ItemSetNecroticBoneplateBattlegear = core.NewItemSet(core.ItemSet{ // Sudden Doom has a 30% chance and Rime has a 60% chance to grant 2 charges when triggered instead of 1. // Handled in talents_frost.go:applyRime() and talents_unholy.go:applySuddenDoom() dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT13Dps2pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT13Dps2pc = false - }) + dk.T13Dps2pc = setBonusAura }, 4: func(agent core.Agent, setBonusAura *core.Aura) { // Runic Empowerment has a 25% chance and Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. // Spell: Runic Mastery (id: 105647) // Handled in talents_unholy.go:applyRunicEmpowerementCorruption() dk := agent.(DeathKnightAgent).GetDeathKnight() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT13Dps4pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - dk.HasT13Dps4pc = false - }) + dk.T13Dps4pc = setBonusAura }, }, }) diff --git a/sim/death_knight/talents_frost.go b/sim/death_knight/talents_frost.go index 8ce8a2cbf6..aea6b6cab3 100644 --- a/sim/death_knight/talents_frost.go +++ b/sim/death_knight/talents_frost.go @@ -147,7 +147,7 @@ func (dk *DeathKnight) applyRime() { return } - if dk.HasT13Dps2pc { + if dk.T13Dps2pc.IsActive() { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -166,8 +166,8 @@ func (dk *DeathKnight) applyRime() { freezingFogAura.Activate(sim) // T13 2pc: Rime has a 60% chance to grant 2 charges when triggered instead of 1. - freezingFogAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) - if dk.HasT13Dps2pc { + freezingFogAura.MaxStacks = core.TernaryInt32(dk.T13Dps2pc.IsActive(), 2, 0) + if dk.T13Dps2pc.IsActive() { stacks := core.TernaryInt32(sim.Proc(0.6, "T13 2pc"), 2, 1) freezingFogAura.SetStacks(sim, stacks) } diff --git a/sim/death_knight/talents_unholy.go b/sim/death_knight/talents_unholy.go index ae3439be5e..65703162f0 100644 --- a/sim/death_knight/talents_unholy.go +++ b/sim/death_knight/talents_unholy.go @@ -136,7 +136,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { } // T13 4pc: Runic Corruption has a 40% chance to also grant 710 mastery rating for 12 sec when activated. - if dk.HasT13Dps4pc && sim.Proc(0.4, "T13 4pc") { + if dk.T13Dps4pc.IsActive() && sim.Proc(0.4, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -153,7 +153,7 @@ func (dk *DeathKnight) applyRunicEmpowerementCorruption() { dk.RegenRandomDepletedRune(sim, runeMetrics) // T13 4pc: Runic Empowerment has a 25% chance to also grant 710 mastery rating for 12 sec when activated. - if dk.HasT13Dps4pc && sim.Proc(0.25, "T13 4pc") { + if dk.T13Dps4pc.IsActive() && sim.Proc(0.25, "T13 4pc") { runicMasteryAura.Activate(sim) } } @@ -300,7 +300,7 @@ func (dk *DeathKnight) applySuddenDoom() { return } - if dk.HasT13Dps2pc { + if dk.T13Dps2pc.IsActive() { aura.RemoveStack(sim) } else { aura.Deactivate(sim) @@ -320,8 +320,8 @@ func (dk *DeathKnight) applySuddenDoom() { suddenDoomProcAura.Activate(sim) // T13 2pc: Sudden Doom has a 30% chance to grant 2 charges when triggered instead of 1. - suddenDoomProcAura.MaxStacks = core.TernaryInt32(dk.HasT13Dps2pc, 2, 0) - if dk.HasT13Dps2pc { + suddenDoomProcAura.MaxStacks = core.TernaryInt32(dk.T13Dps2pc.IsActive(), 2, 0) + if dk.T13Dps2pc.IsActive() { stacks := core.TernaryInt32(sim.Proc(0.3, "T13 2pc"), 2, 1) suddenDoomProcAura.SetStacks(sim, stacks) } diff --git a/sim/druid/barkskin.go b/sim/druid/barkskin.go index bd602bea6f..f445532f7d 100644 --- a/sim/druid/barkskin.go +++ b/sim/druid/barkskin.go @@ -31,7 +31,7 @@ func (druid *Druid) registerBarkskinCD() { druid.PseudoStats.ReducedCritTakenChance -= 0.25 } - if druid.HasT12Feral4pBonus { + if druid.T12Feral4pBonus.IsActive() { druid.SmokescreenAura.Activate(sim) } }, diff --git a/sim/druid/berserk.go b/sim/druid/berserk.go index f054810928..7563bd71a5 100644 --- a/sim/druid/berserk.go +++ b/sim/druid/berserk.go @@ -98,7 +98,7 @@ func (druid *Druid) registerBerserkCD() { } func (druid *Druid) ApplyFeral4pT12(sim *core.Simulation) { - if !druid.HasT12Feral4pBonus || !druid.BerserkAura.IsActive() { + if !druid.T12Feral4pBonus.IsActive() || !druid.BerserkAura.IsActive() { return } diff --git a/sim/druid/druid.go b/sim/druid/druid.go index 46f68a8f7e..dbc3ae9445 100644 --- a/sim/druid/druid.go +++ b/sim/druid/druid.go @@ -125,9 +125,9 @@ type Druid struct { disabledMCDs []*core.MajorCooldown // Item sets - HasT11Feral2pBonus bool - HasT11Feral4pBonus bool - HasT12Feral4pBonus bool + T11Feral2pBonus *core.Aura + T11Feral4pBonus *core.Aura + T12Feral4pBonus *core.Aura } const ( diff --git a/sim/druid/forms.go b/sim/druid/forms.go index 8b9fd98afc..fdeab1681f 100644 --- a/sim/druid/forms.go +++ b/sim/druid/forms.go @@ -172,7 +172,7 @@ func (druid *Druid) registerCatFormSpell() { druid.PredatoryInstinctsAura.Deactivate(sim) } - if druid.HasT11Feral4pBonus && druid.StrengthOfThePantherAura.IsActive() { + if druid.StrengthOfThePantherAura.IsActive() { druid.StrengthOfThePantherAura.Deactivate(sim) } } diff --git a/sim/druid/items.go b/sim/druid/items.go index 844c0b131c..984cd77f1b 100644 --- a/sim/druid/items.go +++ b/sim/druid/items.go @@ -15,12 +15,7 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in rake.go and lacerate.go druid := agent.(DruidAgent).GetDruid() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT11Feral2pBonus = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT11Feral2pBonus = false - }) + druid.T11Feral2pBonus = setBonusAura }, 4: func(agent core.Agent, setBonusAura *core.Aura) { druid := agent.(DruidAgent).GetDruid() @@ -47,12 +42,7 @@ var ItemSetStormridersBattlegarb = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT11Feral4pBonus = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT11Feral4pBonus = false - }) + druid.T11Feral4pBonus = setBonusAura }, }, }) @@ -141,13 +131,7 @@ var ItemSetObsidianArborweaveBattlegarb = core.NewItemSet(core.ItemSet{ 4: func(agent core.Agent, setBonusAura *core.Aura) { // Full implementation in berserk.go and barkskin.go druid := agent.(DruidAgent).GetDruid() - - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT12Feral4pBonus = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - druid.HasT12Feral4pBonus = false - }) + druid.T12Feral4pBonus = setBonusAura if !druid.InForm(Bear) { return diff --git a/sim/druid/lacerate.go b/sim/druid/lacerate.go index fe463a8d9d..3b06df0008 100644 --- a/sim/druid/lacerate.go +++ b/sim/druid/lacerate.go @@ -13,7 +13,7 @@ func (druid *Druid) registerLacerateSpell() { initialDamageMul := 1.0 // Set bonuses can scale up the ticks relative to the initial hit - getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.HasT11Feral2pBonus, 1.1, 1) } + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.T11Feral2pBonus.IsActive(), 1.1, 1) } druid.Lacerate = druid.RegisterSpell(Bear, core.SpellConfig{ ActionID: core.ActionID{SpellID: 33745}, diff --git a/sim/druid/mangle.go b/sim/druid/mangle.go index 4a80816ac7..ff15c44ba8 100644 --- a/sim/druid/mangle.go +++ b/sim/druid/mangle.go @@ -118,7 +118,7 @@ func (druid *Druid) registerMangleCatSpell() { } // 4pT11 - if druid.HasT11Feral4pBonus && druid.StrengthOfThePantherAura != nil { + if druid.T11Feral4pBonus.IsActive() { aura := druid.StrengthOfThePantherAura if aura.IsActive() { diff --git a/sim/druid/rake.go b/sim/druid/rake.go index 3bde634763..c07ac3106a 100644 --- a/sim/druid/rake.go +++ b/sim/druid/rake.go @@ -15,7 +15,7 @@ func (druid *Druid) registerRakeSpell() { flatBaseDamage := coefficient * druid.ClassSpellScaling // ~56 // Set bonuses can scale up the ticks relative to the initial hit - getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.HasT11Feral2pBonus, 1.1, 1) } + getTickDamageMultiplier := func() float64 { return core.TernaryFloat64(druid.T11Feral2pBonus.IsActive(), 1.1, 1) } druid.Rake = druid.RegisterSpell(Cat, core.SpellConfig{ ActionID: core.ActionID{SpellID: 1822}, diff --git a/sim/druid/survival_instincts.go b/sim/druid/survival_instincts.go index ed5ec8ddef..a043457709 100644 --- a/sim/druid/survival_instincts.go +++ b/sim/druid/survival_instincts.go @@ -16,7 +16,7 @@ func (druid *Druid) registerSurvivalInstinctsCD() { cdTimer := druid.NewTimer() cd := time.Minute * 3 getDuration := func() time.Duration { - return core.TernaryDuration(druid.HasT11Feral4pBonus, time.Second*18, time.Second*12) + return core.TernaryDuration(druid.T11Feral4pBonus.IsActive(), time.Second*18, time.Second*12) } druid.SurvivalInstinctsAura = druid.RegisterAura(core.Aura{ diff --git a/sim/hunter/cata_items.go b/sim/hunter/cata_items.go index 329c48a27f..2e8243e56e 100644 --- a/sim/hunter/cata_items.go +++ b/sim/hunter/cata_items.go @@ -108,12 +108,7 @@ var ItemSetWyrmstalkerBattleGear = core.NewItemSet(core.ItemSet{ hunter := agent.(HunterAgent).GetHunter() // Handled in Cobra and Steady code respectively - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - hunter.Has2pcT13 = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - hunter.Has2pcT13 = false - }) + hunter.T13_2pc = setBonusAura }, 4: func(agent core.Agent, setBonusAura *core.Aura) { hunter := agent.(HunterAgent).GetHunter() diff --git a/sim/hunter/cobra_shot.go b/sim/hunter/cobra_shot.go index 3121ea29a2..ab6133fa7a 100644 --- a/sim/hunter/cobra_shot.go +++ b/sim/hunter/cobra_shot.go @@ -41,7 +41,7 @@ func (hunter *Hunter) registerCobraShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (276.806 + spell.RangedAttackPower(target)*0.017) - intFocus := core.TernaryFloat64(hunter.Has2pcT13, 9*2, 9) + intFocus := core.TernaryFloat64(hunter.T13_2pc.IsActive(), 9*2, 9) if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 } diff --git a/sim/hunter/hunter.go b/sim/hunter/hunter.go index 1affb89ca7..54835d2873 100644 --- a/sim/hunter/hunter.go +++ b/sim/hunter/hunter.go @@ -75,7 +75,7 @@ type Hunter struct { TrapLauncherAura *core.Aura // Item sets - Has2pcT13 bool + T13_2pc *core.Aura } func (hunter *Hunter) GetCharacter() *core.Character { diff --git a/sim/hunter/steady_shot.go b/sim/hunter/steady_shot.go index 70890ed2ee..a091e7ba36 100644 --- a/sim/hunter/steady_shot.go +++ b/sim/hunter/steady_shot.go @@ -46,7 +46,7 @@ func (hunter *Hunter) registerSteadyShotSpell() { ApplyEffects: func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { baseDamage := hunter.AutoAttacks.Ranged().CalculateNormalizedWeaponDamage(sim, spell.RangedAttackPower(target)) + (280.182 + (spell.RangedAttackPower(target) * 0.021)) - intFocus := core.TernaryFloat64(hunter.Has2pcT13, 9*2, 9) + intFocus := core.TernaryFloat64(hunter.T13_2pc.IsActive(), 9*2, 9) if hunter.Talents.Termination != 0 && sim.IsExecutePhase25() { intFocus += float64(hunter.Talents.Termination) * 3 diff --git a/sim/mage/combustion.go b/sim/mage/combustion.go index e66857f283..de378f31cd 100644 --- a/sim/mage/combustion.go +++ b/sim/mage/combustion.go @@ -38,7 +38,7 @@ func (mage *Mage) registerCombustionSpell() { spell.DealDamage(sim, result) spell.RelatedDotSpell.Cast(sim, target) } - if mage.Has4pcT13 && spell.ProcMask&core.ProcMaskSpellProc == 0 { + if mage.T13_4pc.IsActive() && spell.ProcMask&core.ProcMaskSpellProc == 0 { spell.CD.Reduce(time.Second * time.Duration(5*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/items.go b/sim/mage/items.go index 6713bcf146..fe04edf3e2 100644 --- a/sim/mage/items.go +++ b/sim/mage/items.go @@ -53,24 +53,23 @@ var ItemSetFirehawkRobesOfConflagration = core.NewItemSet(core.ItemSet{ // Your spells have an increased chance to trigger Brain Freeze or Hot Streak. // In addition, Arcane Power decreases the cost of your damaging spells by 10% instead of increasing their cost. 4: func(agent core.Agent, setBonusAura *core.Aura) { - // Arcane Power Cost reduction implemented in: - // talents_arcane.go#278 - mage := agent.(MageAgent).GetMage() setBonusAura.ApplyOnGain(func(_ *core.Aura, _ *core.Simulation) { - mage.Has4pcT12 = true mage.brainFreezeProcChance += .15 mage.baseHotStreakProcChance += 0.30 }) setBonusAura.ApplyOnExpire(func(_ *core.Aura, _ *core.Simulation) { - mage.Has4pcT12 = false mage.brainFreezeProcChance -= .15 mage.baseHotStreakProcChance -= .30 }) setBonusAura.ExposeToAPL(99064) + + // Arcane Power Cost reduction implemented in: + // talents_arcane.go#278 + mage.T12_4pc = setBonusAura }, }, }) @@ -125,12 +124,7 @@ var ItemSetTimeLordsRegalia = core.NewItemSet(core.ItemSet{ // talents_frost.go mage := agent.(MageAgent).GetMage() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - mage.Has4pcT13 = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - mage.Has4pcT13 = false - }) + mage.T13_4pc = setBonusAura }, }, }) diff --git a/sim/mage/mage.go b/sim/mage/mage.go index 53a48a9034..b44d4cd979 100644 --- a/sim/mage/mage.go +++ b/sim/mage/mage.go @@ -54,8 +54,8 @@ type Mage struct { ClassSpellScaling float64 // Item sets - Has4pcT12 bool - Has4pcT13 bool + T12_4pc *core.Aura + T13_4pc *core.Aura } func (mage *Mage) GetCharacter() *core.Character { diff --git a/sim/mage/talents_arcane.go b/sim/mage/talents_arcane.go index 43062eb9cd..6db24b31cb 100644 --- a/sim/mage/talents_arcane.go +++ b/sim/mage/talents_arcane.go @@ -303,7 +303,7 @@ func (mage *Mage) registerArcanePowerCD() { mage.arcanePowerGCDmod.Activate() } - arcanePowerCostMod.UpdateFloatValue(core.TernaryFloat64(mage.Has4pcT12, -0.1, 0.2)) + arcanePowerCostMod.UpdateFloatValue(core.TernaryFloat64(mage.T12_4pc.IsActive(), -0.1, 0.2)) arcanePowerCostMod.Activate() arcanePowerDmgMod.Activate() @@ -331,7 +331,7 @@ func (mage *Mage) registerArcanePowerCD() { }, ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { arcanePowerAura.Activate(sim) - if mage.Has4pcT13 { + if mage.T13_4pc.IsActive() { spell.CD.Reduce(time.Second * time.Duration(7*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/mage/talents_frost.go b/sim/mage/talents_frost.go index e9fac76a8f..fc4d77e258 100644 --- a/sim/mage/talents_frost.go +++ b/sim/mage/talents_frost.go @@ -121,7 +121,7 @@ func (mage *Mage) registerIcyVeinsCD() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { icyVeinsAura.Activate(sim) - if mage.Has4pcT13 { + if mage.T13_4pc.IsActive() { spell.CD.Reduce(time.Second * time.Duration(15*mage.t13ProcAura.GetStacks())) } }, diff --git a/sim/paladin/inquisition.go b/sim/paladin/inquisition.go index 052b964a1d..cf9727c89f 100644 --- a/sim/paladin/inquisition.go +++ b/sim/paladin/inquisition.go @@ -52,7 +52,7 @@ func (paladin *Paladin) registerInquisition() { ApplyEffects: func(sim *core.Simulation, _ *core.Unit, spell *core.Spell) { holyPower := paladin.GetHolyPowerValue() - if paladin.HasT11Ret4pc { + if paladin.T11Ret4pc.IsActive() { holyPower += 1 } diff --git a/sim/paladin/items.go b/sim/paladin/items.go index b5186bb39a..a7f5c17a87 100644 --- a/sim/paladin/items.go +++ b/sim/paladin/items.go @@ -20,17 +20,11 @@ var ItemSetReinforcedSapphiriumBattleplate = core.NewItemSet(core.ItemSet{ }) }, 4: func(agent core.Agent, setBonusAura *core.Aura) { - character := agent.(PaladinAgent).GetPaladin() - - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - character.HasT11Ret4pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - character.HasT11Ret4pc = false - }) + paladin := agent.(PaladinAgent).GetPaladin() // Handled in inquisition.go setBonusAura.ExposeToAPL(90299) + paladin.T11Ret4pc = setBonusAura }, }, }) diff --git a/sim/paladin/paladin.go b/sim/paladin/paladin.go index c4fe73891f..b82f2bf1e0 100644 --- a/sim/paladin/paladin.go +++ b/sim/paladin/paladin.go @@ -190,7 +190,7 @@ type Paladin struct { gurthalakTentacles []*cata.TentacleOfTheOldOnesPet // Item sets - HasT11Ret4pc bool + T11Ret4pc *core.Aura } func (paladin *Paladin) GetTentacles() []*cata.TentacleOfTheOldOnesPet { diff --git a/sim/shaman/chain_lightning.go b/sim/shaman/chain_lightning.go index 0c19124dd0..375427d1e9 100644 --- a/sim/shaman/chain_lightning.go +++ b/sim/shaman/chain_lightning.go @@ -35,7 +35,7 @@ func (shaman *Shaman) newChainLightningSpell(isElementalOverload bool) *core.Spe numHits = min(numHits, shaman.Env.GetNumTargets()) spellConfig.ApplyEffects = func(sim *core.Simulation, target *core.Unit, spell *core.Spell) { - bounceReduction := core.TernaryFloat64(shaman.HasDungeonSet3 && !isElementalOverload, 0.83, 0.7) + bounceReduction := core.TernaryFloat64(shaman.DungeonSet3.IsActive() && !isElementalOverload, 0.83, 0.7) baseDamage := shaman.CalcAndRollDamageRange(sim, 1.08800005913, 0.13300000131) curTarget := target diff --git a/sim/shaman/enhancement/lavalash.go b/sim/shaman/enhancement/lavalash.go index 3fe1fdac20..b76cc3800f 100644 --- a/sim/shaman/enhancement/lavalash.go +++ b/sim/shaman/enhancement/lavalash.go @@ -9,7 +9,7 @@ import ( ) func (enh *EnhancementShaman) getSearingFlamesMultiplier() float64 { - return enh.SearingFlamesMultiplier + core.TernaryFloat64(enh.HasT12Enh2pc, 0.05, 0) + return enh.SearingFlamesMultiplier + core.TernaryFloat64(enh.T12Enh2pc.IsActive(), 0.05, 0) } func (enh *EnhancementShaman) registerLavaLashSpell() { diff --git a/sim/shaman/items.go b/sim/shaman/items.go index 18b1772aa3..80d713dd81 100644 --- a/sim/shaman/items.go +++ b/sim/shaman/items.go @@ -18,12 +18,7 @@ var ItemSetTidefury = core.NewItemSet(core.ItemSet{ shaman := agent.(ShamanAgent).GetShaman() // Handled in chain_lightning.go - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasDungeonSet3 = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasDungeonSet3 = false - }) + shaman.DungeonSet3 = setBonusAura }, 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() @@ -162,12 +157,7 @@ var ItemSetVolcanicRegalia = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasT12Ele4pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasT12Ele4pc = false - }) + shaman.T12Ele4pc = setBonusAura }, }, }) @@ -309,12 +299,7 @@ var ItemSetVolcanicBattlegear = core.NewItemSet(core.ItemSet{ 2: func(agent core.Agent, setBonusAura *core.Aura) { // Implemented in lavalash.go shaman := agent.(ShamanAgent).GetShaman() - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasT12Enh2pc = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - shaman.HasT12Enh2pc = false - }) + shaman.T12Enh2pc = setBonusAura }, 4: func(agent core.Agent, setBonusAura *core.Aura) { shaman := agent.(ShamanAgent).GetShaman() diff --git a/sim/shaman/shaman.go b/sim/shaman/shaman.go index c3dd299df5..9f2f351706 100644 --- a/sim/shaman/shaman.go +++ b/sim/shaman/shaman.go @@ -178,9 +178,9 @@ type Shaman struct { useDragonSoul_2PT12 bool // Item sets - HasDungeonSet3 bool - HasT12Enh2pc bool - HasT12Ele4pc bool + DungeonSet3 *core.Aura + T12Enh2pc *core.Aura + T12Ele4pc *core.Aura } // Implemented by each Shaman spec. diff --git a/sim/shaman/talents.go b/sim/shaman/talents.go index cce7c2fd0b..e4c3c748c5 100644 --- a/sim/shaman/talents.go +++ b/sim/shaman/talents.go @@ -274,7 +274,7 @@ func (shaman *Shaman) applyLavaSurge() { OnAction: func(sim *core.Simulation) { shaman.LavaBurst.CD.Reset() - if shaman.HasT12Ele4pc { + if shaman.T12Ele4pc.IsActive() { shaman.VolcanicRegalia4PT12Aura.Activate(sim) } }, @@ -291,7 +291,7 @@ func (shaman *Shaman) applyLavaSurge() { } }, OnCastComplete: func(aura *core.Aura, sim *core.Simulation, spell *core.Spell) { - if spell.ClassSpellMask != SpellMaskLavaBurst || !shaman.HasT12Ele4pc { + if spell.ClassSpellMask != SpellMaskLavaBurst || !shaman.T12Ele4pc.IsActive() { return } //If volcano procs during LvB cast time, it is not consumed diff --git a/sim/warlock/items.go b/sim/warlock/items.go index 7b56f15e75..477f410113 100644 --- a/sim/warlock/items.go +++ b/sim/warlock/items.go @@ -257,12 +257,7 @@ var ItemSetVestmentsOfTheFacelessShroud = core.NewItemSet(core.ItemSet{ }, }) - setBonusAura.ApplyOnGain(func(aura *core.Aura, sim *core.Simulation) { - warlock.Has4pcT13 = true - }) - setBonusAura.ApplyOnExpire(func(aura *core.Aura, sim *core.Simulation) { - warlock.Has4pcT13 = false - }) + warlock.T13_4pc = setBonusAura }, }, }) diff --git a/sim/warlock/soul_fire.go b/sim/warlock/soul_fire.go index 61fd37bb1f..b1f37cbdd0 100644 --- a/sim/warlock/soul_fire.go +++ b/sim/warlock/soul_fire.go @@ -56,7 +56,7 @@ func (warlock *Warlock) registerSoulFire() { baseDamage := warlock.CalcAndRollDamageRange(sim, 2.54299998283, 0.22499999404) result := spell.CalcDamage(sim, target, baseDamage, spell.OutcomeMagicHitAndCrit) - if warlock.Has4pcT13 && warlock.SoulBurnAura.IsActive() { + if warlock.T13_4pc.IsActive() && warlock.SoulBurnAura.IsActive() { warlock.AddSoulShard() } diff --git a/sim/warlock/warlock.go b/sim/warlock/warlock.go index 00a4837daf..e1cd032862 100644 --- a/sim/warlock/warlock.go +++ b/sim/warlock/warlock.go @@ -41,7 +41,7 @@ type Warlock struct { SoulBurnAura *core.Aura // Item sets - Has4pcT13 bool + T13_4pc *core.Aura } func (warlock *Warlock) GetCharacter() *core.Character {