Quantcast

Add new module to manage passive auras from class or item effects.

Johnny C. Lam [05-21-14 - 13:07]
Add new module to manage passive auras from class or item effects.

Manage the Readiness (cooldown reduction) passive, hidden buff from the
Siege of Ogrimmar trinkets that grants cooldown reduction based on role.

Add corresponding buffs to "ovale_items" script that match the SimC names
fo the same buffs and can be used to track whether the buff is active:

    cooldown_reduction_agility_buff
    cooldown_reduction_strength_buff
    cooldown_reduction_tank_buff

Add a new SpellInfo() parameter "buff_cdr=ID" that lists the spell ID of
the cooldown reduction buff that affects that spell.  Annotate spells
whose cooldowns are affected by the trinkets.

git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1477 d5049fe3-3747-40f7-a4b5-f36d6801af5f
Filename
Ovale.toc
OvaleCooldown.lua
OvalePassiveAura.lua
OvaleSimulationCraft.lua
scripts/ovale_deathknight_spells.lua
scripts/ovale_druid_spells.lua
scripts/ovale_hunter_spells.lua
scripts/ovale_items.lua
scripts/ovale_monk_spells.lua
scripts/ovale_paladin_spells.lua
scripts/ovale_rogue_spells.lua
scripts/ovale_shaman_spells.lua
diff --git a/Ovale.toc b/Ovale.toc
index 9790818..94324d5 100644
--- a/Ovale.toc
+++ b/Ovale.toc
@@ -59,6 +59,7 @@ OvaleBanditsGuile.lua
 OvaleDamageTaken.lua
 OvaleEclipse.lua
 OvaleEnemies.lua
+OvalePassiveAura.lua
 OvaleRecount.lua
 OvaleRunes.lua
 OvaleShadowWordDeath.lua
diff --git a/OvaleCooldown.lua b/OvaleCooldown.lua
index d41cbc1..18dc6d3 100644
--- a/OvaleCooldown.lua
+++ b/OvaleCooldown.lua
@@ -203,14 +203,23 @@ function OvaleCooldown:ApplySpellAfterCast(state, spellId, targetGUID, startCast
 			end
 		end

-		-- Adjust cooldown duration if it is affected by haste: "cd_haste=melee" or "cd_haste=spell".
-		if cd.duration > 0 and si.cd_haste then
-			if si.cd_haste == "melee" then
-				cd.duration = cd.duration / state:GetMeleeHasteMultiplier(spellcast.snapshot)
-			elseif si.haste == "ranged" then
-				cd.duration = cd.duration / OvalePaperDoll:GetSpellHasteMultiplier()
-			elseif si.cd_haste == "spell" then
-				cd.duration = cd.duration / state:GetSpellHasteMultiplier(spellcast.snapshot)
+		if cd.duration > 0 then
+			-- Adjust cooldown duration if it is affected by haste: "cd_haste=melee" or "cd_haste=spell".
+			if si.cd_haste then
+				if si.cd_haste == "melee" then
+					cd.duration = cd.duration / state:GetMeleeHasteMultiplier(spellcast.snapshot)
+				elseif si.haste == "ranged" then
+					cd.duration = cd.duration / OvalePaperDoll:GetSpellHasteMultiplier()
+				elseif si.cd_haste == "spell" then
+					cd.duration = cd.duration / state:GetSpellHasteMultiplier(spellcast.snapshot)
+				end
+			end
+			-- Adjust cooldown duration if it is affected by a cooldown reduction trinket: "buff_cdr=auraId".
+			if si.buff_cdr then
+				local aura = state:GetAura("player", si.buff_cdr)
+				if state:IsActiveAura(aura, cd.start) then
+					cd.duration = cd.duration / aura.value1
+				end
 			end
 		end

diff --git a/OvalePassiveAura.lua b/OvalePassiveAura.lua
new file mode 100644
index 0000000..9426fb3
--- /dev/null
+++ b/OvalePassiveAura.lua
@@ -0,0 +1,132 @@
+--[[--------------------------------------------------------------------
+    Ovale Spell Priority
+    Copyright (C) 2014 Johnny C. Lam
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License in the LICENSE
+    file accompanying this program.
+--]]-------------------------------------------------------------------
+
+local _, Ovale = ...
+local OvalePassiveAura = Ovale:NewModule("OvalePassiveAura", "AceEvent-3.0")
+Ovale.OvalePassiveAura = OvalePassiveAura
+
+--[[
+	This module manages passive, usually hidden, auras from various class and item effects.
+--]]
+
+--<private-static-properties>
+-- Forward declarations for module dependencies.
+local OvaleAura = nil
+local OvaleEquipement = nil
+local OvalePaperDoll = nil
+
+local exp = math.exp
+local log = math.log
+local API_GetTime = GetTime
+local API_UnitClass = UnitClass
+local API_UnitGUID = UnitGUID
+local INVSLOT_TRINKET1 = INVSLOT_TRINKET1
+local INVSLOT_TRINKET2 = INVSLOT_TRINKET2
+
+-- Player's class.
+local _, self_class = API_UnitClass("player")
+-- Player's GUID.
+local self_guid = nil
+
+-- Readiness (cooldown reduction) passive aura.
+local READINESS_AGILITY_DPS = 146019
+local READINESS_STRENGTH_DPS = 145955
+local READINESS_TANK = 146025
+local READINESS_TRINKET = {
+	[102292] = READINESS_AGILITY_DPS,	-- Assurance of Consequence
+	[104476] = READINESS_AGILITY_DPS,	-- Assurance of Consequence (Heroic)
+	[104725] = READINESS_AGILITY_DPS,	-- Assurance of Consequence (Flexible)
+	[104974] = READINESS_AGILITY_DPS,	-- Assurance of Consequence (Raid Finder)
+	[105223] = READINESS_AGILITY_DPS,	-- Assurance of Consequence (Warforged)
+	[105472] = READINESS_AGILITY_DPS,	-- Assurance of Consequence (Heroic Warforged)
+
+	[102298] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras
+	[104495] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras (Heroic)
+	[104744] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras (Flexible)
+	[104993] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras (Raid Finder)
+	[105242] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras (Warforged)
+	[105491] = READINESS_STRENGTH_DPS,	-- Evil Eye of Galakras (Heroic Warforged)
+
+	[102306] = READINESS_TANK,			-- Vial of Living Corruption
+	[104572] = READINESS_TANK,			-- Vial of Living Corruption (Heroic)
+	[104821] = READINESS_TANK,			-- Vial of Living Corruption (Flexible)
+	[105070] = READINESS_TANK,			-- Vial of Living Corruption (Raid Finder)
+	[105319] = READINESS_TANK,			-- Vial of Living Corruption (Warforged)
+	[105568] = READINESS_TANK,			-- Vial of Living Corruption (Heroic Warforged)
+}
+local READINESS_ROLE = {
+	DEATHKNIGHT = { blood = READINESS_TANK, frost = READINESS_STRENGTH_DPS, unholy = READINESS_STRENGTH_DPS },
+	DRUID = { feral = READINESS_AGILITY_DPS, guardian = READINESS_TANK },
+	HUNTER = { beast_mastery = READINESS_AGILITY_DPS, marksmanship = READINESS_AGILITY_DPS, survival = READINESS_AGILITY_DPS },
+	MONK = { brewmaster = READINESS_TANK, windwalker = READINESS_AGILITY_DPS },
+	PALADIN = { protection = READINESS_TANK, retribution = READINESS_STRENGTH_DPS },
+	ROGUE = { assassination = READINESS_AGILITY_DPS, combat = READINESS_AGILITY_DPS, subtlety = READINESS_AGILITY_DPS },
+	SHAMAN = { enhancement = READINESS_AGILITY_DPS },
+	WARRIOR = { arms = READINESS_STRENGTH_DPS, fury = READINESS_STRENGTH_DPS, protection = READINESS_TANK },
+}
+--</private-static-properties>
+
+--<public-static-methods>
+function OvalePassiveAura:OnInitialize()
+	-- Resolve module dependencies.
+	OvaleAura = Ovale.OvaleAura
+	OvaleEquipement = Ovale.OvaleEquipement
+	OvalePaperDoll = Ovale.OvalePaperDoll
+end
+
+function OvalePassiveAura:OnEnable()
+	self_guid = API_UnitGUID("player")
+	self:RegisterMessage("Ovale_EquipmentChanged")
+	self:RegisterMessage("Ovale_SpecializationChanged")
+end
+
+function OvalePassiveAura:OnDisable()
+	self:UnregisterMessage("Ovale_EquipmentChanged")
+	self:UnregisterMessage("Ovale_SpecializationChanged")
+end
+
+function OvalePassiveAura:Ovale_EquipmentChanged()
+	self:UpdateReadiness()
+end
+
+function OvalePassiveAura:Ovale_SpecializationChanged()
+	self:UpdateReadiness()
+end
+
+function OvalePassiveAura:UpdateReadiness()
+	local specialization = OvalePaperDoll:GetSpecialization()
+	local spellId = READINESS_ROLE[self_class] and READINESS_ROLE[self_class][specialization]
+	if spellId then
+		-- Check a Readiness trinket is equipped and for the correct role.
+		local slot = INVSLOT_TRINKET1
+		local trinket = OvaleEquipement:GetEquippedItem(slot)
+		local readiness = trinket and READINESS_TRINKET[trinket]
+		if not readiness then
+			slot = INVSLOT_TRINKET2
+			trinket = OvaleEquipement:GetEquippedItem(slot)
+			readiness = trinket and READINESS_TRINKET[trinket]
+		end
+		local now = API_GetTime()
+		if readiness == spellId then
+			local name = "Readiness"
+			local start = now
+			local duration = math.huge
+			local ending = math.huge
+			local stacks = 1
+			-- Use a derived formula that very closely approximates the true cooldown recovery rate increase based on item level.
+			local ilevel = OvaleEquipement:GetEquippedItemLevel(slot)
+			local cdRecoveryRateIncrease = exp((ilevel - 528) * 0.009317881032 + 3.434954478)
+			local value = 1 / (1 + cdRecoveryRateIncrease / 100)
+			OvaleAura:GainedAuraOnGUID(self_guid, start, spellId, self_guid, "HELPFUL", nil, nil, stacks, nil, duration, ending, nil, name, value, nil, nil)
+		else
+			OvaleAura:LostAuraOnGUID(self_guid, now, spellId, self_guid)
+		end
+	end
+end
+--</public-static-methods>
diff --git a/OvaleSimulationCraft.lua b/OvaleSimulationCraft.lua
index c632fee..6d18f48 100644
--- a/OvaleSimulationCraft.lua
+++ b/OvaleSimulationCraft.lua
@@ -353,6 +353,14 @@ do
 				["rain_of_fire"] = "rain_of_fire_aftermath",
 			},
 		},
+		warrior = {
+			arms = {
+				["cooldown_reduction"] = "cooldown_reduction_strength",
+			},
+			fury = {
+				["cooldown_reduction"] = "cooldown_reduction_strength",
+			},
+		}
 	}

 	function OvaleSimulationCraft:Name(name)
diff --git a/scripts/ovale_deathknight_spells.lua b/scripts/ovale_deathknight_spells.lua
index 2c5f351..f1fe464 100644
--- a/scripts/ovale_deathknight_spells.lua
+++ b/scripts/ovale_deathknight_spells.lua
@@ -9,8 +9,13 @@ do

 Define(antimagic_shell 48707)
 	SpellInfo(antimagic_shell cd=45)
+	SpellInfo(antimagic_shell buff_cdr=cooldown_reduction_strength_buff mastery=frost)
+	SpellInfo(antimagic_shell buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
+	SpellInfo(antimagic_shell buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 Define(army_of_the_dead 42650)
 	SpellInfo(army_of_the_dead blood=1 frost=1 unholy=1 cd=600)
+	SpellInfo(army_of_the_dead buff_cdr=cooldown_reduction_strength_buff mastery=frost)
+	SpellInfo(army_of_the_dead buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
 	SpellAddBuff(army_of_the_dead army_of_the_dead_buff=1)
 Define(army_of_the_dead_buff 42650)
 	SpellInfo(army_of_the_dead_buff duration=40)
@@ -32,6 +37,7 @@ Define(blood_tap 45529)
 Define(blood_tap_talent 13)
 Define(bone_shield 49222)
 	SpellInfo(bone_shield cd=60)
+	SpellInfo(bone_shield buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 	SpellAddBuff(bone_shield bone_shield_buff=1)
 Define(bone_shield_buff 49222)
 	SpellInfo(bone_shield_buff duration=300)
@@ -40,6 +46,7 @@ Define(crimson_scourge_buff 81141)
 	SpellInfo(crimson_scourge_buff duration=15)
 Define(dancing_rune_weapon 49028)
 	SpellInfo(dancing_rune_weapon cd=90)
+	SpellInfo(dancing_rune_weapon buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 	SpellAddBuff(dancing_rune_weapon dancing_rune_weapon_buff=1)
 Define(dancing_rune_weapon_buff 81256)
 	SpellInfo(dancing_rune_weapon_buff duration=12)
@@ -74,6 +81,7 @@ Define(death_strike 49998)
 Define(ebon_plaguebringer 51160)
 Define(empower_rune_weapon 47568)
 	SpellInfo(empower_rune_weapon cd=300 runicpower=-25)
+	SpellInfo(empower_rune_weapon buff_cdr=cooldown_reduction_strength_buff mastery=frost)
 Define(festering_strike 85948)
 	SpellInfo(festering_strike blood=1 frost=1)
 Define(frost_fever_debuff 55095)
@@ -101,6 +109,9 @@ Define(howling_blast 49184)
 Define(icebound_fortitude 48792)
 	SpellInfo(icebound_fortitude cd=180)
 	SpellInfo(icebound_fortitude cd=90 glyph=glyph_of_icebound_fortitude)
+	SpellInfo(icebound_fortitude buff_cdr=cooldown_reduction_strength_buff mastery=frost)
+	SpellInfo(icebound_fortitude buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
+	SpellInfo(icebound_fortitude buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 	SpellAddBuff(icebound_fortitude icebound_fortitude_buff=1)
 Define(icebound_fortitude_buff 48792)
 	SpellInfo(icebound_fortitude_buff duration=12)
@@ -124,11 +135,15 @@ Define(obliterate 49020)
 Define(outbreak 77575)
 	SpellInfo(outbreak cd=60 glyph=!glyph_of_outbreak)
 	SpellInfo(outbreak runicpower=30 glyph=glyph_of_outbreak)
+	SpellInfo(outbreak buff_cdr=cooldown_reduction_strength_buff mastery=frost)
+	SpellInfo(outbreak buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
+	SpellInfo(outbreak buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 	SpellAddTargetDebuff(outbreak blood_plague_debuff=1 frost_fever_debuff=1)
 Define(pestilence 50842)
 	SpellInfo(pestilence blood=1)
 Define(pillar_of_frost 51271)
 	SpellInfo(pillar_of_frost cd=60 frost=1)
+	SpellInfo(pillar_of_frost buff_cdr=cooldown_reduction_strength_buff mastery=frost)
 	SpellAddBuff(pillar_of_frost pillar_of_frost_buff=1)
 Define(pillar_of_frost_buff 51271)
 	SpellInfo(pillar_of_frost duration=20)
@@ -179,15 +194,18 @@ Define(sudden_doom_buff 81340)
 	SpellInfo(sudden_doom_buff duration=10)
 Define(summon_gargoyle 49206)
 	SpellInfo(summon_gargoyle cd=180)
+	SpellInfo(summon_gargoyle buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
 Define(unholy_blight 115989)
 	SpellInfo(unholy_blight cd=90)
 Define(unholy_blight_talent 3)
 Define(unholy_frenzy 49016)
 	SpellInfo(unholy_frenzy cd=180)
+	SpellInfo(unholy_frenzy buff_cdr=cooldown_reduction_strength_buff mastery=unholy)
 Define(unholy_presence 48265)
 Define(vampiric_blood 55233)
 	SpellInfo(vampiric_blood cd=60)
 	SpellInfo(vampiric_blood addcd=-10 itemset=T14_tank itemcount=2)
+	SpellInfo(vampiric_blood buff_cdr=cooldown_reduction_tank_buff mastery=blood)
 	SpellAddBuff(vampiric_blood vampiric_blood_buff=1)
 Define(vampiric_blood_buff 55233)
 	SpellInfo(vampiric_blood_buff duration=10)
diff --git a/scripts/ovale_druid_spells.lua b/scripts/ovale_druid_spells.lua
index c9d2416..426e98c 100644
--- a/scripts/ovale_druid_spells.lua
+++ b/scripts/ovale_druid_spells.lua
@@ -9,16 +9,20 @@ do

 Define(barkskin 22812)
 	SpellInfo(barkskin cd=60)
+	SpellInfo(barkskin buff_cdr=cooldown_reduction_agility_buff mastery=feral)
+	SpellInfo(barkskin buff_cdr=cooldown_reduction_tank_buff mastery=guardian)
 	SpellInfo(barkskin addcd=-15 if_spell=malfurions_gift)
 Define(bear_form 5487)
 	SpellInfo(bear_form rage=-10)
 Define(berserk_bear 50334)
 	SpellInfo(berserk_bear cd=180)
+	SpellInfo(berserk_bear buff_cdr=cooldown_reduction_tank_buff mastery=guardian)
 	SpellAddBuff(berserk_bear berserk_bear_buff=1)
 Define(berserk_bear_buff 50334)
 	SpellInfo(berserk_bear_buff duration=10)
 Define(berserk_cat 106951)
 	SpellInfo(berserk_cat cd=180)
+	SpellInfo(berserk_cat buff_cdr=cooldown_reduction_agility_buff mastery=feral)
 	SpellAddBuff(berserk_cat berserk_cat_buff=1)
 Define(berserk_cat_buff 106951)
 	SpellInfo(berserk_cat duration=15)
@@ -36,6 +40,7 @@ Define(chosen_of_elune_buff 102560)
 Define(dash 1850)
 	SpellInfo(dash cd=180)
 	SpellInfo(dash addcd=-60 glyph=glyph_of_dash)
+	SpellInfo(dash buff_cdr=cooldown_reduction_agility_buff mastery=feral)
 Define(displacer_beast 102280)
 	SpellInfo(displacer_beast cd=30)
 Define(displacer_beast_talent 2)
@@ -163,6 +168,7 @@ Define(might_of_ursoc 106922)
 	SpellInfo(might_of_ursoc cd=180)
 	SpellInfo(might_of_ursoc addcd=120 glyph=glyph_of_might_of_ursoc)
 	SpellInfo(might_of_ursoc addcd=-60 itemset=T14_tank itemcount=2)
+	SpellInfo(might_of_ursoc buff_cdr=cooldown_reduction_tank_buff mastery=guardian)
 Define(mighty_bash 5211)
 	SpellInfo(mighty_bash cd=50)
 Define(mighty_bash_talent 15)
@@ -310,6 +316,8 @@ Define(sunfire_debuff 93402)
 Define(survival_instincts 61336)
 	SpellInfo(survival_instincts cd=180)
 	SpellInfo(survival_instincts addcd=-60 glyph=glyph_of_survival_instincts)
+	SpellInfo(survival_instincts buff_cdr=cooldown_reduction_agility_buff mastery=feral)
+	SpellInfo(survival_instincts buff_cdr=cooldown_reduction_tank_buff mastery=guardian)
 	SpellAddBuff(survival_instincts survival_instincts=1)
 Define(swiftmend 18562)
 	SpellInfo(swiftmend cd=15)
@@ -340,6 +348,7 @@ Define(thrash_cat_debuff 106830)
 	SpellInfo(thrash_cat_debuff duration=15 tick=3 physical=1)
 Define(tigers_fury 5217)
 	SpellInfo(tigers_fury cd=30 energy=-60)
+	SpellInfo(tigers_fury buff_cdr=cooldown_reduction_agility_buff mastery=feral)
 	SpellAddBuff(tigers_fury tigers_fury_buff=1)
 Define(tigers_fury_buff 5217)
 	SpellInfo(tigers_fury duration=6)
diff --git a/scripts/ovale_hunter_spells.lua b/scripts/ovale_hunter_spells.lua
index fa61563..51ff901 100644
--- a/scripts/ovale_hunter_spells.lua
+++ b/scripts/ovale_hunter_spells.lua
@@ -37,10 +37,12 @@ Define(beast_within_buff 34471)
 	SpellInfo(beast_within_buff addduration=6 itemset=T14 itemcount=4)
 Define(bestial_wrath 19574)
 	SpellInfo(bestial_wrath cd=60)
+	SpellInfo(bestial_wrath buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(bestial_wrath beast_within_buff=1)
 Define(black_arrow 3674)
 	SpellInfo(black_arrow cd=30 focus=35)
 	SpellInfo(black_arrow addcd=-6 if_spell=trap_mastery)
+	SpellInfo(black_arrow buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddTargetDebuff(black_arrow black_arrow_debuff=1)
 Define(black_arrow_debuff 3674)
 	SpellInfo(black_arrow_debuff duration=20 tick=2)
@@ -64,6 +66,7 @@ Define(dire_beast_talent 11)
 Define(disengage 781)
 	SpellInfo(disengage cd=20)
 	SpellInfo(disengage addcd=-10 talent=crouching_tiger_hidden_chimera_talent)
+	SpellInfo(disengage buff_cdr=cooldown_reduction_agility_buff)
 Define(explosive_shot 53301)
 	SpellInfo(explosive_shot cd=6 focus=25)
 	SpellInfo(explosive_shot buffnocd=lock_and_load_buff buff_focus_none=lock_and_load_buff if_spell=lock_and_load)
@@ -125,6 +128,7 @@ Define(powershot_talent 17)
 Define(pre_steady_focus_buff 53224)
 Define(rapid_fire 3045)
 	SpellInfo(rapid_fire cd=180)
+	SpellInfo(rapid_fire buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(rapid_fire rapid_fire_buff=1)
 Define(rapid_fire_buff 3045)
 	SpellInfo(rapid_fire_buff duration=15)
@@ -140,8 +144,10 @@ Define(serpent_sting_debuff 118253)
 	SpellInfo(serpent_sting_debuff duration=15 tick=3)
 Define(silencing_shot 34490)
 	SpellInfo(silencing_shot cd=24)
+	SpellInfo(silencing_shot buff_cdr=cooldown_reduction_agility_buff)
 Define(stampede 121818)
 	SpellInfo(stampede cd=300)
+	SpellInfo(stampede buff_cdr=cooldown_reduction_agility_buff)
 Define(stampede_buff 121818)
 Define(steady_focus 53224)
 Define(steady_focus_buff 53220)
diff --git a/scripts/ovale_items.lua b/scripts/ovale_items.lua
index e45fbf2..41b56b8 100644
--- a/scripts/ovale_items.lua
+++ b/scripts/ovale_items.lua
@@ -60,6 +60,11 @@ SpellList(trinket_stacking_proc_strength_buff 138759 138870)
 # Critical Strike
 SpellList(trinket_stacking_stat_crit_buff 146285)

+# Cooldown reduction trinket passive buffs.
+Define(cooldown_reduction_agility_buff 146019)
+Define(cooldown_reduction_strength_buff 145955)
+Define(cooldown_reduction_tank_buff 146025)
+
 AddCheckBox(opt_use_trinket0 "Use trinket 0" default)
 AddCheckBox(opt_use_trinket1 "Use trinket 1" default)

diff --git a/scripts/ovale_monk_spells.lua b/scripts/ovale_monk_spells.lua
index 0d9487d..b827fb3 100644
--- a/scripts/ovale_monk_spells.lua
+++ b/scripts/ovale_monk_spells.lua
@@ -49,6 +49,7 @@ Define(elusive_brew_use 115308)
 	SpellAddBuff(elusive_brew_use elusive_brew_buff=0)
 Define(energizing_brew 115288)
 	SpellInfo(energizing_brew cd=60)
+	SpellInfo(energizing_brew buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(energizing_brew energizing_brew_buff=1)
 Define(energizing_brew_buff 115288)
 	SpellInfo(energizing_brew_buff duration=6 tick=1)
@@ -65,10 +66,13 @@ Define(fists_of_fury 113656)
 	SpellInfo(fists_of_fury channel=4 cd=25 chi=3)
 	SpellInfo(fists_of_fury addcd=-5 itemset=T14_melee itemcount=2)
 	SpellInfo(fists_of_fury buff_chi=focus_of_xuen_buff buff_chi_amount=-1 itemset=T16_melee itemcount=4)
+	SpellInfo(fists_of_fury buff_cdr=cooldown_reduction_agility_buff)
 Define(focus_of_xuen_buff 145024)
 	SpellInfo(focus_of_xuen_buff duration=10)
 Define(fortifying_brew 115203)
 	SpellInfo(fortifying_brew cd=180)
+	SpellInfo(fortifying_brew buff_cdr=cooldown_reduction_agility_buff mastery=windwalker)
+	SpellInfo(fortifying_brew buff_cdr=cooldown_reduction_tank_buff mastery=brewmaster)
 #Define(fortifying_brew_glyphed 120954)
 Define(glyph_of_guard 123401)
 Define(glyph_of_mana_tea 123763)
@@ -76,6 +80,7 @@ Define(glyph_of_surging_mist 120483)
 Define(glyph_of_touch_of_death 123391)
 Define(guard 115295)
 	SpellInfo(guard cd=30 chi=2)
+	SpellInfo(guard buff_cdr=cooldown_reduction_tank_buff)
 	SpellAddBuff(guard guard_buff=1 power_guard_buff=0)
 Define(guard_buff 115295)
 	SpellInfo(guard_buff duration=30)
@@ -203,6 +208,8 @@ Define(vital_mists_buff 118674)
 	SpellInfo(vital_mists_buff duration=30)
 Define(zen_meditation 115176)
 	SpellInfo(zen_meditation cd=180)
+	SpellInfo(zen_meditation buff_cdr=cooldown_reduction_agility_buff mastery=windwalker)
+	SpellInfo(zen_meditation buff_cdr=cooldown_reduction_tank_buff mastery=brewmaster)
 Define(zen_sphere 124081)
 	SpellInfo(zen_sphere cd=10)
 	SpellAddTargetBuff(zen_sphere zen_sphere_buff=1)
diff --git a/scripts/ovale_paladin_spells.lua b/scripts/ovale_paladin_spells.lua
index eae0af8..ee5098f 100644
--- a/scripts/ovale_paladin_spells.lua
+++ b/scripts/ovale_paladin_spells.lua
@@ -12,6 +12,7 @@ Define(ancient_power_buff 86700)
 Define(ardent_defender 31850)
 	SpellInfo(ardent_defender cd=180)
 	SpellInfo(ardent_defender addcd=-60 itemset=T14_tank itemcount=2)
+	SpellInfo(ardent_defender buff_cdr=cooldown_reduction_tank_buff)
 Define(avengers_shield 31935)
 	SpellInfo(avengers_shield holy=0 buff_holy=grand_crusader_buff cd=15)
 	SpellInfo(avengers_shield cd_haste=melee if_spell=sanctity_of_battle)
@@ -19,6 +20,8 @@ Define(avengers_shield 31935)
 Define(avenging_wrath 31884)
 	SpellInfo(avenging_wrath cd=180)
 	SpellInfo(avenging_wrath addcd=-65 itemset=T14_melee itemcount=4)
+	SpellInfo(avenging_wrath buff_cdr=cooldown_reduction_strength_buff mastery=retribution)
+	SpellInfo(avenging_wrath buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 	SpellAddBuff(avenging_wrath avenging_wrath_buff=1)
 Define(avenging_wrath_buff 31884)
 	SpellInfo(avenging_wrath_buff duration=20)
@@ -64,12 +67,16 @@ Define(divine_plea 54428)
 Define(divine_protection 498)
 	SpellInfo(divine_protection cd=60)
 	SpellInfo(divine_protection cd=30 talent=unbreakable_spirit_talent)
+	SpellInfo(divine_protection buff_cdr=cooldown_reduction_strength_buff mastery=retribution)
+	SpellInfo(divine_protection buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 Define(divine_purpose_buff 90174)
 	SpellInfo(divine_purpose_buff duration=8)
 Define(divine_purpose_talent 15)
 Define(divine_shield 642)
 	SpellInfo(divine_shield cd=300)
 	SpellInfo(divine_shield cd=150 talent=unbreakable_spirit_talent)
+	SpellInfo(divine_shield buff_cdr=cooldown_reduction_strength_buff mastery=retribution)
+	SpellInfo(divine_shield buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 	SpellAddDebuff(divine_shield forbearance_debuff=1)
 Define(divine_storm 53385)
 	SpellInfo(divine_storm holy=3)
@@ -114,8 +121,10 @@ Define(guardian_of_ancient_kings_heal 86669)
 	SpellInfo(guardian_of_ancient_kings_heal cd=180)
 Define(guardian_of_ancient_kings_tank 86659)
 	SpellInfo(guardian_of_ancient_kings_tank cd=180)
+	SpellInfo(guardian_of_ancient_kings_tank buff_cdr=cooldown_reduction_tank_buff)
 Define(guardian_of_ancient_kings_melee 86698)
 	SpellInfo(guardian_of_ancient_kings_melee cd=180)
+	SpellInfo(guardian_of_ancient_kings_melee buff_cdr=cooldown_reduction_strength_buff)
 Define(hammer_of_justice 853)
 	SpellInfo(hammer_of_justice cd=60)
 Define(hammer_of_the_righteous 53595)
@@ -127,8 +136,11 @@ Define(hammer_of_wrath 24275)
 	SpellInfo(hammer_of_wrath holy=-1 mastery=retribution)
 Define(hand_of_freedom 1044)
 	SpellInfo(hand_of_freedom cd=25)
+	SpellInfo(hand_of_freedom buff_cdr=cooldown_reduction_strength_buff mastery=retribution)
 Define(hand_of_protection 1022)
 	SpellInfo(hand_of_protection cd=300)
+	SpellInfo(hand_of_protection buff_cdr=cooldown_reduction_strength_buff mastery=retribution)
+	SpellInfo(hand_of_protection buff_cdr=cooldown_reduction_tank_buff mastery=protection)
 	SpellAddTargetDebuff(hand_of_protection forbearance_debuff=1)
 Define(holy_avenger 105809)
 	SpellInfo(holy_avenger cd=120)
diff --git a/scripts/ovale_rogue_spells.lua b/scripts/ovale_rogue_spells.lua
index e9c5534..ddb8b94 100644
--- a/scripts/ovale_rogue_spells.lua
+++ b/scripts/ovale_rogue_spells.lua
@@ -9,6 +9,7 @@ do

 Define(adrenaline_rush 13750)
 	SpellInfo(adrenaline_rush cd=180)
+	SpellInfo(adrenaline_rush buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(adrenaline_rush adrenaline_rush_buff=1)
 Define(adrenaline_rush_buff 13750)
 	SpellInfo(adrenaline_rush_buff duration=15)
@@ -48,6 +49,7 @@ Define(cheap_shot 1833)
 	SpellAddTargetDebuff(cheap_shot find_weakness_debuff=1 if_spell=find_weakness)
 Define(cloak_of_shadows 31224)
 	SpellInfo(cloak_of_shadows cd=60)
+	SpellInfo(cloak_of_shadows buff_cdr=cooldown_reduction_agility_buff)
 Define(crimson_tempest 121411)
 	SpellInfo(crimson_tempest combo=finisher energy=35)
 	SpellInfo(crimson_tempest buff_energy_less15=shadow_blades_buff if_spell=shadow_blades itemset=T15_melee itemcount=4)
@@ -121,6 +123,7 @@ Define(kidney_shot 408)
 	SpellAddBuff(kidney_shot anticipation_buff=0 if_spell=anticipation)
 Define(killing_spree 51690)
 	SpellInfo(killing_spree cd=120)
+	SpellInfo(killing_spree buff_cdr=cooldown_reduction_agility_buff)
 Define(leeching_poison 108211)
 	SpellAddBuff(leeching_poison leeching_poison_buff=1)
 Define(leeching_poison_buff 108211)
@@ -174,12 +177,14 @@ Define(rupture_debuff 1943)
 Define(seal_fate 14190)
 Define(shadow_blades 121471)
 	SpellInfo(shadow_blades cd=180)
+	SpellInfo(shadow_blades buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(shadow_blades shadow_blades_buff=1)
 Define(shadow_blades_buff 121471)
 	SpellInfo(shadow_blades_buff duration=12)
 	SpellInfo(shadow_blades_buff addduration=12 itemset=T14 itemcount=4)
 Define(shadow_dance 51713)
 	SpellInfo(shadow_dance cd=60)
+	SpellInfo(shadow_dance buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(shadow_dance shadow_dance_buff=1)
 Define(shadow_dance_buff 51713)
 	SpellInfo(shadow_dance_buff duration=8)
@@ -220,12 +225,15 @@ Define(tricks_of_the_trade 57934)
 	SpellInfo(tricks_of_the_trade buff_energy_less75=stealth_buff if_spell=shadow_focus)
 Define(vanish 1856)
 	SpellInfo(vanish cd=120)
+	SpellInfo(vanish buff_cdr=cooldown_reduction_agility_buff mastery=assassination)
+	SpellInfo(vanish buff_cdr=cooldown_reduction_agility_buff mastery=subtlety)
 	SpellAddBuff(vanish vanish_buff=1)
 Define(vanish_buff 11327)
 	SpellInfo(vanish_buff duration=3)
 	SpellInfo(vanish_buff addduration=2 glyph=glyph_of_vanish)
 Define(vendetta 79140)
 	SpellInfo(vendetta cd=120)
+	SpellInfo(vendetta buff_cdr=cooldown_reduction_agility_buff)
 Define(wound_poison 8679)
 	SpellAddBuff(wound_poison wound_poison_buff=1)
 Define(wound_poison_buff 8679)
diff --git a/scripts/ovale_shaman_spells.lua b/scripts/ovale_shaman_spells.lua
index 246a664..eb94990 100644
--- a/scripts/ovale_shaman_spells.lua
+++ b/scripts/ovale_shaman_spells.lua
@@ -27,6 +27,7 @@ Define(ascendance_heal_buff 114052)
 	SpellInfo(ascendance_heal_buff duration=15)
 Define(ascendance_melee 114051)
 	SpellInfo(ascendance_melee cd=180)
+	SpellInfo(ascendance_melee buff_cdr=cooldown_reduction_agility_buff)
 	SpellAddBuff(ascendance_melee ascendance_melee_buff=1)
 Define(ascendance_melee_buff 114051)
 	SpellInfo(ascendance_melee_buff duration=15)
@@ -47,6 +48,7 @@ Define(chain_lightning 421)
 	SpellAddBuff(chain_lightning ancestral_swiftness_buff=0 if_talent=ancestral_swiftness_talent)
 Define(earth_elemental_totem 2062)
 	SpellInfo(earth_elemental_totem cd=300)
+	SpellInfo(earth_elemental_totem buff_cdr=cooldown_reduction_agility_buff mastery=enhancement)
 Define(earth_shield 974)
 	SpellAddTargetBuff(earth_shield earth_shield_buff=1)
 Define(earth_shield_buff 974)
@@ -73,9 +75,11 @@ Define(elemental_mastery_buff 16166)
 Define(elemental_mastery_talent 10)
 Define(feral_spirit 51533)
 	SpellInfo(feral_spirit cd=120)
+	SpellInfo(feral_spirit buff_cdr=cooldown_reduction_agility_buff)
 Define(fire_elemental_totem 2894)
 	SpellInfo(fire_elemental_totem cd=300)
 	SpellInfo(fire_elemental_totem cd=150 glyph=glyph_of_fire_elemental_totem)
+	SpellInfo(fire_elemental_totem buff_cdr=cooldown_reduction_agility_buff mastery=enhancement)
 Define(fire_nova 1535)
 	SpellInfo(fire_nova cd=4)
 Define(flame_shock 8050)
@@ -141,6 +145,7 @@ Define(riptide_buff 61295)
 Define(searing_totem 3599)
 Define(shamanistic_rage 30823)
 	SpellInfo(shamanistic_rage cd=60)
+	SpellInfo(shamanistic_rage buff_cdr=cooldown_reduction_agility_buff mastery=enhancement)
 Define(spirit_link_totem 98008)
 	SpellInfo(spirit_link_totem cd=180)
 Define(spirit_walk 58875)
@@ -148,6 +153,7 @@ Define(spirit_walk 58875)
 	SpellInfo(spirit_walk addcd=-15 glyph=glyph_of_spirit_walk)
 Define(spiritwalkers_grace 79206)
 	SpellInfo(spiritwalkers_grace cd=120)
+	SpellInfo(spiritwalkers_grace buff_cdr=cooldown_reduction_agility_buff mastery=enhancement)
 Define(stone_bulwark_totem 108270)
 	SpellInfo(stone_bulwark_totem cd=10)
 Define(stone_bulwark_totem_talent 2)