diff --git a/FreshShit/WhoSniffer/event.lua b/FreshShit/WhoSniffer/event.lua index 7785c7a..370e8bc 100644 --- a/FreshShit/WhoSniffer/event.lua +++ b/FreshShit/WhoSniffer/event.lua @@ -2,50 +2,52 @@ function() for i = 1, GetNumWhoResults() do local name, guild, level, race, class, zone = GetWhoInfo(i) - ---@type WHOQuery - local query = aura_env.lastQuery - if not query then - print("No query wtf?") - return - end - ---@type WHOFilter[] - local filters = query.filters - for _, filter in pairs(filters) do - if not filter(name, guild, level, race, class, zone) then - --print("Filter failed", filter, name, guild, level, race, class, - -- zone) - return - end - end + if not aura_env.ignored[name] then + ---@type WHOQuery + local query = aura_env.lastQuery + if not query then + print("No query wtf?") + return + end + ---@type WHOFilter[] + local filters = query.filters + for _, filter in pairs(filters) do + if not filter(name, guild, level, race, class, zone) then + --print("Filter failed", filter, name, guild, level, race, class, + -- zone) + return + end + end - local player = aura_env.stinkies[name] - if not player then - player = Player.new(name, guild, race, class, zone) - local timestamp = date("%Y-%m-%dT%H:%M:%S") - if not WeakAurasSaved.Cyka.WhoSniffer[name] then - WeakAurasSaved.Cyka.WhoSniffer[name] = {} - end - WeakAurasSaved.Cyka.WhoSniffer[name][timestamp] = { - ["name"] = name, - ["guild"] = guild, - ["race"] = race, - ["class"] = class, - ["zone"] = zone - } + local player = aura_env.stinkies[name] + if not player then + player = Player.new(name, guild, race, class, zone) + local timestamp = date("%Y-%m-%dT%H:%M:%S") + if not WeakAurasSaved.Cyka.WhoSniffer[name] then + WeakAurasSaved.Cyka.WhoSniffer[name] = {} + end + WeakAurasSaved.Cyka.WhoSniffer[name][timestamp] = { + ["name"] = name, + ["guild"] = guild, + ["race"] = race, + ["class"] = class, + ["zone"] = zone + } - local stinky = WeakAurasSaved.Cyka.stinkies[name] - if stinky then - PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") - else - PlaySoundFile("Interface\\Sounds\\Cloak.ogg", "Master") - end + local stinky = WeakAurasSaved.Cyka.stinkies[name] + if stinky then + PlaySoundFile("Interface\\Sounds\\Domination.ogg", "Master") + else + PlaySoundFile("Interface\\Sounds\\Cloak.ogg", "Master") + end - aura_env.Notify(player) - end - player:Touch() - player.zone = zone - aura_env.stinkies[name] = player - end + aura_env.Notify(player) + end + player:Touch() + player.zone = zone + aura_env.stinkies[name] = player + end + end -- Turns out WA cannot do this ( -- aura_env.UpdateMacro() _G["FriendsFrameCloseButton"]:Click() diff --git a/FreshShit/WhoSniffer/init.lua b/FreshShit/WhoSniffer/init.lua index 865e0d3..3bc543e 100644 --- a/FreshShit/WhoSniffer/init.lua +++ b/FreshShit/WhoSniffer/init.lua @@ -1,6 +1,8 @@ if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end if not WeakAurasSaved.Cyka.WhoSniffer then WeakAurasSaved.Cyka.WhoSniffer = {} end +aura_env.ignored = { "Maritza", "Goodbones" } + ---@class aura_env ---@field raceMap table ---@field stinkies table @@ -21,69 +23,69 @@ if not WeakAurasSaved.Cyka.WhoSniffer then WeakAurasSaved.Cyka.WhoSniffer = {} e ---@param input string ---@return number local function utf8len(input) - local len = 0 - local i = 1 - local n = #input - while i <= n do - local c = input:byte(i) - if c >= 0 and c <= 127 then - i = i + 1 - elseif c >= 194 and c <= 223 then - i = i + 2 - elseif c >= 224 and c <= 239 then - i = i + 3 - elseif c >= 240 and c <= 244 then - i = i + 4 - else - i = i + 1 - end - len = len + 1 - end - return len + local len = 0 + local i = 1 + local n = #input + while i <= n do + local c = input:byte(i) + if c >= 0 and c <= 127 then + i = i + 1 + elseif c >= 194 and c <= 223 then + i = i + 2 + elseif c >= 224 and c <= 239 then + i = i + 3 + elseif c >= 240 and c <= 244 then + i = i + 4 + else + i = i + 1 + end + len = len + 1 + end + return len end ---@param input string ---@param targetLength number ---@param left boolean ---@return string local function padString(input, targetLength, left) - left = left or false - local len = utf8len(input) - if len < targetLength then - if left then - input = input .. string.rep(" ", targetLength - len) - else - input = string.rep(" ", targetLength - len) .. input - end - end - return input + left = left or false + local len = utf8len(input) + if len < targetLength then + if left then + input = input .. string.rep(" ", targetLength - len) + else + input = string.rep(" ", targetLength - len) .. input + end + end + return input end ---@class WHOQuery ---@field query string ---@field filters WHOFilter[] WHOQuery = { - ---@param query string - ---@param filters WHOFilter[] - ---@return WHOQuery - new = function(query, filters) - local self = setmetatable({}, {__index = WHOQuery}) - self.query = query - self.filters = filters - return self - end + ---@param query string + ---@param filters WHOFilter[] + ---@return WHOQuery + new = function(query, filters) + local self = setmetatable({}, { __index = WHOQuery }) + self.query = query + self.filters = filters + return self + end } ---@alias WHOFilter fun(name: string, guild: string, level: number, race: string, class: string, zone: string): boolean ---@type WHOFilter local NotSiegeOfOrgrimmarFilter = function(name, guild, level, race, class, zone) - if not zone then return false end - return zone ~= "Siege of Orgrimmar" + if not zone then return false end + return zone ~= "Siege of Orgrimmar" end ---@type WHOFilter local AllianceFilter = function(name, guild, level, race, class, zone) - if not race then return false end - if not aura_env.raceMap[race] then return false end - return aura_env.raceMap[race] == "Alliance" + if not race then return false end + if not aura_env.raceMap[race] then return false end + return aura_env.raceMap[race] == "Alliance" end aura_env.messageQueue = {} @@ -93,36 +95,36 @@ aura_env.whoQueryIdx = 1 aura_env.whoQueries = {} aura_env.whoQueries[1] = WHOQuery.new("g-\"БеспредеЛ\"", {}) aura_env.whoQueries[2] = WHOQuery.new( - "z-\"Orgrimmar\" z-\"Durotar\" r-\"Human\" r-\"Dwarf\" r-\"Night Elf\" r-\"Gnome\"", - {NotSiegeOfOrgrimmarFilter, AllianceFilter}) + "z-\"Orgrimmar\" z-\"Durotar\" r-\"Human\" r-\"Dwarf\" r-\"Night Elf\" r-\"Gnome\"", + { NotSiegeOfOrgrimmarFilter, AllianceFilter }) aura_env.whoQueries[3] = WHOQuery.new( - "z-\"Orgrimmar\" z-\"Durotar\" r-\"Draenei\" r-\"Worgen\" r-\"Kul Tiran\" r-\"Dark Iron Dwarf\" r-\"Void Elf\" r-\"Lightforged Draenei\" r-\"Mechagnome\"", - {NotSiegeOfOrgrimmarFilter, AllianceFilter}) + "z-\"Orgrimmar\" z-\"Durotar\" r-\"Draenei\" r-\"Worgen\" r-\"Kul Tiran\" r-\"Dark Iron Dwarf\" r-\"Void Elf\" r-\"Lightforged Draenei\" r-\"Mechagnome\"", + { NotSiegeOfOrgrimmarFilter, AllianceFilter }) aura_env.queryPending = false aura_env.lastQuery = nil aura_env.raceMap = { - ["Orc"] = "Horde", - ["Undead"] = "Horde", - ["Tauren"] = "Horde", - ["Troll"] = "Horde", - ["Blood Elf"] = "Horde", - ["Goblin"] = "Horde", - ["Human"] = "Alliance", - ["Dwarf"] = "Alliance", - ["Night Elf"] = "Alliance", - ["Gnome"] = "Alliance", - ["Draenei"] = "Alliance", - ["Worgen"] = "Alliance", - ["Vulpera"] = "Horde", - ["Nightborne"] = "Horde", - ["Zandalari Troll"] = "Horde", - ["Kul Tiran"] = "Alliance", - ["Dark Iron Dwarf"] = "Alliance", - ["Void Elf"] = "Alliance", - ["Lightforged Draenei"] = "Alliance", - ["Mechagnome"] = "Alliance", - ["Mag'har Orc"] = "Horde" + ["Orc"] = "Horde", + ["Undead"] = "Horde", + ["Tauren"] = "Horde", + ["Troll"] = "Horde", + ["Blood Elf"] = "Horde", + ["Goblin"] = "Horde", + ["Human"] = "Alliance", + ["Dwarf"] = "Alliance", + ["Night Elf"] = "Alliance", + ["Gnome"] = "Alliance", + ["Draenei"] = "Alliance", + ["Worgen"] = "Alliance", + ["Vulpera"] = "Horde", + ["Nightborne"] = "Horde", + ["Zandalari Troll"] = "Horde", + ["Kul Tiran"] = "Alliance", + ["Dark Iron Dwarf"] = "Alliance", + ["Void Elf"] = "Alliance", + ["Lightforged Draenei"] = "Alliance", + ["Mechagnome"] = "Alliance", + ["Mag'har Orc"] = "Horde" } ---@type table @@ -136,65 +138,65 @@ aura_env.stinkies = {} ---@field zone string ---@field lastSeen number Player = { - ---@param name string - ---@param guild string - ---@param race string - ---@param class string - ---@param zone string - ---@return Player - new = function(name, guild, race, class, zone) - local self = setmetatable({}, {__index = Player}) - self.name = name - self.guild = guild - self.race = race - self.class = class - self.zone = zone - return self - end, - Touch = function(self) self.lastSeen = GetTime() end, - ToString = function(self) - local out = string.format("%s %s %s", padString(self.name, 16, true), - padString(self.guild, 26, false), - padString(self.zone, 26, false)) - return - string.format("|cFF%s%s|r", aura_env.classColors[self.class], out) - end + ---@param name string + ---@param guild string + ---@param race string + ---@param class string + ---@param zone string + ---@return Player + new = function(name, guild, race, class, zone) + local self = setmetatable({}, { __index = Player }) + self.name = name + self.guild = guild + self.race = race + self.class = class + self.zone = zone + return self + end, + Touch = function(self) self.lastSeen = GetTime() end, + ToString = function(self) + local out = string.format("%s %s %s", padString(self.name, 16, true), + padString(self.guild, 26, false), + padString(self.zone, 26, false)) + return + string.format("|cFF%s%s|r", aura_env.classColors[self.class], out) + end } aura_env.classColors = { - ["Warrior"] = "C69B6D", - ["Paladin"] = "F48CBA", - ["Hunter"] = "AAD372", - ["Rogue"] = "FFF468", - ["Priest"] = "FFFFFF", - ["Death Knight"] = "C41E3A", - ["Shaman"] = "0070DD", - ["Mage"] = "3FC7EB", - ["Warlock"] = "8788EE", - ["Monk"] = "00FF98", - ["Druid"] = "FF7C0A", - ["Demon Hunter"] = "A330C9" + ["Warrior"] = "C69B6D", + ["Paladin"] = "F48CBA", + ["Hunter"] = "AAD372", + ["Rogue"] = "FFF468", + ["Priest"] = "FFFFFF", + ["Death Knight"] = "C41E3A", + ["Shaman"] = "0070DD", + ["Mage"] = "3FC7EB", + ["Warlock"] = "8788EE", + ["Monk"] = "00FF98", + ["Druid"] = "FF7C0A", + ["Demon Hunter"] = "A330C9" } aura_env.UpdateMacro = function() - local body = {} - for k, v in pairs(aura_env.stinkies) do - table.insert(body, string.format("/tar %s", v.name)) - end - EditMacro("tar", nil, nil, string.join("\n", body)) + local body = {} + for k, v in pairs(aura_env.stinkies) do + table.insert(body, string.format("/tar %s", v.name)) + end + EditMacro("tar", nil, nil, string.join("\n", body)) end ---@param input string ---@param deliminer string ---@return string[], string|nil local function StrSplit(input, deliminer) - if not deliminer then return {}, "deliminer is nil" end - if not input then return {}, "input is nil" end - local parts = {} - for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do - table.insert(parts, strtrim(part)) - end - return parts, nil + if not deliminer then return {}, "deliminer is nil" end + if not input then return {}, "input is nil" end + local parts = {} + for part in string.gmatch(input, "([^" .. deliminer .. "]+)") do + table.insert(parts, strtrim(part)) + end + return parts, nil end ---@type string[] @@ -207,21 +209,21 @@ for i, part in ipairs(notifyForD) do notifyFor[part] = true end ---@param player Player aura_env.Notify = function(player) - if not notifyFor[player.zone] then return end - local msg = string.format("%s of class %s and guild %s in %s", player.name, - player.class, player.guild, player.zone) - for _, rec in ipairs(toNotify) do - table.insert(aura_env.messageQueue, {to = rec, message = msg}) - end + if not notifyFor[player.zone] then return end + local msg = string.format("%s of class %s and guild %s in %s", player.name, + player.class, player.guild, player.zone) + for _, rec in ipairs(toNotify) do + table.insert(aura_env.messageQueue, { to = rec, message = msg }) + end end ---@param player Player aura_env.NotifyGone = function(player) - if not notifyFor[player.zone] then return end - local msg = string.format("%s of class %s and guild %s left %s", - player.name, player.class, player.guild, - player.zone) - for _, rec in ipairs(toNotify) do - table.insert(aura_env.messageQueue, {to = rec, message = msg}) - end + if not notifyFor[player.zone] then return end + local msg = string.format("%s of class %s and guild %s left %s", + player.name, player.class, player.guild, + player.zone) + for _, rec in ipairs(toNotify) do + table.insert(aura_env.messageQueue, { to = rec, message = msg }) + end end