Files
wow-weakauras/Complete Projects/Fivver Stuff/Aura Uptime.lua
2024-08-24 22:43:07 +02:00

199 lines
8.1 KiB
Lua

--PLAYER_REGEN_DISABLED PLAYER_REGEN_ENABLED UPDATE
-- look for auras every frame
-- or maybe look for combatlog ?
-- get time when each aura is applied/expires
-- calculate uptime based on the log ?
-- alternatively sample each frame and add up # of frames aura was active and # of frames combat was ongoing
-- bad solution though
function(e)
if e == "PLAYER_REGEN_DISABLED" then
local aura_env = aura_env
aura_env.ticker = C_Timer.NewTicker(1, function() WeakAuras.ScanEvents("UPDATE") end)
aura_env.startCombat = debugprofilestop()
aura_env.buffs = {}
aura_env.debuffs = {}
return true
elseif e == "PLAYER_REGEN_ENABLED" then
if aura_env.ticker then aura_env.ticker:Cancel() end
elseif e == "UPDATE" then return true end
end
--CLEU
--COMBAT_LOG_EVENT_UNFILTERED
function(e)
if not aura_env.buffs then aura_env.buffs = {} end
if not aura_env.debuffs then aura_env.debuffs = {} end
local timestamp, subEvent, _, _, caster, _, _, _, target = CombatLogGetCurrentEventInfo()
-- print(CombatLogGetCurrentEventInfo())
-- if "buff" is selected in the menu and
-- there has been an aura applied or removed and
-- the aura has been cast by the player on the player then
-- do fancy data stuff pls
if InCombatLockdown() ~= false then
local targetUnit = "boss1"
if UnitExists(targetUnit) == false then targetUnit = "target" end
if (aura_env.config.menu == 1 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == target and caster == UnitName("player")) then
local spell = select(12, CombatLogGetCurrentEventInfo())
print("SPell", spell)
if not aura_env.buffs[spell] then
aura_env.buffs[spell] = {
["timeActive"] = 0,
["timeInactive"] = 0,
["active"] = false,
["lastSwitch"] = debugprofilestop(),
}
-- print("OPA; NEW SPELL")
end
if subEvent == "SPELL_AURA_APPLIED" and aura_env.buffs[spell] then
aura_env.buffs[spell].active = true
aura_env.buffs[spell].timeInactive = aura_env.buffs[spell].timeInactive + debugprofilestop() - aura_env.buffs[spell].lastSwitch
aura_env.buffs[spell].lastSwitch = debugprofilestop()
elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.buffs[spell] then
aura_env.buffs[spell].active = false
aura_env.buffs[spell].timeActive = aura_env.buffs[spell].timeActive + debugprofilestop() - aura_env.buffs[spell].lastSwitch
aura_env.buffs[spell].lastSwitch = debugprofilestop()
end
elseif (aura_env.config.menu == 2 or aura_env.config.menu == 3) and (subEvent == "SPELL_AURA_REMOVED" or subEvent == "SPELL_AURA_APPLIED") and (caster == UnitName("player") and target == UnitName(targetUnit)) then
local spell = select(12, CombatLogGetCurrentEventInfo())
if not aura_env.debuffs[spell] then
aura_env.debuffs[spell] = {
["timeActive"] = 0,
["timeInactive"] = 0,
["active"] = false,
["lastSwitch"] = debugprofilestop(),
}
-- print("OPA; NEW SPELL")
end
if subEvent == "SPELL_AURA_APPLIED" and aura_env.debuffs[spell] then
aura_env.debuffs[spell].active = true
aura_env.debuffs[spell].timeInactive = aura_env.debuffs[spell].timeInactive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch
aura_env.debuffs[spell].lastSwitch = debugprofilestop()
elseif subEvent == "SPELL_AURA_REMOVED" and aura_env.debuffs[spell] then
aura_env.debuffs[spell].active = false
aura_env.debuffs[spell].timeActive = aura_env.debuffs[spell].timeActive + debugprofilestop() - aura_env.debuffs[spell].lastSwitch
aura_env.debuffs[spell].lastSwitch = debugprofilestop()
end
end
end
-- debug print pls
for k,v in pairs(aura_env.buffs) do
-- print(k,v)
if type(v) == "table" then
for k2,v2 in pairs(v) do
-- print(k2,v2)
if type(v2) == "table" then
for k3,v3 in pairs(v2) do
-- print(k3,v3)
end
end
end
end
end
end
--DISPLAY
function()
aura_env.combatTime = (debugprofilestop() - aura_env.startCombat) / 1000
local output = aura_env.formatTime(aura_env.combatTime) .. "\n"
aura_env.getColor(1)
for k,v in pairs(aura_env.buffs) do
-- DEBUG
-- print(k)
-- for k2,v2 in pairs(v) do
-- print(k2, v2)
-- end
-- print("DEBUG TIME", debugprofilestop())
-- print("END" .. "\n")
local totalActiveTime = 0
if v.active == true then
totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive
else
totalActiveTime = totalActiveTime + v.timeActive
end
output = string.format("%s %s%20s %10s %10s\n", output, aura_env.getColor(1), GetSpellInfo(k), aura_env.formatTime(totalActiveTime / 1000), string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100))
-- output = output .. aura_env.getColor(1) .. GetSpellInfo(k) .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n"
end
for k,v in pairs(aura_env.debuffs) do
-- DEBUG
-- print(k)
for k2,v2 in pairs(v) do
-- print(k2, v2)
end
-- print("DEBUG TIME", debugprofilestop())
-- print("END" .. "\n")
local totalActiveTime = 0
if v.active == true then
totalActiveTime = totalActiveTime + debugprofilestop() - v.lastSwitch + v.timeActive
else
totalActiveTime = totalActiveTime + v.timeActive
end
output = output .. aura_env.getColor(2)
if k == 233490 or (k >= 233496 and k <= 233499) then
if k == 233490 then
output = output .. GetSpellInfo(k) .. " 1"
elseif k >= 233496 and k <= 233499 then
output = output .. GetSpellInfo(k) .. " " .. (k % 233496) + 2
end
else
output = output .. GetSpellInfo(k)
end
output = output .. " " .. aura_env.formatTime(totalActiveTime / 1000) .. " " .. string.format("%.2f%%", ((totalActiveTime / 1000) / aura_env.combatTime) * 100) .. "\n"
end
return output
end
--INIT
aura_env.buffs = {}
aura_env.debuffs = {}
aura_env.combatTime = 0
aura_env.startCombat = 0
aura_env.formatTime = function(time)
local res, m, s = tonumber(string.format("%d", time)), 0, 0
while res >= 60 do
m = m + 1
res = res - 60
end
s = res
if s < 10 then
s = string.format("0%d", s)
end
if type(s) ~= "string" then tostring(s) end
return string.format("%d:%s", m, s)
end
aura_env.getColor = function(mode)
-- ff78cb00
local output = "\124c"
local colors = {}
if mode == 1 then
colors = {aura_env.config.bcolor[4], aura_env.config.bcolor[1], aura_env.config.bcolor[2], aura_env.config.bcolor[3]}
elseif mode == 2 then
colors = {aura_env.config.dcolor[4], aura_env.config.dcolor[1], aura_env.config.dcolor[2], aura_env.config.dcolor[3]}
end
local a, r, g, b = "00", "00", "00", "00"
a = string.format("%x", colors[1] * 255)
r = string.format("%x", colors[2] * 255)
g = string.format("%x", colors[3] * 255)
b = string.format("%x", colors[4] * 255)
if string.len(a) == 1 then a = "0" .. a end
if string.len(r) == 1 then r = "0" .. r end
if string.len(g) == 1 then g = "0" .. g end
if string.len(b) == 1 then b = "0" .. b end
output = output .. a .. r .. g .. b
return output
end