diff --git a/Heimdall.lua b/Heimdall.lua index 23e79df..a2a7322 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -357,17 +357,17 @@ local function init() return input end - shared.Whoer.Init() shared.Messenger.Init() + shared.StinkyTracker.Init() + shared.AgentTracker.Init() + shared.Whoer.Init() shared.Spotter.Init() shared.DeathReporter.Init() shared.Inviter.Init() shared.Dueler.Init() shared.Bully.Init() - shared.AgentTracker.Init() shared.Macroer.Init() shared.Commander.Init() - shared.StinkyTracker.Init() shared.CombatAlerter.Init() print("Heimdall loaded!") end diff --git a/Modules/Macroer.lua b/Modules/Macroer.lua index df9b2e8..c46d2c5 100644 --- a/Modules/Macroer.lua +++ b/Modules/Macroer.lua @@ -42,7 +42,7 @@ function shared.Macroer.Init() return aPriority > bPriority end) - local lines = {"/targetenemy"} + local lines = { "/targetenemy" } for _, stinky in pairs(sortedStinkies) do if stinky.seenAt > GetTime() - 600 then print(string.format("Macroing %s", stinky.name)) @@ -55,100 +55,8 @@ function shared.Macroer.Init() EditMacro(idx, "HeimdallTarget", "INV_Misc_QuestionMark", body) end - local whoRegex = "([^ -/]+)-?%w*/(%w+)" - ---@param msg string - ---@return table - local function ParseWho(msg) - local stinkies = {} - for name, class in string.gmatch(msg, whoRegex) do - stinkies[name] = { - name = name, - class = class, - seenAt = GetTime(), - hostile = true - } - end - return stinkies - end - local seeRegex = "I see %((%w+)%) ([^ -/]+)-?%w*/(%w+)" - ---@param msg string - ---@return table - local function ParseSee(msg) - local stinkies = {} - local aggression, name, class = string.match(msg, seeRegex) - if not name or not class then - return stinkies - end - local stinky = { - name = name, - class = class, - seenAt = GetTime(), - hostile = aggression == "Hostile" - } - stinkies[name] = stinky - return stinkies - end - local arrivedRegex = "([^ -/]+)-?%w* of class (%w+)" - local arrivedRegexAlt = "([^ -/]+)-?%w* %(!!!!%) of class (%w+)" - ---@param msg string - ---@return table - local function ParseArrived(msg) - local stinkies = {} - local name, class = string.match(msg, arrivedRegex) - if not name or not class then - name, class = string.match(msg, arrivedRegexAlt) - end - if not name or not class then - return stinkies - end - local stinky = { - name = name, - class = class, - seenAt = GetTime(), - hostile = true - } - return stinkies - 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 doUpdate = false - if string.find(msg, "^who:") then - local whoStinkies = ParseWho(msg) - for name, stinky in pairs(whoStinkies) do - if stinky.hostile then - recentStinkies[name] = stinky - doUpdate = true - end - end - end - if string.find(msg, "^I see") then - local seeStinkies = ParseSee(msg) - for name, stinky in pairs(seeStinkies) do - if stinky.hostile then - recentStinkies[name] = stinky - doUpdate = true - end - if not stinky.hostile then - recentStinkies[name] = nil - doUpdate = true - end - end - end - if string.find(msg, " and guild ") then - local arrivedStinkies = ParseArrived(msg) - for name, stinky in pairs(arrivedStinkies) do - recentStinkies[name] = stinky - doUpdate = true - end - end - if doUpdate then - FixMacro(recentStinkies) - end + shared.stinkyTracker.stinkies:onChange(function(value) + FixMacro(value) end) print("Heimdall - Macroer loaded")