diff --git a/FreshShit/CLEUSaver/event.lua b/FreshShit/CLEUSaver/event.lua new file mode 100644 index 0000000..77f9fc5 --- /dev/null +++ b/FreshShit/CLEUSaver/event.lua @@ -0,0 +1,13 @@ +--- COMBAT_LOG_EVENT_UNFILTERED +---@param e string +---@param ... any +function(allstates, e, ...) + local spellId, err = CLEUParser.GetSpellId(...) + if err then return end + local spellname, err = CLEUParser.GetSpellName(...) + if err then return end + local subevent, err = CLEUParser.GetSubevent(...) + if err then return end + + aura_env.LogSpell(spellname, spellId, subevent, ...) +end diff --git a/FreshShit/CLEUSaver/init.lua b/FreshShit/CLEUSaver/init.lua new file mode 100644 index 0000000..25baa34 --- /dev/null +++ b/FreshShit/CLEUSaver/init.lua @@ -0,0 +1,1057 @@ +CLEUEventInfo = { + ["GENERIC"] = { + ["timestamp"] = 1, + ["subevent"] = 2, + ["hideCaster"] = 3, + ["sourceGUID"] = 4, + ["sourceName"] = 5, + ["sourceFlags"] = 6, + ["sourceRaidFlags"] = 7, + ["destGUID"] = 8, + ["destName"] = 9, + ["destFlags"] = 10, + ["destRaidFlags"] = 11, + }, + ["GENERIC_SPELL"] = { + ["spellId"] = 12, + ["spellName"] = 13, + ["spellSchool"] = 14, + }, + ["GENERIC_DAMAGE"] = { + ["amount"] = 15, + ["overkill"] = 16, + ["school"] = 17, + ["resisted"] = 18, + ["blocked"] = 19, + ["absorbed"] = 20, + ["critical"] = 21, + ["glancing"] = 22, + ["crushing"] = 23, + ["isOffHand"] = 24, + }, + ["GENERIC_MISSED"] = { + ["missType"] = 15, + ["isOffHand"] = 16, + ["amountMissed"] = 17, + ["critical"] = 18, + }, + ["GENERIC_HEAL"] = { + ["amount"] = 15, + ["overhealing"] = 16, + ["absorbed"] = 17, + ["critical"] = 18, + }, + ["GENERIC_HEAL_ABSORBED"] = { + ["extraGUID"] = 15, + ["extraName"] = 16, + ["extraFlags"] = 17, + ["extraRaidFlags"] = 18, + ["extraSpellID"] = 19, + ["extraSpellName"] = 20, + ["extraSchool"] = 21, + ["absorbedAmount"] = 22, + ["totalAmount"] = 23, + }, + ["GENERIC_ENERGIZE"] = { + ["amount"] = 15, + ["overEnergize"] = 16, + ["powerType"] = 17, + }, + ["GENERIC_DRAIN"] = { + ["amount"] = 15, + ["powerType"] = 16, + ["extraAmount"] = 17, + }, + ["GENERIC_LEECH"] = { + ["amount"] = 15, + ["powerType"] = 16, + ["extraAmount"] = 17, + }, + ["GENERIC_INTERRUPT"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + }, + ["GENERIC_DISPEL"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18, + }, + ["GENERIC_DISPEL_FAILED"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + }, + ["GENERIC_STOLEN"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18, + }, + ["GENERIC_EXTRA_ATTACKS"] = { + ["amount"] = 15, + }, + ["GENERIC_AURA_APPLIED"] = { + ["auraType"] = 15, + ["amount"] = 16, + }, + ["GENERIC_AURA_REMOVED"] = { + ["auraType"] = 15, + ["amount"] = 16, + }, + ["GENERIC_AURA_APPLIED_DOSE"] = { + ["auraType"] = 15, + ["amount"] = 16, + }, + ["GENERIC_AURA_REMOVED_DOSE"] = { + ["auraType"] = 15, + ["amount"] = 16, + }, + ["GENERIC_AURA_REFRESH"] = { + ["auraType"] = 15, + }, + ["GENERIC_AURA_BROKEN"] = { + ["auraType"] = 15, + }, + ["GENERIC_AURA_BROKEN_SPELL"] = { + ["extraSpellId"] = 15, + ["extraSpellName"] = 16, + ["extraSchool"] = 17, + ["auraType"] = 18, + }, + ["GENERIC_CAST_START"] = { + }, + ["GENERIC_CAST_SUCCESS"] = { + }, + ["GENERIC_CAST_FAILED"] = { + }, +} + +CLEUEventInfo["SWING_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] +CLEUEventInfo["SWING_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] +CLEUEventInfo["SWING_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] +CLEUEventInfo["SWING_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] +CLEUEventInfo["SWING_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] +CLEUEventInfo["SWING_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] +CLEUEventInfo["SWING_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] +CLEUEventInfo["SWING_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] +CLEUEventInfo["SWING_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] +CLEUEventInfo["SWING_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] +CLEUEventInfo["SWING_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] +CLEUEventInfo["SWING_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] +CLEUEventInfo["SWING_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] +CLEUEventInfo["SWING_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] +CLEUEventInfo["SWING_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] +CLEUEventInfo["SWING_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] +CLEUEventInfo["SWING_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] +CLEUEventInfo["SWING_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] +CLEUEventInfo["SWING_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] +CLEUEventInfo["SWING_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] +CLEUEventInfo["SWING_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] +CLEUEventInfo["SWING_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + +CLEUEventInfo["RANGE_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] +CLEUEventInfo["RANGE_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] +CLEUEventInfo["RANGE_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] +CLEUEventInfo["RANGE_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] +CLEUEventInfo["RANGE_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] +CLEUEventInfo["RANGE_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] +CLEUEventInfo["RANGE_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] +CLEUEventInfo["RANGE_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] +CLEUEventInfo["RANGE_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] +CLEUEventInfo["RANGE_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] +CLEUEventInfo["RANGE_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] +CLEUEventInfo["RANGE_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] +CLEUEventInfo["RANGE_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] +CLEUEventInfo["RANGE_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] +CLEUEventInfo["RANGE_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] +CLEUEventInfo["RANGE_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] +CLEUEventInfo["RANGE_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] +CLEUEventInfo["RANGE_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] +CLEUEventInfo["RANGE_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] +CLEUEventInfo["RANGE_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] +CLEUEventInfo["RANGE_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] +CLEUEventInfo["RANGE_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + +CLEUEventInfo["SPELL_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] +CLEUEventInfo["SPELL_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] +CLEUEventInfo["SPELL_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] +CLEUEventInfo["SPELL_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] +CLEUEventInfo["SPELL_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] +CLEUEventInfo["SPELL_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] +CLEUEventInfo["SPELL_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] +CLEUEventInfo["SPELL_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] +CLEUEventInfo["SPELL_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] +CLEUEventInfo["SPELL_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] +CLEUEventInfo["SPELL_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] +CLEUEventInfo["SPELL_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] +CLEUEventInfo["SPELL_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] +CLEUEventInfo["SPELL_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] +CLEUEventInfo["SPELL_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] +CLEUEventInfo["SPELL_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] +CLEUEventInfo["SPELL_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] +CLEUEventInfo["SPELL_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] +CLEUEventInfo["SPELL_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] +CLEUEventInfo["SPELL_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] +CLEUEventInfo["SPELL_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] +CLEUEventInfo["SPELL_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + +CLEUEventInfo["SPELL_PERIODIC_DAMAGE"] = CLEUEventInfo["GENERIC_DAMAGE"] +CLEUEventInfo["SPELL_PERIODIC_MISSED"] = CLEUEventInfo["GENERIC_MISSED"] +CLEUEventInfo["SPELL_PERIODIC_HEAL"] = CLEUEventInfo["GENERIC_HEAL"] +CLEUEventInfo["SPELL_PERIODIC_HEAL_ABSORBED"] = CLEUEventInfo["GENERIC_HEAL_ABSORBED"] +CLEUEventInfo["SPELL_PERIODIC_ENERGIZE"] = CLEUEventInfo["GENERIC_ENERGIZE"] +CLEUEventInfo["SPELL_PERIODIC_DRAIN"] = CLEUEventInfo["GENERIC_DRAIN"] +CLEUEventInfo["SPELL_PERIODIC_LEECH"] = CLEUEventInfo["GENERIC_LEECH"] +CLEUEventInfo["SPELL_PERIODIC_INTERRUPT"] = CLEUEventInfo["GENERIC_INTERRUPT"] +CLEUEventInfo["SPELL_PERIODIC_DISPEL"] = CLEUEventInfo["GENERIC_DISPEL"] +CLEUEventInfo["SPELL_PERIODIC_DISPEL_FAILED"] = CLEUEventInfo["GENERIC_DISPEL_FAILED"] +CLEUEventInfo["SPELL_PERIODIC_STOLEN"] = CLEUEventInfo["GENERIC_STOLEN"] +CLEUEventInfo["SPELL_PERIODIC_EXTRA_ATTACKS"] = CLEUEventInfo["GENERIC_EXTRA_ATTACKS"] +CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED"] = CLEUEventInfo["GENERIC_AURA_APPLIED"] +CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED"] = CLEUEventInfo["GENERIC_AURA_REMOVED"] +CLEUEventInfo["SPELL_PERIODIC_AURA_APPLIED_DOSE"] = CLEUEventInfo["GENERIC_AURA_APPLIED_DOSE"] +CLEUEventInfo["SPELL_PERIODIC_AURA_REMOVED_DOSE"] = CLEUEventInfo["GENERIC_AURA_REMOVED_DOSE"] +CLEUEventInfo["SPELL_PERIODIC_AURA_REFRESH"] = CLEUEventInfo["GENERIC_AURA_REFRESH"] +CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN"] = CLEUEventInfo["GENERIC_AURA_BROKEN"] +CLEUEventInfo["SPELL_PERIODIC_AURA_BROKEN_SPELL"] = CLEUEventInfo["GENERIC_AURA_BROKEN_SPELL"] +CLEUEventInfo["SPELL_PERIODIC_CAST_START"] = CLEUEventInfo["GENERIC_CAST_START"] +CLEUEventInfo["SPELL_PERIODIC_CAST_SUCCESS"] = CLEUEventInfo["GENERIC_CAST_SUCCESS"] +CLEUEventInfo["SPELL_PERIODIC_CAST_FAILED"] = CLEUEventInfo["GENERIC_CAST_FAILED"] + +---@class CLEUParser +CLEUParser = { + ---@param ... any + ---@return number, nil|string + GetTimestamp = function(...) + local val = select(CLEUEventInfo["GENERIC"]["timestamp"], ...) + if val == nil then return 0, "Timestamp is nil or missing" end + if type(val) ~= "number" then return 0, "Timestamp is not a number" end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSubevent = function(...) + local val = select(CLEUEventInfo["GENERIC"]["subevent"], ...) + if val == nil then return "", "Subevent is nil or missing" end + if type(val) ~= "string" then return "", "Subevent is not a string" end + return val, nil + end, + ---@param ... any + ---@return boolean, nil|string + GetHideCaster = function(...) + local val = select(CLEUEventInfo["GENERIC"]["hideCaster"], ...) + if val == nil then return false, "HideCaster is nil or missing" end + if type(val) ~= "boolean" then return false, "HideCaster is not a boolean" end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSourceGUID = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceGUID"], ...) + if val == nil then return "", "SourceGUID is nil or missing" end + if type(val) ~= "string" then return "", "SourceGUID is not a string" end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetSourceName = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceName"], ...) + if val == nil then return "", "SourceName is nil or missing" end + if type(val) ~= "string" then return "", "SourceName is not a string" end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetSourceFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceFlags"], ...) + if val == nil then return 0, "SourceFlags is nil or missing" end + if type(val) ~= "number" then return 0, "SourceFlags is not a number" end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetSourceRaidFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["sourceRaidFlags"], ...) + if val == nil then return 0, "SourceRaidFlags is nil or missing" end + if type(val) ~= "number" then return 0, "SourceRaidFlags is not a number" end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetDestGUID = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destGUID"], ...) + if val == nil then return "", "DestGUID is nil or missing" end + if type(val) ~= "string" then return "", "DestGUID is not a string" end + return val, nil + end, + ---@param ... any + ---@return string, nil|string + GetDestName = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destName"], ...) + if val == nil then return "", "DestName is nil or missing" end + if type(val) ~= "string" then return "", "DestName is not a string" end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetDestFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destFlags"], ...) + if val == nil then return 0, "DestFlags is nil or missing" end + if type(val) ~= "number" then return 0, "DestFlags is not a number" end + return val, nil + end, + ---@param ... any + ---@return number, nil|string + GetDestRaidFlags = function(...) + local val = select(CLEUEventInfo["GENERIC"]["destRaidFlags"], ...) + if val == nil then return 0, "DestRaidFlags is nil or missing" end + if type(val) ~= "number" then return 0, "DestRaidFlags is not a number" end + return val, nil + end, + + + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return number, nil|string + GetSpellId = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellId"], ...) + if val == nil then return 0, "SpellId is nil or missing" end + if type(val) ~= "number" then return 0, "SpellId is not a number" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return string, nil|string + GetSpellName = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellName"], ...) + if val == nil then return "", "SpellName is nil or missing" end + if type(val) ~= "string" then return "", "SpellName is not a string" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + ---@param ... any + ---@return number, nil|string + GetSpellSchool = function(...) + local val = select(CLEUEventInfo["GENERIC_SPELL"]["spellSchool"], ...) + if val == nil then return 0, "SpellSchool is nil or missing" end + if type(val) ~= "number" then return 0, "SpellSchool is not a number" end + return val, nil + end, + + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_HEAL| + --- |_ENERGIZE| + --- |_DRAIN| + --- |_LEECH| + --- |_EXTRA_ATTACKS| + --- |_AURA_APPLIED| + --- |_AURA_REMOVED| + --- |_AURA_APPLIED_DOSE| + --- |_AURA_REMOVED_DOSE| + ---@param ... any + ---@return number, nil|string + GetAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["amount"], ...) + if val == nil then return 0, "Amount is nil or missing" end + if type(val) ~= "number" then return 0, "Amount is not a number" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return number, nil|string + GetOverkill = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["overkill"], ...) + if val == nil then return 0, "Overkill is nil or missing" end + if type(val) ~= "number" then return 0, "Overkill is not a number" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return number, nil|string + GetSchool = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["school"], ...) + if val == nil then return 0, "School is nil or missing" end + if type(val) ~= "number" then return 0, "School is not a number" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetResisted = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["resisted"], ...) + if val == nil then return false, "Resisted is nil or missing" end + if type(val) ~= "boolean" then return false, "Resisted is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetBlocked = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["blocked"], ...) + if val == nil then return false, "Blocked is nil or missing" end + if type(val) ~= "boolean" then return false, "Blocked is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_HEAL| + --- + --- Apparently this is allowed to be nil? + ---@param ... any + ---@return boolean, nil|string + GetAbsorbed = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["absorbed"], ...) + if val == nil then return false, "Absorbed is nil or missing" end + if type(val) ~= "boolean" then return false, "Absorbed is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_MISSED| + --- |_HEAL| + ---@param ... any + ---@return boolean, nil|string + GetCritical = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["critical"], ...) + if val == nil then return false, "Critical is nil or missing" end + if type(val) ~= "boolean" then return false, "Critical is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return boolean, nil|string + GetGlancing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["glancing"], ...) + if val == nil then return false, "Glancing is nil or missing" end + if type(val) ~= "boolean" then return false, "Glancing is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + ---@param ... any + ---@return boolean, nil|string + GetCrushing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["crushing"], ...) + if val == nil then return false, "Crushing is nil or missing" end + if type(val) ~= "boolean" then return false, "Crushing is not a boolean" end + return val, nil + end, + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DAMAGE| + --- |_MISSED| + ---@param ... any + ---@return boolean, nil|string + GetIsOffHand = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return false, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["isOffHand"], ...) + if val == nil then return false, "IsOffHand is nil or missing" end + if type(val) ~= "boolean" then return false, "IsOffHand is not a boolean" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_MISSED| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return string, nil|string + GetMissType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return "", string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["missType"], ...) + if val == nil then return "", "MissType is nil or missing" end + if type(val) ~= "string" then return "", "MissType is not a string" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_MISSED| + ---@param ... any + ---@return number, nil|string + --- + --- return type is unconfirmed! + GetAmountMissed = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["amountMissed"], ...) + if val == nil then return 0, "AmountMissed is nil or missing" end + if type(val) ~= "number" then return 0, "AmountMissed is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return number, nil|string + GetOverhealing = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["overhealing"], ...) + if val == nil then return 0, "Overhealing is nil or missing" end + if type(val) ~= "number" then return 0, "Overhealing is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return string, nil|string + GetExtraGUID = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return "", string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraGUID"], ...) + if val == nil then return "", "ExtraGUID is nil or missing" end + if type(val) ~= "string" then return "", "ExtraGUID is not a string" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return string, nil|string + GetExtraName = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return "", string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraName"], ...) + if val == nil then return "", "ExtraName is nil or missing" end + if type(val) ~= "string" then return "", "ExtraName is not a string" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetExtraFlags = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraFlags"], ...) + if val == nil then return 0, "ExtraFlags is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraFlags is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetExtraRaidFlags = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraRaidFlags"], ...) + if val == nil then return 0, "ExtraRaidFlags is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraRaidFlags is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- + --- WARNING! Different from "GetExtraSpellId" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellId + ---@param ... any + ---@return number, nil|string + GetExtraSpellID = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraSpellID"], ...) + if val == nil then return 0, "ExtraSpellID is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraSpellID is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return string, nil|string + GetExtraSpellName = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return "", string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraSpellName"], ...) + if val == nil then return "", "extraSpellName is nil or missing" end + if type(val) ~= "string" then return "", "extraSpellName is not a string" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return number, nil|string + GetExtraSchool = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraSchool"], ...) + if val == nil then return 0, "ExtraSchool is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraSchool is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_HEAL_ABSORBED| + ---@param ... any + ---@return number, nil|string + GetAbsorbedAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["absorbedAmount"], ...) + if val == nil then return 0, "AbsorbedAmount is nil or missing" end + if type(val) ~= "number" then return 0, "AbsorbedAmount is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_ENERGIZE| + ---@param ... any + ---@return number, nil|string + GetOverEnergize = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["overEnergize"], ...) + if val == nil then return 0, "OverEnergize is nil or missing" end + if type(val) ~= "number" then return 0, "OverEnergize is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_ENERGIZE| + --- |_DRAIN| + --- |_LEECH| + --- + --- return type is unconfirmed! + ---@param ... any + ---@return number, nil|string + GetPowerType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["powerType"], ...) + if val == nil then return 0, "PowerType is nil or missing" end + if type(val) ~= "number" then return 0, "PowerType is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DRAIN| + --- |_LEECH| + ---@param ... any + ---@return number, nil|string + GetExtraAmount = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraAmount"], ...) + if val == nil then return 0, "ExtraAmount is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraAmount is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_INTERRUPT| + --- |_DISPEL| + --- |_DISPEL_FAILED| + --- |_STOLEN| + --- |_AURA_BROKEN_SPELL| + --- + --- WARNING! Different from "GetExtraSpellID" (capital ID!)
+ --- This is the doing of Blizzard, not me.
+ ---@see CLEUParser.GetExtraSpellID + ---@param ... any + ---@return number, nil|string + GetExtraSpellId = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["extraSpellId"], ...) + if val == nil then return 0, "ExtraSpellId is nil or missing" end + if type(val) ~= "number" then return 0, "ExtraSpellId is not a number" end + return val, nil + end, + + --- Specific to subevents prefixed by: + --- |Prefix| + --- |-----| + --- |RANGE| + --- |SWING| + --- |SPELL| + --- |SPELL_PERIODIC| + --- |SPELL_BUILDING| + --- + --- And suffixed by: + --- |Suffix| + --- |------| + --- |_DISPEL| + --- |_STOLEN| + --- |_AURA_APPLIED| + --- |_AURA_REMOVED| + --- |_AURA_APPLIED_DOSE| + --- |_AURA_REMOVED_DOSE| + --- |_AURA_REFRESH| + --- |_AURA_BROKEN| + --- |_AURA_BROKEN_SPELL| + ---@param ... any + ---@return number, nil|string + GetExtraAuraType = function(...) + local subevent, err = CLEUParser.GetSubevent(...) + if err then return 0, string.format("Failed getting subevent due to: %s", err) end + local val = select(CLEUEventInfo[subevent]["auraType"], ...) + if val == nil then return 0, "AuraType is nil or missing" end + if type(val) ~= "number" then return 0, "AuraType is not a number" end + return val, nil + end, +} + +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) + end + return table.concat(output, "; ") +end + +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end +--/run WeakAurasSaved.Cyka.CLEUExample = {} +---@param spellName string +---@param spellId number +---@param subevent string +---@param ... any +aura_env.LogSpell = function(spellName, spellId, subevent, ...) + table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) +end diff --git a/FreshShit/ChatKeyScanner/event.lua b/FreshShit/ChatKeyScanner/event.lua index 5ef215b..0ff1f41 100644 --- a/FreshShit/ChatKeyScanner/event.lua +++ b/FreshShit/ChatKeyScanner/event.lua @@ -46,6 +46,7 @@ function(allstates, e, ...) name = formattedName, keyname = keyname, color = color, + -- tooltip = message, -- Tooltip doesn't work for some reason... author = author, channel = channel, progressType = "timed", diff --git a/FreshShit/ChatKeyScanner/export b/FreshShit/ChatKeyScanner/export index 8498c5c..8b5bf38 100644 --- a/FreshShit/ChatKeyScanner/export +++ b/FreshShit/ChatKeyScanner/export @@ -1 +1 @@ -!nRXIsTnsYVL13rTMnyVwMhjS1MulpmbiGHc5SuxrHKglnwwhYs(0dEKSR)2VU7rJEzzzBo2TUIarAup97UNULAnfTbAQHAQDBRSx7T1uNOPAH)dw1oW)jn1JV62(AQd9dS4bhYmFWkWFQM6HUoF7BSaRzgd89DJCGLE(QrJc5rA9BT7UD0uFrE7oWnmpZX(bx774fPPEuV(d6DJeNh576haKRVIw)oA97s)DB6V7GlcBa4d1PmtoERkZmYX3lKy7iwqeCbaYihpNWXIRHlfRcxhf4yBZdcfeyq6c4Lw8HXJgn4LPCn1t7DX1N81lGNt3YIdyDbcmL76EMvOaVHXd5pY9IuHD58SMQ(rhOoqxDWb3ailgjQ6ux2laYtb96aobQ619UaqoTgqmoZnASMQhBcpuYPXEzSwKyjtF34jEzIEaZYjoe0rDivQZegQkYRjuTaghxuxihHCtFpG)telpFpoI4jmhVvh6uD7QbpSdMRJTNM6f9ozaA9Ie8jysrfZnC7ediaPRpJ81Id56MUSWqTHKA3exCsm4zj1pINwE1qNVXlViS8Weh18oxkKZLc5CPqoxDAVlXTKMKRDiGotMRqxlCorUrCvplBqev)pXSa(mJtIDDNzC7yhyBQbKaj8JSEbmQoMqOt8u5wvrESp6o5dgjWTl0K7z54zJwyVro2cvbOcoqeMWd(k6nneDLJ4bEm3FhCHjvy39aDMZe4P93L2oy59Iobcka5u9Mdo(SVQIgg3rjbBdU6AHzqWlPbLa9CGa9dE(jRBDgnw99yWIV5Jsc9(oBJEzimhnMf9f(lQMmppEWNfIMDGdSrlWngzKrbGRmeBXIyIGusqobxvOxup6ME96JbwrWdUAAuMlGGXoZJ4lCVbMxW9SrmV9EDeusGKBog9nOOHUKWB5KdpG(7csZmKIhOqjWLdDDsJ(9JJCDaVu1R(6GloRFpGZ9HaAHbQZ8SxsodH7D8KHySnqNJbti6UmH9Sw)96GkQWi(uI9FsOuagCceKHRGH5AQ9EEQJi6bYz6GR8a)fiLq6Yr0Iw8rmWxg2iYpOVIM6zWwKXAriQxipnmHN2Tcoszoo6fWt2F0mJd(w4ywalhX7MWDai6(J0LaeHbpVne)ywWdJ5qwlqBm2X8bW4liz6d0txphBrUUVnCWHUqsIzg347d)9uFxRkKFcgDeeDcckS7TH8NYCDdf6)FNHzPeuKwg15jlwu237nI495WbqSaWR7hbE4cMtqfcFgqH6eiWZE)Bed87iPesF0yWn8wOwcoeYjOm9uujaptp9rfvfF4nItUK9KGpGKdUHvOgaaqwr8yy99FJi8auUpiW8j2ljucwrxUqrHvPZBerpYpoirVRc1muL8sGqsmbasDL3iQFdpkoasMf5pZ4lqcLVnM59lG)N)tCP)Vae9iFDja6jpUKg5Tkl4rmWjZkG5k0k9eh4oZOVJ94OQups4rvuc06cGr2A7)AvvFD606uvjpUKQ6TkJPkNLpMDqGt8KhXtV4vONqGLHW5HKQpZYjelvEa)z4MneN6oZO1mJnar(DB4cfk7(ZBa(F28OlWBGNmnW3oGhc5Ry2(56VOtXkWIiCcvDZL1NqLl)CoWnRTQqQLdZ4Wi)ji)91PwKaMu7oWR(yD3McKREaC)A0uIQLVUa3y9djxP2QvRFJQVDMbvXkpy254AJC4Uqlwe)cplIn0L)Rct4wjG(PcqomGZEykw5xjWbWKy24JZm((SZNzi(b29mJlzpag0WyS2wj1yELriZfsnb))y2J8eFGqWXyMHGgcxdo2hdp8hGJ16DZ)AMXzxE9v3m4G(d(Hc083q)XfkssaL8srww(Z3NzieNoT3RlSB783mm9Mzg)5winNz85a(l1GgLTKlzx6EbYuYWev6FTCKsghvgpDkWrCV6WtjwQt7D2jNW9H3NHQdDJRNJ2BNC6OUk5qZ(BNHMRJdM6YxdTe0f1wvkBxfW8Sxpm1npMA3vWwRJ25d5qGs7o51oYxyrr9uE8xWzNC5mAT)(7JyqbjvluqBH8i(lEdTmascEk4GpfskpzMXJmKEYqKcqeKKJN86be554(hHq0JNDgCNHDao13fYbr80OypkxttcVBoVYX13ep(IICKsrM2Yo9QmZvEgFPrOLUnj7YNwiFmmGHfXl5KVliEIH57cFamUsWhLWXiueCs9v(hjPWAxWqz5p)gL)4mk1a8RP5wZV97CUNYK5TyCK5DqsYDDVxkmoBTyC(NRccHTSyW4q(3ZxgZO8Azgb2RXUt4AHMv6uUJs9XKewKV(UmUd(39VEQam5sPrxjnwesgfioDMqsZeVHw5vHao2CMXpdpnhsrZ88qD(cCsFa0(pcgbGktHwLcBMPG2SExusCU7H7liJUqmFZh3ktdaaSvMOS5kBpLPymZsXKbeSNfL1IvDgRKNoS2NgvF2UYpdL1IP2yy6jmxZMlwGag8NadMczKaanEhXw)es(ZlOuaNFOWVj8igL7QzIowK(rx3XZI)CELpeUq2z8DaRZ9ES9x4VaLP5XpZ6s20Y1ICNY(Vxy7Au(9P0yRcG9HeWM)nFucW9taCUxqrb4GQAtGR8BsOey7La2898xcqPCSGEZlbTuCk2)CjGKIsUEDlcHIuik3yArW6k5T66GS4w2EBjMRRbVs7zN6jd1EvPTifXf3CudYhC5FpcrhAYEce)V8nTdoV84KorQ87wu6tlSGparXVsr23FyD(shMJ5MpKsW8TWy5WS98dHMJGuEoHy0gO0IHamOtiUvlrtkNJLJD0Phmq)s1pRdx0VFVlaf2zh9LE3OR0PthrlnYmrGZnk9H5V88SCfY1WKLWVTB3oxwd88FSUjYpOejBSOd(to3a0nHmBeNI(tHl0HFnhJVgCxYOdeB(TJ0mzVckJ5CnWdjK95MUir)0uAvEGpInrnHTbLOvZmUQXPpKKyQXMlRgMerc2GdKY3Wv0s9htrn0rR54kX9V0CdR3TP4Vn2S(kTi0xsMLKAnez5ps0HHHIdnAslvdxKjyPBHwQMTq9EZcJsPx5ZNw8gsO2Y2qQzpvDBdbynt9QASrR2V7F2aVQrLvymVv0JA7(JiUR6qQ7ir5(LATsqtbBZslB9y(J438nu)44jtB(9sEvBLZ5)p3C5ylXt41vfCbBNqys7FAf0I5vK5TmjRJge4F4)PxNRF9ykhY(XmB8)RO6xwkQseZcVdT8omIp94DzO9EraRYUlfNKH2ckNGrOmjmOvrITClGSMu9cL(MRH3MzeA5cQiadsKnU9ixF)GMe6Bhq1e2D3DxogSRgd2RoggwnggU6yym)5SoEK599dau2SXgD6(S8x08J6oBSu5AZUnZ4eeDH(Opf0xyOVxMY(MpF4a)tX6FT8Xty98HyPN8dGcoFYjASCBaJqVkhd3yWKZdc8dQNKNLGgaLpjs4Z8OMg9SGku94s0d4B3DajiokH2oIs7Fc6Ff9uRNk3ogCsEeeJQogUCxGKsmIB1VuWLu7(hMNCYgHBe(hybEP2HTstTuJsoTgK7KP6bgsECcEj5hF)IEnML)jCS)tIZWcI5BTC4XksS5wRZwYoAnj59s3r2jRjP5x6okN5j39Rk9kLJHUDf2BA(Zcg9vtTKU30KTlx)NgWMKrBP7ixfbYQawjRSSUZKRxHDj)OjdO32cwgmoMbf6KCr)ih2hAB71zf2r2SmGd4aTVpZJWRBkAqFLWc(fwg7yXxh)5SM4tj4AOCekMoH1PvQ595jlMf51f9IzK34gYRUgFzxk5AdQXkwvFuuLhT3U4OLSy0qValS1gkjw(xIvAITL8oSk2ScSH2zQ2vROYYV4px20qUvvUrTKKqyZxzmtk58O9tjAU1Jbttst8qAQ6rSkTSRgwkNaF1Xd)vr1eL8uWXn6LuDCJg1vZ2sW1ehVyQhD6BkS2y5PXoU85Tp71z187wS6POBuH7Br4)vJ78sC61Vd)ygRnkRThN68NtP7NOpPYRZtolByb3HYfFgUH1eSYOmW2kLb28VrzUSpYF5Y9mJnScNtYZXg)Dj9LZS(Xc8(F)5EwfzOwGQ8HvUy1hXsGs)j51rgQPw7lwm9TQI1xOPsLcv1SxtZZXJ8bIfV0haUFlLoIHfUIjzVYX09FdKYz0lYXGELgU2))ESUx5P8fA9Z62a2un1BtVIg34tBE9aVPnFW6SnlmLYhE1GbxD58JhooDU0OZIE80CXvEQFLdqELZmonv5(tgYOHcETMG80jZEXJzvFL3p387kgB3kNFX(kFO0We2V7UvmLL97U9CdEB)U7m)WOslUOXSIWsPHjL4GfoGD0oQz626RS)CdhyFL9km2IeoMFcEronrV(iopADXzSs7)( \ No newline at end of file +!nR1ctnoos4FlBUJAd7qYMeEV1otT8imWSqGcNzOUIcBReRK4dh7C(bbMzx)B)6ULKFfhNWCSBDfdm2sT(6NQvlzP3wVVUwGUwNMT3R526At11SW)bTo23BUU2PxFxpDTbE(wC)JzdF0Y3BMU2Xo2F9RmFRyZ(EEoH2qtpF9Orb8q9ZACW27UxNdoy72D2E)93END0h1yha6xKe0BNDBPRXChoXZ)gpB3qDTt62RF3BvS5ephpFqc61wVxl9EDO)Un93DWgHbemJnKJDPXggA75gqQriZpeEa6FKTRDWeXZWJIwHNd9ThpM7hiqVFsd4Jw8brJg1)LzCDTZ7E5nN95lH(Pxzr(Soix5ooxyfiWniAa)jUBOgmk7N11mo5iT(gA9p6waSiKPAZCyVaGR5YMYLJIgcWaoZjCski34Zjq0UP7LxI0f5MkAHcHFONt0uxnHQ3gvSqUVlZ5lGcb2aWCShai3zK0Q2)6BUS7zGWWCSh7QRjEX3lKfsK3Iy)T8Xsdimehpg57Jc4gdDybb6di1Ei240iWtRSKIEl2AG9x5fBeAEGmWjRNTn5zBtE22KNTvZDrIzU2tzHC9Jb4gYCe6QiYaLgXtDTgd(fT)teZNhBEwKJtS5DtSHHP5tkKWpA9cy6ThcHYrZudvdLrm0XXEk4K6TlmeMLDua0yRwObAEQngmexsKbCoYgMAC0ZZTUZE0eT9jpIle05gEgefckM2ThD6fFwdc)8bhoeBXczzK(K4FAGJShlS5HEdFs5b3V12OiGm6KjSWFN)I2qMRl3)JcnGffcZAUEwyQlBSVniqwqWeQjIPvNH8xyb0o52UDHzWm)HxYDhJKT9ETuI0fUKe1waJye3Eky49GzsWmIGHCxlB3XKH4iXuwU)NDfgeqlSSZikGTGIy71s5frLkZmtnlyIe2OHyEvahHiqnnZ1ZLJ4mLz7U(uNmxF9Oxe9MKaWlk0Xg6q76p3)Yl61fWZdMtlIrALMwd1jl7aCgDF(ZaeBi8fXMnIn3Wn28DB4aZKD(5naDDmp8s8fONz(EJ95bbXMSXEzsc2kFGAiH5)hB0Gr8mxfOrZtgw5Kzkn9WOGqVPO96ZZSW50Q0FGTZd10Hca1ocE)vKlxZYZqGnMLq(KwJgn(nkTuSjLOH7h)jSTr2ChyLksEH(czdC4)QB00bC)TKK(HCuoWNZECgMeTa5azkKnFFS53I)uSP4hy0XMxXEesgfeHPKuCJ5weqMZC2lW)pH9eqx4eCiW01ytbpIn9gfBYX0)8GFi28lDV9FfBEXv3C9T9pQx)Fihp)n0lTuvsrOswYlYQF(wSPqDA1CVoWOhN9LbjVeB(NBH8m28J(8xQaM2BPAACH3fG1ofjkJDLsu7ujQioTYjrC3QWPGi1Q5o7Kr5oy)uOo2jQAjAVDYyJ60odmhUDkm3e5pZH)kSsWIFBvQUDTpZD8RdPozrQzhHy9ASohKbG2nBL16OQ7lVDkl(5c2PqoZghE4HicTrw1av0gOmI)IVqndKiXjxa(mgSwwS5tmKFQPi5OWNhg57kJ6bGCTD(Jay2J74u6UalvAMNdKdIKPrrUuUM6eUBUOXXXdk9qoZrPfPwRXjpL6UYk4RCgAHxLzx(WsLJb(qfu8qLK8nbZLoMVjIbW5vc5OagJqvWojw5FitH1mNJYYBXbQ(XEuId4xtYTMD43B)aLjZD5yKgDqAY9DEqPm2BTCm)Z1bqyilNmO(LL3PsyA)9kmc0RWVtyTu3kTk3jjXykglYxFFQ0b)7HVFUac5k5rhfpwgiqjT0mgcK6YOHgznHagBgB(ZqVzafDZls1Nwsq6JG1)jWjaCzgZ2pOEQbAZQdrj15(hFiNo6aZ5R)0wPwaGGTsvLnxB)PkfZW0umPebJzzzTyLNXs27Gk7nS6SDf7d118P2yy6jmxZMlxHab8NahwBYjbeA(osS(jK9FkNrbc(H6wNYHnpI5UQlTXI0pgg2Uw8NZA8HPlKFg36Sb39PMWEzGY0C5xyDfBwXArUV9H7l8D16(cxuc0rFnycykQTvoYoqs2Pm)hNWHOJyZ(tSXGRceEOKWJDGqVyZB98G)EUNJvo6GkzL0DoZXjqW5VWavOaz7jjRhh23oZhmW)iq9LquAbcv6XxyWEGf4r14DhSSj3nOa1k15k2CbTWgsCksKsv6J4CK)qO(X8u0wPeN4f5lzQgm1PaqDuY2Ts3FOxS5Vd24VoH5(lG24nNxqD2EBfYmqlS8Xubi6Dfh9qSzp7XtclmMDQMnFE2SfyJsf14SSgT((2rtFYg2HcVgfdU6JXrSVf1Ece)VAVnqWlpsUtKspUN160zw(H7KDNiw2SXUEbWECGmx2b4Kgq3JG5jWgA4wne714tyvvNC(r9nUs7JgWd9619sqVV4KFV7TgTB1QLyNjQekqmkQebzF8tPt5vTH58GFB2SzMj)4Y4y5pK7SalRTS1VLP)bvmGngXuSTx4bd43HtWtNWH8DaZwC4ipLJvWzm1PjMRxT95Kgj(NKzQ01Tr0eL21emIw1tLQAN)Om)sTnxvPisvcgGnK520rSt93NanSX0Htkf7FP(gwVBtXFRTz1fmrWxqNvS6vOYQFuWHZMe5(RtnvHuKQyjdHAQIHqBHMfeMWVIlZS8bi52QgqIBpXCpgMLvpjQQ2gnA(U)zn8PALwOWIErxA3ZVhXUS1AUNuLhwP3sctoFZkR(8u(t4jGhyCA00z1)wHOQTYe8)NBUA0KrcFFfZMZ3juMKTbTgwXSgYSEgz7Odb(h(Fgvf6xnsza7ht9X)Vc1VSsOKQzUJMlBaJ48yVpf2hetyBV7kXKC0wqvbmcs50Gg5z2Q9aQslnYvbBM9TwpLrRwrftWGeztAoYXZZVobFtFQ0Uo7U7QryC5imE9ryq5imy9ryc)50nUOY775dqwV2gT68S6x09J2UXyfVvMDl28meUapmMc2ExGNBQX(2pECFVZXYyT8WvyD9G5sZ98H6gNBhornmqqOtKX0jcC5CFFp)Qz5fsyaiNls4ZCP9(5AbfA6YvWd4T7oGgefk5TTOc95W2qXi1Q5YDtGGKNa1OSLHlUzoYigYT6vyYLY6(hdp7Snc2i4pW60s8dBLKAPcJCsni3Rs1dcKA5e8rko(HLDAKf)jyI3CXAy(r8Twn9yfjJ5wVMHKU0Qm59khr6kRY08RCefZ8K591LFfYXqVUgJnj)zoN(6zwsgBsY2vB)tMWkZOTYrKPIavvaRLxwv3P851yuQVftF6qtWYGdTNYZTHWL9J6RKqdBVwRXi4ppZwmM(2sR4h5H4Z1f7ZETqb)qjtST4VM4509INWWxHXryyAfuLvPIJLtvmlkRl78vuV4eWlVgF1UuYSnOARzv9HHLU0EZu3b6Zxom05qHBTHsIL9SOssSTIJIk)MvGb0m10UEfvw887CyZc4wLfg1qXcHpFTrMmYzH9dsl3RtatsstYqsQ6rSs9SRhkftGV(4W)U4Q0ipdcCdFjXgxRwv1STcSMA7gr7rN(0aVAuMpX2HVO)zVwRxC3Ynp5dJY9Edc)VBSZQXjp)o8Bs8QHSY94uv8CcF)a9Lr((IKtZgMlCOyXNbBynfRmkLSTseGn)BuNlgJ8xUEhBUHvWcAEgX4VlTVyM13Nt2)7p3Z6OdvsuPDwAJLVelrk9NvC10goHp8XKJ6m)DAJAmqxRYtKm5uvXct01OAOk7kRr3NJN49fnELhqCVgTBjUJxLC7)k9(S9Vbwzp6f1Txd2hL1D(Sz6A3L80I3wQfVOuYJjwCNwOJOIUstNYdgIxHKPSN17ThPBbH8z0nIAU8UUa9A7sTGLaRR1nPscWQyJTavhdMUCfyGNV8i8laadeVgr4vPsx7cCFFYlytic9sLPbszA3sKO2lirf(KjzyEhP0bKy4nYqrqiEtDEBy(IFigjlt6WiP9mIfDp4EBKGf(cpLO)engijgef09(7TH9f)WrsosnJ2CzJ5199EJy(IFoQsu(uIcmisG(2)nsawYN5sYzQx0ia9zK0vEtXbVrss(pHwjMbGauueDdTF4BeJZ8z5KCcAXq1qELfs)92W0IFPVs0xIesJjcqU3(nI7v9beLCxqIrONHIadz3fSiVvzbR8luwM5rrpAIKuBiigfRT)R1urFe0LBQKDxWu9wLXC5FL1sStiXQPWzPuCRqlCtNx69pUKB5mErBPLtXk4O5kzU86hFD)(xF1I3qD6syFE9B67oR(JwxS5I3cz1DyV0RToDX29MoGjUaZVMlXEYD2E5(RED2EHcbeR)xAIWETpOqwPED2TK01eSfwbVxNDwCvnQXL5ViukSQuVoTRyMknIkMMqJUqwgQTm5)imwSuausL21NWa7o49fw))(d \ No newline at end of file diff --git a/FreshShit/OreCamper/export b/FreshShit/OreCamper/export new file mode 100644 index 0000000..04c8074 --- /dev/null +++ b/FreshShit/OreCamper/export @@ -0,0 +1,2 @@ +rt +!LJrBtnoVX)l05M5UPeMeia39HBMM3aY1qcnY8WD94CIWwXrhosPs2qG26F7DxjlBhiaPx78mtNoWKOSA1Q99xKFdFpFI2NS)EnoAVd8jl8jH4)a0iL8EFs3rxn0NCJufYuTPb3gQKl9jTJ5p(ivfMn1tkJt4aOvJMntZs8pP5No(Jh(PpEqJM738OgnB6pRwtGYp42)WJoQ5rFS5N(y96np44Jpc3VPpHkcMlvxi5IeFsNEd96n2DVDKXsfWsdB4pSU)W9nFEG5ZMiq4a6L0agUfHgKWLcTrUsOQeybS)mUGRNBxdlTqH1jkEuetPTu3RaaUmKDt6SzEpSK5toR3Glo5YbW(MFstv09XBLfh3puBPRo9g2DmrcbofFLpzsNweVjeVwJbILIxkzzm9bG4ebDbl)uMJaxaJgNmVKixOygIqUO3GbiEPIswlXY8bY40fcIv0B4tu0qEQg0c1Rd4Rzd4lGl9gGDJ5rIsTkOxmecuG49nMfLRXaAglPgRpC8jbXuTgppiNbiWfPGT2P6S7(uOA(JSNceaFtURtvtzdJPSHXu2WykRV3HiYubFbnHzU5aASv4IncZWdDof4U2v9cJatc5VLsvSSPNKghNn9Q5CGaeLr0SMWWhaTopaCRtx6okb5w0RrlbpfIqkyOAvmJhzvhrkEO94J7A2b0DIKtaNmqmiJB1T)Le4AKju0RZOrTuo3BhKky37lTrjYG7a)ndYhx)a0sXHiUopCl9CUG1P7Pw(lfHYpn58U9Vk(qnedotbonG)jnHAOKnG5eeQLdjDg3RhGOMfplpoYB0fogQVWWpnSY0v8qWBd1M00eGmJwMu6dqvbdyIieHdoQUrSd5v2hintjOX)Mtq2)iNrd)zLipsieOGaNyJB0mKwAxyKrFdeCbLl2ESlIL3o8ToRfb4qMc1T5IFJ6Bu(d5Amq1JTc(X7wwM7cnVBmpLHOJxZlaC4rxnr4wK9AMe8PIPraRp6sVb9h2duYGSmj4vdxSz(kT2fznPQxkoRYLgY00eubAc0wQKrkMwd5Dc4ANuGmMp5ef)XSP)LuAi68b58DQrRA5BguDjo(ppxHEHuMm)ICgYVTjzuRWFMQtyHSqimbz4QH2y6yqObdpyYsvaKEX3Dz)SPTJPIBZzwp3E9r33zqa51DO6eUiQnvD9L9Rv(RAe8agFdjE)BiOLgVCUno0ePgF6TN3F0Xxr)2prh0vmxeMjxSmnjMJPwkSUvuFF1O(caPtUa5XlxgI2esA(3itGrwbwksAHm1Rw4Y6(BPO7Bxic4IYCuEJf42Q6rVC5m3TwRw20lh2hQ)HhWwjeCpZ(sTA1(tGWtxKnLghB4hD1LvrasNRb5seTguTmvf8cBHfKrUzJ7ozJqHuvrSKYTMLkmTq8(cEAxGt21DV7w5wG1t21rHpK9LSP2)4Zk5YS)XNZMUJvtTdG7CMiBQIbUIW3mr4tovPaypi4TdC1BFqmeyctC3EHSLsnpPp4JtHIuF3YC)iB6NbYj4XokTfhiBA9NCtXsOEmQQa1IbH)E5EU)cMtfrSqZ2jQuqj9mu0ZL3)A77sgHUMg82jHVGfUZgqfJooJhYEnY5ktyWPqUdGoxdL3l2WbyRwYThXJVWs6tzj463)HSP)XTJiwR4NDow7ntQGW43VZ7a39)W7qHj3Xz332y8Hk0)FwUSWd97Vfb(roNG2TYJVnUaVnsG(OrjrDEOOTi7lG3ZB0yCWCwWTfPDwVJAdqOO4gsKuKxBoy8HuEO)XMAtglM)tte9DyUuXdfPATOnqgXdGu2UG(QHXfIY33)h5Ic1qO8ZEUeU6H1GUi(FWMIkAjVV4efwMh72gQYC7dDZjGbs1XdYl0uTK7eSSBc2GHNT67e9Ckeq8vxhtnChaOuIPHkdw2LVtK)ZTOphdE2(r6TAjMD4E6dRDNBrJwvW(BooSwdh8YoPADP3Okxz(yc1RaYw107S(D(Zff1nBUw)H9hoS34jd6DINRXXVvPvsd(yBn8zGKyXYmkbZ265WrivTN7Rp9C3bDPDdmBuBu9FWVM6F5)xO(h3)0Z2c9FoA)AgGM)Aga9VKbyt9J)7OHOX(pZqm0m48gmaDgnCIBSK3Ya4WRQfOAOZlAbUX38WaEvu15Vrq(SV5mLzYOcyYsQLdj4TvC5ywA7DqyMhHOr20lGM)JlaBgXbOHjJ7CgpAogTwpFaG2XqrftvesRUD)38vsw3Gu9rlm0gAkkKb5xh273kFjnxU(2p)j9wFIjZ0NAtP184cecwryBgj1C)pvyDJhNlVgpRn8yDeno0C1P0AfgosOV(kg92wqvh91NZc50RjiE6RBlxbDx1sXeudK9Krrqrq5elDUz9IJqL)Lf78F5RQDLhxeHMpku7YHIEwBJMoS(0HzF5L6YY2Kn0Yx(OXOISZBBbEsrL7bB9vkkyLVQy16V6uoPrLYtFNP7TdYAN69LEZP1NqNUcjexGdnBcsmeVR9bhmp3GuXHw7STzqoB04()1rd9An45V10JsqXHXORkJ(nQI7aMR5(O06)Vc \ No newline at end of file diff --git a/FreshShit/PersonalAnnouncer/event.lua b/FreshShit/PersonalAnnouncer/event.lua index 51af5ac..4a18fc1 100644 --- a/FreshShit/PersonalAnnouncer/event.lua +++ b/FreshShit/PersonalAnnouncer/event.lua @@ -1,4 +1,4 @@ --- TICKER_500 +w-- TICKER_500 function(e) if ActiveSet == nil then ActiveSet = Cooldowns[UnitClass("player")]