Files

569 lines
18 KiB
Lua

-- COMBAT_LOG_EVENT_UNFILTERED AURA_INIT
function(
states,
event,
tstamp,
message,
hideCaster,
srcGUID,
srcName,
srcFlags,
srcRFlags,
destGUID,
destName,
destFlags,
destRFlags,
...
)
if event == "OPTIONS" then
local amount1 = Round(UnitHealth("player") / 100 * 25)
local amount2 = Round(UnitHealth("player") / 100 * 15)
states[""] = {
name = "PARRY",
icon = 644389,
amount = "",
percent = "",
school = "unknown",
index = 3,
value = UnitHealthMax("player"),
total = UnitHealthMax("player"),
progressType = "static",
autoHide = true,
changed = true,
show = true,
}
states[1] = {
name = "Evil Fire Spell",
icon = 644389,
amount = aura_env.format(amount1),
percent = "[25%]",
schoolIndex = 4,
index = 2,
value = UnitHealth("player") / 100 * 50,
total = UnitHealthMax("player"),
additionalProgress = { [1] = { direction = "forward", width = amount1 } },
progressType = "static",
autoHide = true,
changed = true,
show = true,
}
states[2] = {
name = "Evil Shadow Spell",
icon = 644389,
amount = aura_env.format(amount2),
percent = "[15%]",
schoolIndex = 32,
index = 1,
value = UnitHealth("player") / 100 * 35,
total = UnitHealthMax("player"),
additionalProgress = { [1] = { direction = "forward", width = amount2 } },
progressType = "static",
autoHide = true,
changed = true,
show = true,
}
states[3] = {
name = "Healing",
icon = 644389,
amount = aura_env.format(amount2),
percent = "[15%]",
schoolIndex = 99,
index = 1,
value = UnitHealth("player") / 100 * 35,
total = UnitHealthMax("player"),
additionalProgress = { [1] = { direction = "forward", width = amount2 } },
progressType = "static",
autoHide = true,
changed = true,
show = true,
}
local aura_env = aura_env
C_Timer.After(0.1, function() aura_env.sortAndOffset(true) end)
return true
end
if event == "COMBAT_LOG_EVENT_UNFILTERED" and destGUID == WeakAuras.myGUID and ... then
local c = aura_env.config
if message == "SWING_DAMAGE" and c.swing then
local amount, overkill, school, resisted, blocked, absorbed, critical, glancing, crushing = ...
if amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local threshold = amount * 100 / healthMax
if threshold >= c.threshold then
local schools = aura_env.spellSchools
local SC, SCI = 0, 0
if schools[school] then
SC, SCI = schools[school][1], schools[school][2]
end
local healthPercentLost = string.format("%.1f%%", threshold)
--formatted health
local healthAfterHit = overkill > 0 and 0 or healthCurrent - amount
--formatted amount
local color = aura_env.schoolColors[school] or "ffffff"
local prefix = critical and "|cFFFFD100CRIT:|r"
or glancing and "|cFFFFD100GLANCE:|r"
or crushing and "|cFFFFD100CRUSH:|r"
or "|cFFFFD100HIT:|r"
local Famount = ("%s |cFF%s%s|r|n"):format(prefix, color, aura_env.format(amount))
--formatted absorb
local Fabsorbed = absorbed
and ("|cFFFFD100ABSORBED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(absorbed))
or ""
--formatted block
local Fblocked = blocked
and ("|cFFFFD100BLOCKED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(blocked))
or ""
--formatted resist
local Fresisted = resisted
and ("|cFFFFD100RESISTED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(resisted))
or ""
--formatted overkill
local Foverkill = overkill > 0
and ("|cFFFFD100OVERKILL:|r |cFFFFFFFF%s|r"):format(aura_env.format(overkill))
or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local Finfo = ("|cFFFFFFFFMelee hit|r [%s]"):format(SC == 0 and "unknown" or SC)
local Fdamage = ("|cFF00FF00%s|r > |cFF00FF00%s|r (%s)"):format(
aura_env.format(healthCurrent),
aura_env.format(healthAfterHit),
healthPercentLost
)
local Fdetails = ("%s%s%s%s%s"):format(Famount, Fabsorbed, Fblocked, Fresisted, Foverkill)
local tooltip = ("%s %s|n|n%s|n%s|n|n%s"):format(Ftime, Fname, Finfo, Fdamage, Fdetails)
local new = {
name = "",
icon = 135274,
spellid = 0,
amount = aura_env.format(amount),
percent = ("[%s]"):format(healthPercentLost),
school = SC,
schoolIndex = SCI,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
death = overkill > 0,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = { direction = "backward", width = amount } },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
end
elseif message == "SWING_MISSED" and c.missType then
local missType, isOffHand, amount = ...
if amount and amount >= c.missThreshold or not amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local Famount = amount and ("|cFFFFD100HIT:|r |cFFFFFFFF%s|r"):format(aura_env.format(amount)) or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local tooltip = ("%s %s|n|n|cFFFFFFFFMelee hit|r |cFFFF0000%s|r|n%s"):format(
Ftime,
Fname,
missType,
Famount
)
local new = {
name = missType,
icon = 135274,
spellid = 0,
amount = amount and aura_env.format(amount) or "",
percent = "",
school = "unknown",
schoolIndex = 0,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = {} },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
elseif message == "ENVIRONMENTAL_DAMAGE" and c.env then --enviromental
local envType, amount, overkill, school, resisted, blocked, absorbed, critical, glancing, crushing = ...
if amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local threshold = amount * 100 / healthMax
if threshold >= c.threshold then
local schools = aura_env.spellSchools
local SC, SCI = 0, 0
if schools[school] then
SC, SCI = schools[school][1], schools[school][2]
end
local healthPercentLost = string.format("%.1f%%", threshold)
--formatted health
local healthAfterHit = overkill > 0 and 0 or healthCurrent - amount
--formatted amount
local color = aura_env.schoolColors[school] or "ffffff"
local prefix = critical and "|cFFFFD100CRIT:|r"
or glancing and "|cFFFFD100GLANCE:|r"
or crushing and "|cFFFFD100CRUSH:|r"
or "|cFFFFD100HIT:|r"
local Famount = ("%s |cFF%s%s|r|n"):format(prefix, color, aura_env.format(amount))
--formatted absorb
local Fabsorbed = absorbed
and ("|cFFFFD100ABSORBED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(absorbed))
or ""
--formatted block
local Fblocked = blocked
and ("|cFFFFD100BLOCKED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(blocked))
or ""
--formatted resist
local Fresisted = resisted
and ("|cFFFFD100RESISTED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(resisted))
or ""
--formatted overkill
local Foverkill = overkill > 0
and ("|cFFFFD100OVERKILL:|r |cFFFFFFFF%s|r"):format(aura_env.format(overkill))
or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local Finfo = ("|cFFFFFFFFEnvironmental|r [%s]"):format(SC == 0 and "unknown" or SC)
local Fdamage = ("|cFF00FF00%s|r > |cFF00FF00%s|r (%s)"):format(
aura_env.format(healthCurrent),
aura_env.format(healthAfterHit),
healthPercentLost
)
local Fdetails = ("%s%s%s%s%s"):format(Famount, Fabsorbed, Fblocked, Fresisted, Foverkill)
local tooltip = ("%s %s|n|n%s|n%s|n|n%s"):format(Ftime, Fname, Finfo, Fdamage, Fdetails)
local eTypes = aura_env.envTypes
local new = {
name = envType,
icon = eTypes[envType] or 132996,
spellid = 0,
amount = aura_env.format(amount),
percent = ("[%s]"):format(healthPercentLost),
school = SC,
schoolIndex = SCI,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
death = overkill > 0,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = { direction = "forward", width = amount } },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
end
elseif message == "ENVIRONMENTAL_MISSED" and c.missType then
local envType, missType, isOffHand, amount = ...
if amount and amount >= c.missThreshold or not amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local Famount = amount and ("|cFFFFD100HIT:|r |cFFFFFFFF%s|r"):format(aura_env.format(amount)) or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = envType and ("|cFFFFFFFF%s|r"):format(envType) or "|cFFbbbbbbUNKNOWN|r"
local tooltip = ("%s %s|n|n|cFFFFFFFFEnvironmental|r |cFFFF0000%s|r|n%s"):format(
Ftime,
Fname,
missType,
Famount
)
local eTypes = aura_env.envTypes
local new = {
name = missType,
icon = eTypes[envType] or 132996,
spellid = 0,
amount = amount and aura_env.format(amount) or "",
percent = "",
school = "unknown",
schoolIndex = 0,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = {} },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
elseif string.find(message, "_DAMAGE") and c.other then
--SPELL_DAMAGE SPELL_PERIODIC_DAMAGE RANGE_DAMAGE
local spellid, spellName, spellSchool, amount, overkill, school, resisted, blocked, absorbed, critical, glancing, crushing =
...
if (c.stagger and spellid ~= 124255 or not c.stagger) and amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local threshold = amount * 100 / healthMax
if threshold >= c.threshold then
local schools = aura_env.spellSchools
local SC, SCI = 0, 0
if schools[school] then
SC, SCI = schools[school][1], schools[school][2]
end
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local healthPercentLost = string.format("%.1f%%", threshold)
--formatted health
local healthAfterHit = overkill > 0 and 0 or healthCurrent - amount
--formatted amount
local color = aura_env.schoolColors[school] or "ffffff"
local prefix = critical and "|cFFFFD100CRIT:|r"
or glancing and "|cFFFFD100GLANCE:|r"
or crushing and "|cFFFFD100CRUSH:|r"
or "|cFFFFD100HIT:|r"
local Famount = ("%s |cFF%s%s|r|n"):format(prefix, color, aura_env.format(amount))
--formatted absorb
local Fabsorbed = absorbed
and ("|cFFFFD100ABSORBED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(absorbed))
or ""
--formatted block
local Fblocked = blocked
and ("|cFFFFD100BLOCKED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(blocked))
or ""
--formatted resist
local Fresisted = resisted
and ("|cFFFFD100RESISTED:|r |cFFFFFFFF%s|r|n"):format(aura_env.format(resisted))
or ""
--formatted overkill
local Foverkill = overkill > 0
and ("|cFFFFD100OVERKILL:|r |cFFFFFFFF%s|r"):format(aura_env.format(overkill))
or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local Finfo = ("|cFFFFFFFF%s|r [|cFF%s%s|r]"):format(
spellName or "unknown",
color,
SC == 0 and "unknown" or SC
)
local Fdamage = ("|cFF00FF00%s|r > |cFF00FF00%s|r (%s)"):format(
aura_env.format(healthCurrent),
aura_env.format(healthAfterHit),
healthPercentLost
)
local Fdetails = ("%s%s%s%s%s"):format(Famount, Fabsorbed, Fblocked, Fresisted, Foverkill)
local tooltip = ("%s %s|n|n%s|nspellID: |cFF00FFFF%s|r|n|n%s|n|n%s"):format(
Ftime,
Fname,
Finfo,
spellid or "",
Fdamage,
Fdetails
)
local new = {
name = spellName,
icon = GetSpellTexture(spellid),
spellid = spellid,
amount = aura_env.format(amount),
percent = ("[%s]"):format(healthPercentLost),
school = SC,
schoolIndex = SCI,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
death = overkill > 0,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = { direction = "forward", width = amount } },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
end
elseif string.find(message, "_HEAL") and c.other then
local spellid, spellName, spellSchool, amount, overkill, school, resisted, blocked, absorbed, critical, glancing, crushing =
...
if c.healing and amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local threshold = amount * 100 / healthMax
if threshold >= c.hthreshold then
local SC, SCI = 0, 99
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local healthPercentLost = string.format("%.1f%%", threshold)
local healthAfterHit = min(healthMax, healthCurrent + amount)
local color = aura_env.schoolColors[school] or "ffffff"
local prefix = critical and "|cFFFFD100CRIT:|r" or "|cFFFFD100HIT:|r"
local Famount = ("%s |cFF%s%s|r|n"):format(prefix, color, aura_env.format(amount))
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local Finfo = ("|cFFFFFFFF%s|r [|cFF%s%s|r]"):format(
spellName or "unknown",
color,
SC == 0 and "" or SC
)
local Fdamage = ("|cFF00FF00%s|r > |cFF00FF00%s|r (%s)"):format(
aura_env.format(healthCurrent),
aura_env.format(healthAfterHit),
healthPercentLost
)
local Fdetails = ("%s"):format(Famount)
local tooltip = ("%s %s|n|n%s|nspellID: |cFF00FFFF%s|r|n|n%s|n|n%s"):format(
Ftime,
Fname,
Finfo,
spellid or "",
Fdamage,
Fdetails
)
local new = {
name = spellName,
icon = GetSpellTexture(spellid),
spellid = spellid,
amount = aura_env.format(amount),
percent = ("[%s]"):format(healthPercentLost),
school = SC,
schoolIndex = SCI,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
death = overkill > 0,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = { direction = "forward", width = amount } },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
end
elseif string.find(message, "_MISSED") and c.missType then
--SPELL_MISSED SPELL_PERIODIC_MISSED RANGE_MISSED
local spellid, spellName, school, missType, isOffHand, amount = ...
if c.stagger and spellid ~= 124255 or not c.stagger then
if amount and amount >= c.missThreshold or not amount then
local healthCurrent, healthMax = UnitHealth("player"), UnitHealthMax("player")
local Famount = amount and ("|cFFFFD100HIT:|r |cFFFFFFFF%s|r"):format(aura_env.format(amount)) or ""
local Ftime = ('|cFFFFD100"%s"|r'):format(date("%H:%M:%S"))
local Fname = srcName and ("|cFFFFFFFF%s|r"):format(srcName) or "|cFFbbbbbbUNKNOWN|r"
local tooltip = ("%s %s|n|n|cFFFFFFFF%s|r |cFFFF0000%s|r|nspellID: |cFF00FFFF%s|r|n%s"):format(
Ftime,
Fname,
spellName,
missType,
spellid,
Famount
)
local new = {
name = missType,
icon = GetSpellTexture(spellid),
spellid = spellid,
amount = amount and aura_env.format(amount) or "",
percent = "",
school = "unknown",
schoolIndex = 0,
index = 0,
value = healthCurrent or 100,
total = healthMax or 100,
tooltip = tooltip,
duration = c.duration,
expirationTime = GetTime() + c.duration,
additionalProgress = { [1] = {} },
progressType = "static",
autoHide = true,
show = true,
changed = true,
}
tinsert(states, new)
for k, v in pairs(states) do
v.index = v.index + 1
v.changed = true
if v.index > c.limit then --clone limit
v.show = false
end
end
return true
end
end
end
end
end