diff --git a/ConROC_Mage.toc b/ConROC_Mage.toc index cb59b07..8aacf67 100644 --- a/ConROC_Mage.toc +++ b/ConROC_Mage.toc @@ -1,6 +1,6 @@ ## Title:-|cffFFFFFFConROC|r- |cff69CCF0Mage|r -## Version: 1.15.0 -## Author: Vae, 1.15.0 updated by Lith +## Version: 1.15.1 +## Author: Vae, 1.15.1 updated by Lith ## Interface: 11500 ## SavedVariablesPerCharacter: ConROCMageSpells ## Dependencies: ConROC diff --git a/changes.txt b/changes.txt index f236ece..b0200f1 100644 --- a/changes.txt +++ b/changes.txt @@ -1,4 +1,7 @@ -Ver 2.0.2 +Ver 1.15.1 + -reworked SoD rotation, all specs. + -supported runes: Arcane Blast, Ice Lance, Icy Veins, Living Bomb & Living Flame +Ver 1.15.0 -Support for Classic -Started to add support for translations. Ver 1.13.4 diff --git a/mage.lua b/mage.lua index 628aab4..fcd8000 100644 --- a/mage.lua +++ b/mage.lua @@ -383,7 +383,7 @@ function ConROC.Mage.Damage(_, timeShift, currentSpell, gcd) local rmRegenRDY = ConROC:AbilityReady(_RuneMassRegeneration, timeShift); local rRegenRDY = ConROC:AbilityReady(_RuneRegeneration, timeShift); local rrTimeRDY = ConROC:AbilityReady(_RuneRewindTime, timeShift); - local rFoFBUFF, rFoFDUR = ConROC:BuffName(Player_Buff.FingersofFrost, timeShift); + local rFoFBUFF, rFoFCount, rFoFDUR = ConROC:UnitAura(Player_Buff.FingersofFrost, timeShift,'player', 'HELPFUL', false); --Conditions local inMelee = CheckInteractDistance("target", 3); @@ -394,13 +394,18 @@ function ConROC.Mage.Damage(_, timeShift, currentSpell, gcd) local resting = IsResting(); local mounted = IsMounted(); local onVehicle = UnitHasVehicleUI("player"); - + local tarInAoe = 0; + + if ConROC_AoEButton:IsVisible() and IsSpellKnown(_ArcaneExplosion) then + tarInAoe = ConROC:Targets(_ArcaneExplosion); + end + if onVehicle then return nil end --Indicators - ConROC:AbilityBurst(_Evocation, evoRDY and manaPercent <= 25); + ConROC:AbilityBurst(_Evocation, evoRDY and manaPercent <= 10); ConROC:AbilityBurst(_PresenceofMind, pomRDY and incombat); ConROC:AbilityBurst(_ArcanePower, aPowerRDY and incombat and (not ConROC:TalentChosen(Spec.Frost, Frost_Talent.WintersChill) or (ConROC:TalentChosen(Spec.Frost, Frost_Talent.WintersChill) and wChillCount == 5))) ; ConROC:AbilityBurst(_Combustion, combRDY and incombat and (not ConROC:TalentChosen(Spec.Fire, Fire_Talent.ImprovedScorch) or (ConROC:TalentChosen(Spec.Fire, Fire_Talent.ImprovedScorch) and fVuCount == 5))); @@ -419,70 +424,192 @@ function ConROC.Mage.Damage(_, timeShift, currentSpell, gcd) --print("IsSpellKnown(_RuneIceLance)",IsSpellKnown(_RuneIceLance)) --print("IsSpellKnownOrOverridesKnown(_RuneIceLance)",IsSpellKnownOrOverridesKnown(_RuneIceLance)) --print("ConROC.Seasons.IsSoD",ConROC.Seasons.IsSoD) - if ConROC:CheckBox(ConROC_SM_CD_Evocation) and evoRDY and manaPercent < 25 then + if ConROC:CheckBox(ConROC_SM_CD_Evocation) and evoRDY and manaPercent < 10 then return _Evocation; end - if ConROC.Seasons.IsSoD then --DPS rotation for SoD - if ConROC:CheckBox(ConROC_SM_Rune_IcyVeins) and riVeinsRDY then --and fBallRDY then - return _RuneIcyVeins; - end - if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then - return _RuneLivingBomb; - end - if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY and ConROC_AoEButton:IsVisible() then --and fBallRDY then - return _RuneLivingFlame; - end - if ConROC:CheckBox(ConROC_SM_Rune_ArcaneBlast) and raBlastRDY and raBlastCount < 4 then --and fBallRDY then - return _RuneArcaneBlast; - end - if ConROC:CheckBox(ConROC_SM_Rune_ArcaneSurge) and raSurgeRDY then --and fBallRDY then - return _RuneArcaneSurge; - end - if ConROC:CheckBox(ConROC_SM_Rune_IceLance) and riLanceRDY and (moving or rFoFBUFF) then --and fBallRDY then - return _RuneIceLance; - end - if ConROC:CheckBox(ConROC_SM_Rune_MassRegeneration) and rmRegenRDY then --and fBallRDY then - return _RuneMassRegeneration; - end - if ConROC:CheckBox(ConROC_SM_Rune_Regeneration) and rRegenRDY then --and fBallRDY then - return _RuneRegeneration; - end - if ConROC:CheckBox(ConROC_SM_Rune_RewindTime) and rrTimeRDY then --and fBallRDY then - return _RuneRewindTime; - end - if ConROC_AoEButton:IsVisible() then - if ConROC:CheckBox(ConROC_SM_AoE_ArcaneExplosion) and aExpRDY and inMelee then - return _ArcaneExplosion; + if plvl < 10 then + if ConROC:CheckBox(ConROC_SM_Rune_IcyVeins) and riVeinsRDY then + return _RuneIcyVeins; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY then + return _RuneLivingFlame; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then + return _RuneLivingBomb; + end + if ConROC:CheckBox(ConROC_SM_Rune_ArcaneBlast) and raBlastRDY and raBlastCount < ConROC_SM_Rune_ArcaneBlastCount:GetNumber() then + return _RuneArcaneBlast; + end + --[[if ConROC:CheckBox(ConROC_SM_Rune_ArcaneSurge) and raSurgeRDY then + return _RuneArcaneSurge; + end]] + if ConROC:CheckBox(ConROC_SM_Rune_IceLance) and riLanceRDY and (moving or rFoFCount > 1) then + return _RuneIceLance; + end + if ConROC:CheckBox(ConROC_SM_Rune_MassRegeneration) and rmRegenRDY then + return _RuneMassRegeneration; + end + if ConROC:CheckBox(ConROC_SM_Rune_Regeneration) and rRegenRDY then + return _RuneRegeneration; + end + if ConROC:CheckBox(ConROC_SM_Rune_RewindTime) and rrTimeRDY then + return _RuneRewindTime; + end + if ConROC_AoEButton:IsVisible() then + if ConROC:CheckBox(ConROC_SM_AoE_ArcaneExplosion) and aExpRDY and inMelee then + return _ArcaneExplosion; + end + + if ConROC:CheckBox(ConROC_SM_AoE_Flamestrike) and fStrikeRDY and not inMelee and fStrikeDUR <= 2 then + return _Flamestrike; + end + + if ConROC:CheckBox(ConROC_SM_AoE_Blizzard) and blizRDY and not inMelee then + return _Blizzard; + end + end + if fBlastRDY and (targetPh <= 25 or inMelee) and not ConROC_AoEButton:IsVisible() then + return _FireBlast; end - if ConROC:CheckBox(ConROC_SM_AoE_Flamestrike) and fStrikeRDY and not inMelee and fStrikeDUR <= 2 then - return _Flamestrike; - end + if ConROC:CheckBox(ConROC_SM_Filler_Frostbolt) and frBoltRDY and rFoFCount == 1 then + return _Frostbolt; + end + if ConROC:CheckBox(ConROC_SM_Rune_IceLance) and riLanceRDY and (moving or rFoFBUFF) then + return _RuneIceLance; + end - if ConROC:CheckBox(ConROC_SM_AoE_Blizzard) and blizRDY and not inMelee then - return _Blizzard; + if ConROC:CheckBox(ConROC_SM_Filler_Fireball) and fBallRDY then + return _Fireball; + end + if ConROC:CheckBox(ConROC_SM_Filler_ArcaneMissiles) and aMissRDY then + return _ArcaneMissiles; end + if ConROC:CheckBox(ConROC_SM_Filler_Frostbolt) and frBoltRDY then + return _Frostbolt; + end + if ConROC:CheckBox(ConROC_SM_Option_UseWand) and hasWand and ((manaPercent <= 10 and not evoRDY) or targetPh <= 5) then + return Caster.Shoot; + end + else + if (currentSpecName == "Arcane") then + if ConROC_AoEButton:IsVisible() then + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY then + return _RuneLivingFlame; + end + --[[if ConROC:CheckBox(ConROC_SM_Rune_ArcaneBlast) and raBlastRDY and raBlastCount < ConROC_SM_Rune_ArcaneBlastCount:GetNumber() then + return _RuneArcaneBlast; + end]] + if aExpRDY and inMelee then + return _ArcaneExplosion; + end + else + if aExpRDY and ((targetPh <= 25 and inMelee) or inMelee) then + return _ArcaneExplosion; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY then + return _RuneLivingFlame; + end + if ConROC:CheckBox(ConROC_SM_Rune_ArcaneBlast) and raBlastRDY and raBlastCount < ConROC_SM_Rune_ArcaneBlastCount:GetNumber() then + return _RuneArcaneBlast; + end + if ConROC:CheckBox(ConROC_SM_Filler_ArcaneMissiles) and aMissRDY then + return _ArcaneMissiles; + end + end + elseif (currentSpecName == "Fire") then + if ConROC_AoEButton:IsVisible() then + if aExpRDY and (targetPh <= 25 or inMelee) and tarInAoe > 2 then + return _ArcaneExplosion; + elseif fBlastRDY and (targetPh <= 25 or inMelee) then + return _FireBlast; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then + return _RuneLivingBomb; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY and ConROC_AoEButton:IsVisible() then + return _RuneLivingFlame; + end + if aExpRDY and inMelee then + return _ArcaneExplosion; + end + else + if pBlastRDY and not incombat then + return _Pyroblast + end + if aExpRDY and (targetPh <= 25 or inMelee) and tarInAoe > 2 then + return _ArcaneExplosion; + end + if fBlastRDY and (targetPh <= 25 or inMelee) then + return _FireBlast; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY then + return _RuneLivingFlame; + end + + if scorRDY and ConROC:TalentChosen(Spec.Fire, Fire_Talent.ImprovedScorch) and fVulCount < 5 then + return _Scorch; + end + + if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then + return _RuneLivingBomb; + end + + if fBallRDY then + return _Fireball; + end + if ConROC:CheckBox(ConROC_SM_Option_UseWand) and hasWand and ((manaPercent <= 10 and not evoRDY) or targetPh <= 5) then + return Caster.Shoot; + end + end + elseif (currentSpecName == "Frost") then + if ConROC_AoEButton:IsVisible() then + if aExpRDY and ((targetPh <= 25 and inMelee) or inMelee) then + return _ArcaneExplosion; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then + return _RuneLivingBomb; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingFlame) and rlFlameRDY and ConROC_AoEButton:IsVisible() then + return _RuneLivingFlame; + end + if blizRDY then + return _Blizzard + end + else + if aExpRDY and (targetPh <= 25 or inMelee) and tarInAoe > 2 then + return _ArcaneExplosion; + end + if fBlastRDY and (targetPh <= 25 or inMelee) then + return _FireBlast; + end + + if ConROC:CheckBox(ConROC_SM_Rune_IceLance) and riLanceRDY and (moving or rFoFCount > 1) then + return _RuneIceLance; + end + if ConROC:CheckBox(ConROC_SM_Rune_LivingBomb) and rlBombRDY and not rlBombDEBUFF and ((targetPh >= 5 and ConROC:Raidmob()) or (targetPh >= 20 and not ConROC:Raidmob())) then + return _RuneLivingBomb; + end + if ConROC:CheckBox(ConROC_SM_Rune_IcyVeins) and riVeinsRDY then + return _RuneIcyVeins; + end + if ConROC:CheckBox(ConROC_SM_Filler_Frostbolt) and frBoltRDY and rFoFCount == 1 then + return _Frostbolt; + end + if ConROC:CheckBox(ConROC_SM_Rune_IceLance) and riLanceRDY and (moving or rFoFBUFF) then + return _RuneIceLance; + end + if ConROC:CheckBox(ConROC_SM_Filler_Frostbolt) and frBoltRDY then + return _Frostbolt; + end + if ConROC:CheckBox(ConROC_SM_Option_UseWand) and hasWand and ((manaPercent <= 10 and not evoRDY) or targetPh <= 5) then + return Caster.Shoot; + end + end + end end - if fBlastRDY and (targetPh <= 25 or inMelee) and not ConROC_AoEButton:IsVisible() then - return _FireBlast; - end - if ConROC:CheckBox(ConROC_SM_Filler_Fireball) and fBallRDY then - return _Fireball; - end - if ConROC:CheckBox(ConROC_SM_Filler_ArcaneMissiles) and aMissRDY then - return _ArcaneMissiles; - end - if ConROC:CheckBox(ConROC_SM_Filler_Frostbolt) and frBoltRDY then - return _Frostbolt; - end - else --DPS rotation for Classic Era & Classic HC - - - if ConROC:CheckBox(ConROC_SM_CD_Evocation) and evoRDY and manaPercent < 25 then - return _Evocation; - end if pBlastRDY and (not incombat or pomBUFF) then return _Pyroblast; @@ -504,7 +631,7 @@ function ConROC.Mage.Damage(_, timeShift, currentSpell, gcd) return _FireBlast; end - if ConROC:CheckBox(ConROC_SM_Option_UseWand) and hasWand and ((manaPercent <= 20 and not evoRDY) or targetPh <= 5) then + if ConROC:CheckBox(ConROC_SM_Option_UseWand) and hasWand and ((manaPercent <= 10 and not evoRDY) or targetPh <= 5) then return Caster.Shoot; end diff --git a/mage_spellmenu.lua b/mage_spellmenu.lua index 8a03a2e..69d31f7 100644 --- a/mage_spellmenu.lua +++ b/mage_spellmenu.lua @@ -30,6 +30,8 @@ local defaults = { ["ConROC_Caster_AoE_Blizzard"] = true, ["ConROC_Caster_Option_UseWand"] = false, ["ConROC_Caster_Option_AoE"] = true, + ["ConROC_Caster_Rune_ArcaneBlastCount"] = 2, + ["ConROC_PvP_Rune_ArcaneBlastCount"] = 2, } ConROCMageSpells = ConROCMageSpells or defaults; @@ -121,7 +123,8 @@ function ConROC:SpellmenuClass() frameName = "Runes", spells = { {spellID = ids.optionMaxIds.RuneArcaneBlast, spellCheckbox = "Rune_ArcaneBlast", reqLevel = 1, type="rune"}, - {spellID = ids.optionMaxIds.RuneArcaneSurge, spellCheckbox = "Rune_ArcaneSurge", reqLevel = 1, type="rune"}, + {spellID = ids.optionMaxIds.RuneArcaneBlast, spellCheckbox = "Rune_ArcaneBlastCount", reqLevel = 1, type="textfield", icon=nil, customName="Number of Arcane Blast"}, + --{spellID = ids.optionMaxIds.RuneArcaneSurge, spellCheckbox = "Rune_ArcaneSurge", reqLevel = 1, type="rune"}, {spellID = ids.optionMaxIds.RuneIceLance, spellCheckbox = "Rune_IceLance", reqLevel = 1, type="rune"}, {spellID = ids.optionMaxIds.RuneIcyVeins, spellCheckbox = "Rune_IcyVeins", reqLevel = 1, type="rune"}, {spellID = ids.optionMaxIds.RuneLivingBomb, spellCheckbox = "Rune_LivingBomb", reqLevel = 1, type="rune"}, @@ -901,7 +904,7 @@ function ConROC:SpellMenuUpdate(newSpell) else oItem:SetPoint("TOPLEFT", lFrame, "BOTTOMLEFT", 0, 0); end - if plvl >= _spellData.reqLevel and IsSpellKnown(_spellData.spellID) then + if plvl >= _spellData.reqLevel and (IsSpellKnown(_spellData.spellID) or IsSpellKnownOrOverridesKnown(_spellData.spellID)) then lFrame = oItem; lFrame:Show(); if oItem:IsShown() then @@ -1052,4 +1055,4 @@ function ConROC:RoleProfile() ConROCToggleMover:Hide() end end -end \ No newline at end of file +end