695 lines
24 KiB
Lua
695 lines
24 KiB
Lua
--DISPLAY EVERY FRAME SMH
|
|
function()
|
|
--- CPU benchmarking ---
|
|
local start
|
|
local aura_env = aura_env
|
|
local Debug = aura_env.Debug
|
|
if Debug then
|
|
aura_env.count = aura_env.count or 1
|
|
aura_env.count = (aura_env.count + 1) % 600
|
|
start = debugprofilestop()
|
|
end
|
|
|
|
-- Setting some aura_env to local variables to improve performance --
|
|
local ClassID = aura_env.ClassID
|
|
local SpecID = aura_env.SpecID
|
|
local AoE = aura_env.AoE
|
|
local Mode = aura_env.Mode
|
|
local ColorFunction = aura_env.Color
|
|
local Threshold = aura_env.Threshold
|
|
local BasicReductions = aura_env.BasicReductions
|
|
|
|
-- Armor calulation // Armor scales differently depending on the enemy level, this makes sure is stays accurate --
|
|
local Armor = select(2, UnitArmor("player"))
|
|
Armor = 1 - C_PaperDollInfo.GetArmorEffectiveness(Armor, aura_env.TargetLevel) -- Gets the reduction percentage and makes it usable
|
|
|
|
-- All Classes
|
|
local CurrentHealth = UnitHealth("player")
|
|
local MaxHealth = UnitHealthMax("player")
|
|
local Vers = 1 - (GetCombatRatingBonus(31) / 100)
|
|
local Avoid = 1
|
|
local ScanTarget = false
|
|
if AoE then
|
|
Avoid = 1 - (GetAvoidance() / 100)
|
|
end
|
|
local Elusive = 1
|
|
local StaggerP, StaggerM = 1, 1
|
|
local Absorbs = UnitGetTotalAbsorbs("player")
|
|
local AbsorbsP, AbsorbsM = Absorbs, Absorbs
|
|
|
|
-- Initialize some variables --
|
|
local ClassDRP, ClassDRM = 1, 1
|
|
local PImmunity, MImmunity = 0, 0
|
|
|
|
----- General damage reduction buffs -----
|
|
local n = 1
|
|
local BuffID = select(10, UnitBuff("player", n))
|
|
while BuffID do
|
|
local Reduction = 1
|
|
local PhysicalReduction = 1
|
|
local MagicReduction = 1
|
|
|
|
if BasicReductions[BuffID] then
|
|
ClassDRP = ClassDRP * BasicReductions[BuffID][1]
|
|
ClassDRM = ClassDRM * BasicReductions[BuffID][2]
|
|
end
|
|
|
|
---- More complex tracking ----
|
|
|
|
local AMS, BloodS = 0, 0
|
|
|
|
--- Death Knight ---
|
|
if BuffID == 48792 then
|
|
Reduction = 1 + (tonumber(select(18, UnitBuff("player", n)) or 0)) / 100 -- Icebound Fortitude // using plus since the tooltip returns a negative value
|
|
|
|
elseif BuffID == 48707 then
|
|
AMS = (select(16, UnitBuff("player", n)) or 0) -- Anti-Magic Shell
|
|
|
|
elseif BuffID == 77535 then
|
|
BloodS = (select(16, UnitBuff("player", n)) or 0) -- Blood Shield
|
|
|
|
--- Demon Hunter ---
|
|
elseif BuffID == 212800 then
|
|
if IsPlayerSpell(205411) then Reduction = 0.50 -- Blur
|
|
else Reduction = 0.65 end
|
|
|
|
elseif BuffID == 196555 then PImmunity = 1 -- Netherwalk
|
|
|
|
--- Druid ---
|
|
elseif BuffID == 102342 then
|
|
Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Ironbark // using plus since the tooltip returns a negative value
|
|
|
|
--- Hunter ---
|
|
elseif BuffID == 186265 then -- Aspect of the Turtle
|
|
PImmunity = 1
|
|
MImmunity = 1
|
|
|
|
--- Mage ---
|
|
elseif BuffID == 45438 then -- Ice Block
|
|
PImmunity = 1
|
|
MImmunity = 1
|
|
|
|
--- Monk ---
|
|
elseif BuffID == 261769 then
|
|
Reduction = 1 + (select(16, UnitBuff("player", n)) or 0) / 100 -- Inner Strength // using plus since the tooltip returns a negative value
|
|
|
|
elseif BuffID == 115295 then
|
|
Absorbs = Absorbs - select(16, UnitBuff("player", n)) -- Guard // prevents Guard from counting as a normal absorb
|
|
|
|
--- Paladin ---
|
|
elseif BuffID == 210320 then
|
|
Reduction = 1 + (tonumber(select(16, UnitBuff("player", n)) or 0)) / 100 -- Devotion Aura // using plus since the tooltip returns a negative value
|
|
|
|
elseif BuffID == 1022 then PImmunity = 1 -- Blessing of Protection
|
|
elseif BuffID == 204018 then MImmunity = 1 -- Blessing of Spellwarding
|
|
|
|
elseif BuffID == 188370 then
|
|
Reduction = 1 - (GetMasteryEffect() / 2.85) / 100 -- Consecration // May not be 100% accurate, but it's good enough for now
|
|
if IsEquippedItem(137047) then Reduction = Reduction * 0.96 end -- Consecration (Legendary Ring)
|
|
|
|
elseif BuffID == 642 then -- Divine Shield
|
|
PImmunity = 1
|
|
MImmunity = 1
|
|
|
|
--- Priest ---
|
|
elseif BuffID == 45242 then
|
|
Reduction = 1 - (select(3, UnitBuff("player", n)) or 0) * 15 / 100 -- Focused Will
|
|
|
|
elseif BuffID == 139 then
|
|
if IsPlayerSpell(235189) and UnitBuff("player", n, nil, "player") then
|
|
Reduction = 0.90 -- Perseverance - Talent
|
|
end
|
|
|
|
--- Rogue ---
|
|
elseif BuffID == 1966 then
|
|
if not AoE and IsPlayerSpell(79008)
|
|
then Elusive = 0.70 -- Elusiveness
|
|
else -- Feint
|
|
if AoE then Avoid = Avoid * 0.50 end
|
|
end
|
|
elseif BuffID == 31224 then MImmunity = 1 -- Cloak of Shadows
|
|
|
|
--- Shaman ---
|
|
elseif BuffID == 260881 then
|
|
Reduction = 1 - (tonumber(select(3, UnitBuff("player", n)) or 0)) * 5 / 100 -- Ghost in the Mist - Talent
|
|
|
|
--- Warlock ---
|
|
|
|
--- Warrior ---
|
|
elseif BuffID == 184362 and IsPlayerSpell(208154) then -- Enrage
|
|
Reduction = 0.90 -- War Paint - Talent
|
|
|
|
end
|
|
|
|
AbsorbsP = Absorbs - AMS
|
|
AbsorbsM = Absorbs - BloodS
|
|
|
|
ClassDRP = ClassDRP * Reduction * PhysicalReduction
|
|
ClassDRM = ClassDRM * Reduction * MagicReduction
|
|
n = n + 1
|
|
BuffID = select(10, UnitBuff("player", n))
|
|
end
|
|
|
|
----- Damage reductions with special calculations -----
|
|
|
|
--- Death Knight ---
|
|
if ClassID == 6 then
|
|
local Necropolis = 1
|
|
if IsPlayerSpell(206967) then -- Will of the Necropolis - Talent
|
|
if CurrentHealth / MaxHealth < 0.35 then Necropolis = 0.65
|
|
end
|
|
end
|
|
ClassDRP = ClassDRP * Necropolis
|
|
ClassDRM = ClassDRM * Necropolis
|
|
end
|
|
|
|
--- Demon Hunter ---
|
|
if ClassID == 12 then
|
|
local HavocDemWards = 1
|
|
local VengDemWards = 1
|
|
if SpecID == 1 then
|
|
HavocDemWards = 0.90 -- Demonic Wards - Passive
|
|
elseif SpecID == 2 then
|
|
VengDemWards = 0.90 -- Demonic Wards - Passive
|
|
ScanTarget = true
|
|
end
|
|
|
|
ClassDRP = ClassDRP * VengDemWards
|
|
ClassDRM = ClassDRM * VengDemWards * HavocDemWards
|
|
end
|
|
|
|
--- Druid ---
|
|
if ClassID == 11 then
|
|
local GuardA = 1
|
|
if IsEquippedItem(137015) and IsPlayerSpell(16931) then
|
|
GuardA = 0.895 -- Legendary chest
|
|
elseif IsPlayerSpell(16931) then
|
|
GuardA = 0.94 -- Thick Hide (Guardian Affinity)
|
|
end
|
|
if SpecID == 3 then
|
|
if IsPlayerSpell(204053) then
|
|
ScanTarget = true
|
|
end
|
|
end
|
|
|
|
ClassDRP = ClassDRP * GuardA
|
|
ClassDRM = ClassDRM * GuardA
|
|
end
|
|
|
|
--- Hunter ---
|
|
if ClassID == 3 then
|
|
end
|
|
|
|
--- Mage ---
|
|
if ClassID == 8 then
|
|
end
|
|
|
|
--- Monk ---
|
|
if ClassID == 10 then
|
|
if SpecID == 1 then
|
|
ScanTarget = true
|
|
-- Gets stagger agaist current target, if no target is found use base --
|
|
local StaggerBase, StaggerTarget = C_PaperDollInfo.GetStaggerPercentage("player")
|
|
if not StaggerTarget then StaggerTarget = StaggerBase end
|
|
StaggerM = StaggerTarget * 0.35
|
|
StaggerP = 1 - StaggerTarget / 100
|
|
StaggerM = 1 - StaggerM / 100
|
|
|
|
-- Stagger cap --
|
|
local Stagger = UnitStagger("player") or 0 -- Calculate MaxHealth effective reduction for Stagger
|
|
local StaggerCapP = (CurrentHealth + AbsorbsP) / (CurrentHealth + AbsorbsP + 100 * MaxHealth - Stagger * 10)
|
|
local StaggerCapM = (CurrentHealth + AbsorbsM) / (CurrentHealth + AbsorbsM + 100 * MaxHealth - Stagger * 10)
|
|
if StaggerCapP < 0.01 then StaggerCapP = 0.01 end -- Stagger caps at 99%
|
|
if StaggerCapM < 0.01 then StaggerCapM = 0.01 end
|
|
if StaggerP < StaggerCapP then StaggerP = StaggerCapP end
|
|
if StaggerM < StaggerCapM then StaggerM = StaggerCapM end
|
|
end
|
|
if SpecID == 3 then
|
|
local Karma = 0
|
|
aura_env.GoodKarma = IsPlayerSpell(280195) -- Talent
|
|
Karma = aura_env.TouchOfKarma
|
|
Absorbs = Absorbs + Karma
|
|
AbsorbsP = AbsorbsP + Karma
|
|
AbsorbsM = AbsorbsM + Karma
|
|
end
|
|
|
|
ClassDRP = ClassDRP * StaggerP
|
|
ClassDRM = ClassDRM * StaggerM
|
|
end
|
|
|
|
--- Paladin ---
|
|
if ClassID == 2 then
|
|
local LastDefender = 1
|
|
if SpecID == 2 then -- Protection
|
|
LastDefender = 1 - (1 - 0.97 ^ aura_env.NameplateCounter)
|
|
end
|
|
ClassDRP = ClassDRP * LastDefender
|
|
ClassDRM = ClassDRM * LastDefender
|
|
end
|
|
|
|
--- Priest ---
|
|
if ClassID == 5 then
|
|
end
|
|
|
|
--- Rogue ---
|
|
if ClassID == 4 then
|
|
end
|
|
|
|
--- Shaman ---
|
|
if ClassID == 7 then
|
|
end
|
|
|
|
--- Warlock ---
|
|
if ClassID == 9 then
|
|
local SoulLink = 1
|
|
local DestructionMastery = 1
|
|
if SpecID == 2 then -- Soul Link passive for Demonology Warlocks
|
|
if UnitExists("pet") then
|
|
SoulLink = 0.80
|
|
end
|
|
elseif SpecID == 3 then
|
|
DestructionMastery = 1 - ((GetMasteryEffect() / 9) / 100) -- Destruction mastery effect
|
|
end
|
|
|
|
ClassDRP = ClassDRP * SoulLink * DestructionMastery
|
|
ClassDRM = ClassDRM * SoulLink * DestructionMastery
|
|
end
|
|
|
|
--- Warrior ---
|
|
if ClassID == 1 then
|
|
if SpecID == 3 then
|
|
ScanTarget = true
|
|
end
|
|
|
|
ClassDRP = ClassDRP
|
|
ClassDRM = ClassDRM
|
|
end
|
|
|
|
--- Miscellaneous ---
|
|
if aura_env.HighmountainTauren then
|
|
local Stamina = UnitStat("player", 3)
|
|
local RuggedTenacity = floor((Stamina * 0.0003 * 20) + 0.5)
|
|
Absorbs = Absorbs + RuggedTenacity
|
|
end
|
|
|
|
--- Checking debuffs on target if needed ---
|
|
if ScanTarget then
|
|
local TD = 1
|
|
local DebuffID = select(10, UnitDebuff("target", TD))
|
|
while DebuffID do
|
|
local DebuffTarget = 1
|
|
local DebuffTargetP = 1
|
|
local DebuffTargetM = 1
|
|
|
|
--- Demon Hunter ---
|
|
if DebuffID == 207744 and select(3, UnitDebuff("target", TD, nil, "player")) then
|
|
DebuffTarget = 0.60 -- Fiery Brand
|
|
|
|
elseif DebuffID == 268178 and select(3, UnitDebuff("target", TD, nil, "player")) then
|
|
DebuffTarget = 0.94 -- Void Reaver -- Talent
|
|
|
|
--- Druid ---
|
|
elseif DebuffID == 192090 and select(3, UnitDebuff("target", TD, nil, "player")) then
|
|
DebuffTarget = 1 - 0.02 * (select(3, UnitDebuff("target", TD, nil, "player")) or 0) -- Rend and Tear - Talent
|
|
|
|
--- Monk ---
|
|
elseif DebuffID == 123725 then
|
|
DebuffTarget = 1 + 0.01 * (select(17, UnitDebuff("target", TD, nil, "player")) or 0) -- Breath of Fire // using plus since the tooltip returns a negative value
|
|
|
|
--- Warrior ---
|
|
elseif DebuffID == 1160 and select(7, UnitDebuff("target", TD)) == "player" then
|
|
DebuffTarget = 0.80 -- Demoralizing Shout
|
|
end
|
|
|
|
ClassDRP = ClassDRP * DebuffTarget * DebuffTargetP
|
|
ClassDRM = ClassDRM * DebuffTarget * DebuffTargetM
|
|
TD = TD + 1
|
|
DebuffID = select(10, UnitDebuff("target", TD))
|
|
end
|
|
end
|
|
|
|
-- Damage taken modifiers --
|
|
local ReductionP = Vers * Avoid * ClassDRP * Armor * Elusive
|
|
local ReductionM = Vers * Avoid * ClassDRM * Elusive
|
|
-- CurrentHealth health and shields --
|
|
local EHP = (CurrentHealth + AbsorbsP) / ReductionP
|
|
local EHM = (CurrentHealth + AbsorbsM) / ReductionM
|
|
|
|
-- Export pre-avoidance EHP, EHM and immunity status as global variables --
|
|
if aura_env.GlobalExport then
|
|
-- Calculate max effective health (no absorbs) --
|
|
local EHPMaxHealth = (MaxHealth + AbsorbsP) / ReductionP
|
|
local EHMMaxHealth = (MaxHealth + AbsorbsM) / ReductionM
|
|
-- Export to globals --
|
|
local Export = WA_ZELER_EH
|
|
Export.EHPMAX, Export.EHMMAX = EHPMaxHealth * Avoid * Elusive, EHMMaxHealth * Avoid * Elusive
|
|
Export.EHP, Export.EHM = EHP * Avoid * Elusive, EHM * Avoid * Elusive
|
|
|
|
Export.REDP, Export.REDM = ReductionP / Avoid / Elusive, ReductionM / Avoid / Elusive
|
|
Export.ABS, Export.ABSP, Export.ABSM = Absorbs, AbsorbsP, AbsorbsM
|
|
Export.EHPIMMUNITY, Export.EHMIMMUNITY = PImmunity, MImmunity
|
|
Export.EHARMOR = Armor
|
|
Export.STAGGERP, Export.STAGGERM = StaggerP, StaggerM
|
|
end
|
|
|
|
-- Formatting numbers --
|
|
local DivideP, DivideM = 1, 1
|
|
local ImportDecimal = aura_env.DisplayDecimals
|
|
local EHPdecimal, EHMdecimal = ImportDecimal, ImportDecimal
|
|
local letterP, letterM = "", ""
|
|
if EHP > 10 ^ 9 then
|
|
EHP = EHP / 10 ^ 9
|
|
DivideP = 10 ^ 9
|
|
letterP = "b"
|
|
EHPdecimal = 2
|
|
elseif EHP > 10 ^ 8 then
|
|
EHP = EHP / 10 ^ 6
|
|
DivideP = 10 ^ 6
|
|
letterP = "m"
|
|
EHPdecimal = 0
|
|
elseif EHP > 10 ^ 7 then
|
|
EHP = EHP / 10 ^ 6
|
|
DivideP = 10 ^ 6
|
|
letterP = "m"
|
|
elseif EHP > 10 ^ 6 then
|
|
EHP = EHP / 10 ^ 6
|
|
DivideP = 10 ^ 6
|
|
letterP = "m"
|
|
EHPdecimal = 2
|
|
elseif EHP > 10 ^ 5 then
|
|
EHP = EHP / 10 ^ 3
|
|
DivideP = 10 ^ 3
|
|
letterP = "k"
|
|
EHPdecimal = 0
|
|
elseif EHP > 10 ^ 4 then
|
|
EHP = EHP / 10 ^ 3
|
|
DivideP = 10 ^ 3
|
|
letterP = "k"
|
|
elseif EHP > 10 ^ 3 then
|
|
EHP = EHP / 10 ^ 3
|
|
DivideP = 10 ^ 3
|
|
letterP = "k"
|
|
EHPdecimal = 2
|
|
elseif EHP > -1 then
|
|
EHP = EHP / 1
|
|
DivideP = 1
|
|
EHPdecimal = 0
|
|
end
|
|
|
|
if EHM > 10 ^ 9 then
|
|
EHM = EHM / 10 ^ 9
|
|
DivideM = 10 ^ 9
|
|
letterM = "b"
|
|
EHMdecimal = 2
|
|
elseif EHM > 10 ^ 8 then
|
|
EHM = EHM / 10 ^ 6
|
|
DivideM = 10 ^ 6
|
|
letterM = "m"
|
|
EHMdecimal = 0
|
|
elseif EHM > 10 ^ 7 then
|
|
EHM = EHM / 10 ^ 6
|
|
DivideM = 10 ^ 6
|
|
letterM = "m"
|
|
elseif EHM > 10 ^ 6 then
|
|
EHM = EHM / 10 ^ 6
|
|
DivideM = 10 ^ 6
|
|
letterM = "m"
|
|
EHMdecimal = 2
|
|
elseif EHM > 10 ^ 5 then
|
|
EHM = EHM / 10 ^ 3
|
|
DivideM = 10 ^ 3
|
|
letterM = "k"
|
|
EHMdecimal = 0
|
|
elseif EHM > 10 ^ 4 then
|
|
EHM = EHM / 10 ^ 3
|
|
DivideM = 10 ^ 3
|
|
letterM = "k"
|
|
elseif EHM > 10 ^ 3 then
|
|
EHM = EHM / 10 ^ 3
|
|
DivideM = 10 ^ 3
|
|
letterM = "k"
|
|
EHMdecimal = 2
|
|
elseif EHM > -1 then
|
|
EHM = EHM / 1
|
|
DivideM = 1
|
|
EHMdecimal = 0
|
|
end
|
|
|
|
-- Format displayed text with appropriate colors --
|
|
local Color = ""
|
|
if Mode ~= "magic" then
|
|
for i = 1, 6 do
|
|
if EHP >= Threshold[1][i] / DivideP then Color = ColorFunction[i] end
|
|
end
|
|
if PImmunity == 1 then Color = ColorFunction[7] end
|
|
EHP = string.format("P:|c%s%." .. EHPdecimal .. "f" .. letterP .. "|r", Color, EHP)
|
|
else EHP = ""
|
|
end
|
|
|
|
if Mode ~= "physical" then
|
|
for i = 1, 6 do
|
|
if EHM >= Threshold[2][i] / DivideM then Color = ColorFunction[i] end
|
|
end
|
|
if MImmunity == 1 then Color = ColorFunction[7] end
|
|
EHM = string.format("M:|c%s%." .. EHMdecimal .. "f" .. letterM .. "|r", Color, EHM)
|
|
else EHM = ""
|
|
end
|
|
|
|
local separator = ""
|
|
if Mode == "both" and aura_env.Align == "horizontal" then separator = " | "
|
|
elseif Mode == "both" and aura_env.Align == "vertical" then separator = "\n" end
|
|
|
|
--- CPU Benchmarking ---
|
|
if Debug then
|
|
aura_env.time = (aura_env.time or 0) + debugprofilestop() - start
|
|
if aura_env.count == 0 then
|
|
print(aura_env.time)
|
|
aura_env.time = 0
|
|
end
|
|
return "P: " .. ReductionP .. "\n" .. "M: " .. ReductionM
|
|
end
|
|
|
|
return EHP .. separator .. EHM
|
|
end
|
|
|
|
--CUSTOM TRIGGER
|
|
function(t)
|
|
return t[1]
|
|
end
|
|
|
|
--TRIGGER 1 - ALIVE
|
|
|
|
--ACTIVE_TALENT_GROUP_CHANGED
|
|
function()
|
|
aura_env.SpecID = GetSpecialization()
|
|
end
|
|
|
|
--COMBAT_LOG_EVENT_UNFILTERED
|
|
function(event)
|
|
-- Original code from https://wago.io/B1M5OqeFb
|
|
if aura_env.ClassID == 10 and aura_env.SpecID == 3 then
|
|
local CLEU = {CombatLogGetCurrentEventInfo()}
|
|
local message = CLEU[2]
|
|
local destName = CLEU[9]
|
|
local Multiplier = 0.5
|
|
if aura_env.GoodKarma then
|
|
Multiplier = 1
|
|
end
|
|
if destName and UnitIsUnit("player", destName) then
|
|
if message == "SPELL_ABSORBED" then
|
|
local chk = CLEU[9]
|
|
local spellID, absorbed = 0, 0
|
|
if type(chk) == "number" then -- Spell
|
|
spellID = CLEU[19]
|
|
absorbed = CLEU[22]
|
|
else -- Swing
|
|
spellID = CLEU[16]
|
|
absorbed = CLEU[19]
|
|
end
|
|
if spellID == 122470 then
|
|
aura_env.TouchOfKarma = math.max(aura_env.TouchOfKarma - absorbed, 0)
|
|
end
|
|
elseif message == "SPELL_AURA_APPLIED" then
|
|
local spellID = CLEU[12]
|
|
if spellID == 122470 then
|
|
aura_env.maxValue = UnitHealthMax("player") * Multiplier
|
|
aura_env.TouchOfKarma = aura_env.maxValue
|
|
end
|
|
elseif message == "SPELL_AURA_REMOVED" then
|
|
local spellID = CLEU[12]
|
|
if spellID == 122470 then
|
|
aura_env.TouchOfKarma = 0
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--PLAYER_TARGET_CHANGED,ENCOUNTER_START,INSTANCE_ENCOUNTER_ENGAGE_UNIT
|
|
function()
|
|
local PlayerLevel = aura_env.PlayerLevel
|
|
local TargetLevel = PlayerLevel
|
|
if UnitExists("boss1") then
|
|
TargetLevel = UnitLevel("boss1")
|
|
elseif UnitExists("target") then
|
|
TargetLevel = UnitLevel("target")
|
|
end
|
|
if TargetLevel == -1 then -- Raid boss
|
|
TargetLevel = PlayerLevel + 3
|
|
-- elseif TargetLevel < aura_env.PlayerLevel then
|
|
-- TargetLevel = PlayerLevel -- Prevents the armor scaling from looking too strange. Currently disabled
|
|
end
|
|
aura_env.TargetLevel = TargetLevel
|
|
end
|
|
|
|
--PLAYER_LEVEL_UP
|
|
function(event, NewLevel)
|
|
aura_env.PlayerLevel = NewLevel
|
|
end
|
|
|
|
--EVERY FRAME?? (For last defender - delet?)
|
|
function()
|
|
if aura_env.ClassID == 2 and aura_env.SpecID == 2 then -- Enable for Protection Paladins only
|
|
if IsPlayerSpell(203791) then -- Last Defender - talent
|
|
local now = GetTime()
|
|
if now - aura_env.NameplateCheck >= 0.1 then -- Throttle
|
|
aura_env.NameplateCheck = now
|
|
local counter = 0
|
|
local i
|
|
for i = 1, 40 do
|
|
local unit = "nameplate" .. i
|
|
if UnitExists(unit) and not UnitIsFriend("player", unit) then
|
|
if WeakAuras.GetRange(unit) < 8 then -- 8y range check
|
|
counter = counter + 1
|
|
end
|
|
end
|
|
end
|
|
aura_env.NameplateCounter = counter
|
|
end
|
|
else aura_env.NameplateCounter = 0 -- Reset counter if the talent is not selected
|
|
end
|
|
end
|
|
end
|
|
|
|
--INIT-- Made by Zeler-Ravencrest EU, with great help from Stryer-Ravencrest EU
|
|
aura_env.Mode = "both" -- Choose from "physical", "magic", "both" to change the value(s) displayed
|
|
aura_env.Align = "vertical" -- Choose which alignment you want. "vertical" for vertical alignment, "horizontal" for horizontal alignment
|
|
aura_env.AoE = true -- Enable avoidance with true and disable it with false
|
|
aura_env.GlobalExport = true -- Enable export of certain variables as global variables for use in other weakauras
|
|
aura_env.Debug = false -- Enable debug with true. It will then return the damage reduction multipliers
|
|
local text = true -- Disable the 'P:' and the 'M:' with false
|
|
aura_env.DisplayDecimals = 1 -- The number of decimals displayed
|
|
|
|
aura_env.PlayerLevel = UnitLevel("player")
|
|
aura_env.TargetLevel = aura_env.PlayerLevel
|
|
aura_env.TouchOfKarma = 0
|
|
aura_env.GoodKarma = IsPlayerSpell(280195) -- Wind Walker Monk - Talent
|
|
aura_env.HighmountainTauren = IsPlayerSpell(255659) -- Rugged Tenacity - Passive
|
|
aura_env.NameplateCheck = 0 -- Protection Paladin - Last Defender - talent
|
|
aura_env.NameplateCounter = 0 -- Protection Paladin - Last Defender - talent
|
|
|
|
-- Color values, the accepted values are from 0 to 255
|
|
-- {red, green, blue}
|
|
aura_env.Color = {
|
|
{0, 255, 0}, -- Lowest HP
|
|
{0, 255, 0},
|
|
{0, 255, 0},
|
|
{0, 255, 0},
|
|
{0, 255, 0},
|
|
{0, 255, 0}, -- Highest HP
|
|
{0, 255, 0}, -- Immunity color
|
|
}
|
|
|
|
-- Thresholds at which the color changes (leave the first 0)
|
|
aura_env.Threshold = {
|
|
{0, 1, 2, 3, 4, 5}, -- Physical EH
|
|
{0, 1, 2, 3, 4, 5}, -- Magic EH
|
|
}
|
|
|
|
local function RGBtoHex(rgb)
|
|
return string.format("ff%02x%02x%02x", rgb[1], rgb[2], rgb[3])
|
|
end
|
|
|
|
for i = 1, #aura_env.Color do
|
|
aura_env.Color[i] = RGBtoHex(aura_env.Color[i])
|
|
end
|
|
|
|
-- Check player class and spec
|
|
aura_env.ClassID = select(3, UnitClass("player"))
|
|
aura_env.SpecID = GetSpecialization()
|
|
|
|
-- Class self-buffs: [Spell ID] = {Phys Reduction, Magic Reduction}
|
|
aura_env.BasicReductions = {
|
|
|
|
--- Death Knight ---
|
|
[194679] = {0.70, 0.70}, -- Rune Tap
|
|
|
|
--- Demon Hunter ---
|
|
|
|
--- Druid ---
|
|
[158792] = {0.91, 0.91}, -- Pulverize
|
|
[22812] = {0.80, 0.80}, -- Barkskin
|
|
[61336] = {0.50, 0.50}, -- Survival Instincts
|
|
|
|
--- Hunter ---
|
|
[186265] = {0.70, 0.70}, -- Aspect of the Turtle
|
|
[264735] = {0.80, 0.80}, -- Survival of the Fittest
|
|
|
|
--- Mage ---
|
|
[113862] = {0.40, 0.40}, -- Greater Invisibility
|
|
[235450] = {1, 0.85}, -- Prismatic Barrier
|
|
|
|
--- Monk ---
|
|
[120954] = {0.80, 0.80}, -- Fortifying Brew (BrM)
|
|
[243435] = {0.80, 0.80}, -- Fortifying Brew (MW)
|
|
[122278] = {0.80, 0.80}, -- Dampen Harm, assumed at minimum reduction
|
|
[122783] = {1, 0.40}, -- Diffuse Magic
|
|
[115176] = {0.40, 0.40}, -- Zen Meditation
|
|
|
|
--- Paladin ---
|
|
[498] = {0.80, 0.80}, -- Divine Protection
|
|
[31850] = {0.80, 0.80}, -- Ardent Defender
|
|
[205191] = {0.65, 1}, -- Eye for an Eye - talent
|
|
[86659] = {0.50, 0.50}, -- Guardian of Ancient Kings
|
|
[212641] = {0.50, 0.50}, -- Guardian of Ancient Kings - Glyph of the Queen
|
|
[183436] = {0.70, 0.70}, -- Retribution - passive
|
|
[6940] = {0.70, 0.70}, -- Blessing of Sacrifice
|
|
[204335] = {0.80, 0.80}, -- Aegis of Light - talent
|
|
|
|
--- Priest ---
|
|
[47585] = {0.40, 0.40}, -- Dispersion
|
|
[193065] = {0.90, 0.90}, -- Masochism - talent
|
|
[232698] = {0.90, 1}, -- Shadowform
|
|
[33206] = {0.60, 0.60}, -- Pain Suppression
|
|
-- [194384] = {0.97, 0.97}, -- Leniece - talent -- Currently disabled due to being unable to track if the casting priest has the talent or not
|
|
[81782] = {0.75, 0.75}, -- Power Word: Barrier
|
|
|
|
--- Rogue ---
|
|
[45182] = {0.15, 0.15}, -- Cheating Death - Cheat Death talent
|
|
|
|
--- Shaman ---
|
|
[108271] = {0.60, 0.60}, -- Astral Shift
|
|
[98007] = {0.90, 0.90}, -- Spirit Link Totem
|
|
|
|
--- Warlock ---
|
|
[104773] = {0.60, 0.60}, -- Unending Resolve
|
|
|
|
--- Warrior ---
|
|
[197690] = {0.80, 0.80}, -- Defensive Stance
|
|
[118038] = {0.70, 0.70}, -- Die by the Sword
|
|
[184364] = {0.70, 0.70}, -- Enraged Regeneration
|
|
[871] = {0.60, 0.60}, -- Shield Wall
|
|
[23920] = {1, 0.80}, -- Spell Reflection
|
|
[223658] = {0.70, 0.70}, -- Safeguard
|
|
|
|
--- Miscellaneous ---
|
|
[241836] = {0.95, 0.95}, -- Shadow of Celumbra
|
|
[65116] = {0.90, 1}, -- Stoneform
|
|
[211080] = {0.90, 0.90}, -- Comforting light (Court of Stars)
|
|
[273809] = {1.30, 1.30} -- Idol of Rage
|
|
}
|
|
|
|
if aura_env.GlobalExport then
|
|
WA_ZELER_EH = {}
|
|
end
|