--[[ Filter structure: = { nameFilter = "A", exclusiveFilter = true, maxLvl = 10, minLvL = 1, race = { ["Tauren"] = true, }, class = { ["DEATHKNIGHT"] = true, }, } ]] local function AddFilter(filter) tinsert(SGI_DATA[SGI_DATA_INDEX].settings.filters, filter); end function SGI:CreateFilter(nameOfFilter,class, name, minLvl, maxLvl, race, maxVowels, maxConsonants, active) if (not nameOfFilter) then return; end local filter = { nameOfFilter = nameOfFilter, race = race, class = class, name = name, minLvl = minLvl, maxLvl = maxLvl, maxVowels = maxVowels, maxConsonants = maxConsonants, active = active, } AddFilter(filter); end function SGI:RemoveFilter(filterName) end local function GetMaxNumberConsequtiveVowels(word) local vowels = { ["a"] = 1, ["o"] = 1, ["u"] = 1, ["y"] = 1, ["i"] = 1, ["e"] = 1, } local c = 0; local max = 0; for i = 1, strlen(word) do if (vowels[strsub(word, i, i)]) then c = c + 1; else c = 0; end if (c > max) then max = c; end end return max; end local function GetMaxNumberConsequtiveConsonants(word) local vowels = { ["a"] = 1, ["o"] = 1, ["u"] = 1, ["y"] = 1, ["i"] = 1, ["e"] = 1, } local c = 0; local max = 0; for i = 1, strlen(word) do if (vowels[strsub(word, i, i)]) then c = 0; else c = c + 1; end if (c > max) then max = c; end end return max; end function SGI:TestCharacters(word) local V = GetMaxNumberConsequtiveVowels(word); local C = GetMaxNumberConsequtiveConsonants(word); SGI:print("Vowels: "..V.." Consonants: "..C); end local function debugPlayer(player) local text = "|cff"..SGI:GetClassColor(player.class)..player.name.."|r ("..player.level..") ("..player.race..")"; return text end local function match(filter, player) --Is this filter for the players class/race? if (type(filter.race) == "table" and SGI:CountTable(filter.race) ~= 0) then if (not filter.race[player.race]) then return false; end end if (type(filter.class) == "table" and SGI:CountTable(filter.class) ~= 0) then if (not filter.class[player.class]) then return false; end end -- Is the player within the level range? if (type(filter.minLvl) == "number") then if (filter.minLvl > player.level) then return false; end end if (type(filter.maxLvl) == "number") then if (filter.maxLvl < player.level) then return false; end end if (type(filter.name) == "string" and filter.name ~= "") then if not (strfind(player.name,filter.name)) then return false; end end if (type(filter.maxVowels) == "number") then if (filter.maxVowels >= GetMaxNumberConsequtiveVowels(player.name)) then return false; end end if (type(filter.maxConsonants) == "number") then if (filter.maxConsonants >= GetMaxNumberConsequtiveConsonants(player.name)) then return false; end end SGI:debug("Filter: "..filter.nameOfFilter.." "..debugPlayer(player)); return true; end local function GetActiveFilters() local filters, activeFilters = SGI_DATA[SGI_DATA_INDEX].settings.filters, {}; if (type(filters) ~= "table") then return {}; end for k,_ in pairs(filters) do if (filters[k]["active"]) then activeFilters[k] = filters[k]; end end return activeFilters; end function SGI:FilterPlayer(player) local filters = GetActiveFilters();--SGI_DATA[SGI_DATA_INDEX].settings.filters; if (type(filters) ~= "table" or type(player) ~= "table") then --if invalid parameter, return as filtered SGI:debug("Error: Filter or player is not a table!"); return false; end for k,_ in pairs(filters) do if (match(filters[k], player)) then return false; end end return true; end SGI:debug(">> Filter.lua");