diff --git a/Modules/Macroer.lua b/Modules/Macroer.lua index b38dcf9..9ea1f6a 100644 --- a/Modules/Macroer.lua +++ b/Modules/Macroer.lua @@ -5,6 +5,14 @@ local addonname, shared = ... ---@diagnostic disable-next-line: missing-fields shared.Macroer = {} function shared.Macroer.Init() + ---@class stinky + ---@field name string + ---@field class string + ---@field seenAt number + + ---@type table + local recentStinkies = {} + local function FindOrCreateMacro(macroName) local idx = GetMacroIndexByName(macroName) if idx == 0 then @@ -14,35 +22,69 @@ function shared.Macroer.Init() return idx end - ---@type table - local recentStinkies = {} + ---@param stinkies table + local function FixMacro(stinkies) + local lines = {} + for name, info in pairs(stinkies) do + if info.seenAt > GetTime() - 600 then + print(string.format("Macroing %s", name)) + lines[#lines + 1] = string.format("/tar %s", name) + end + end + + local idx = FindOrCreateMacro("HeimdallTarget") + local body = strjoin("\n", unpack(lines)) + EditMacro(idx, "HeimdallTarget", "INV_Misc_QuestionMark", body) + print("Updated macro") + end local frame = CreateFrame("Frame") frame:RegisterEvent("CHAT_MSG_CHANNEL") frame:SetScript("OnEvent", function(self, event, msg, sender, ...) if not Heimdall_Data.config.macroer.enabled then return end - local stinky = string.match(msg, "I see (Hostile) (.*) of") - if not stinky then - stinky = string.match(msg, "^(.*) of class") + local doUpdate = false + if string.find(msg, "^who:") then + for name, class in string.gmatch(msg, "([^ -/]+)-?%w*/(%w+)") do + recentStinkies[name] = { + name = name, + class = class, + seenAt = GetTime(), + } + doUpdate = true + end end - if stinky then - stinky = strtrim(stinky) - stinky = string.match(stinky, "^(.*)-?") - recentStinkies[stinky] = GetTime() + local name, class = string.match(msg, "I see (Hostile) (.+)/(%w+) of") + if not name then + name, class = string.match(msg, "^(.+) of class (%w+)") + end + if name then + name = strtrim(name) + name = string.match(name, "^(.*)-?") + recentStinkies[name] = { + name = name, + class = class, + seenAt = GetTime(), + } + doUpdate = true + end + if doUpdate then + FixMacro(recentStinkies) end end) hooksecurefunc("JumpOrAscendStart", function() - local idx = FindOrCreateMacro("HeimdallTarget") - local stinkies = {} - for stinky, time in pairs(recentStinkies) do - if time > GetTime() - 10 then - stinkies[#stinkies + 1] = string.format("/tar %s", stinky) - end - end - local body = strjoin("\n", unpack(stinkies)) - EditMacro(idx, "HeimdallTarget", "INV_Misc_QuestionMark", body) - print("Jumped") + FixMacro({ + ["茶杯鸭跳芭蕾"] = { + name = "茶杯鸭跳芭蕾", + class = "Paladin", + seenAt = GetTime(), + }, + ["Asen"] = { + name = "Asen", + class = "Warlock", + seenAt = GetTime(), + }, + }) end) print("Heimdall - Macroer loaded")