Page 1 of 1

Function to evaluate ItemWithQualityCount with ItemFilter

Posted: Fri Oct 24, 2025 9:25 pm
by TeXiCiTy
Does a standard function exist to check if an Item satisfies a Filter?

Given for example an item:
{name = "automation-science-pack", quality = "normal"}
and a filter:
{name = "automation-science-pack", quality = "uncommon", comparator = "<"}

I want to check if the item satisfies the filter and don't want to write my own function if it's not needed.

https://lua-api.factorio.com/stable/con ... ilter.html
https://lua-api.factorio.com/stable/con ... Count.html

Re: Function to evaluate ItemWithQualityCount with ItemFilter

Posted: Fri Oct 24, 2025 9:41 pm
by TeXiCiTy
A possible solution if no default function is available below.
Performance-wise a native function would still be preferred.

Code: Select all

local quality_levels = {
  ["normal"] = 1,
  ["uncommon"] = 2,
  ["rare"] = 3,
  ["epic"] = 4,
  ["legendary"] = 5
}

function item_matches_filter(item, filter)
  -- Check name match
  if filter.name and item.name ~= filter.name then
    return false
  end
  
  -- Check quality with comparator
  if filter.quality then
    local item_quality_level = quality_levels[item.quality or "normal"]
    local filter_quality_level = quality_levels[filter.quality]
    local comparator = filter.comparator or "="
    
    if comparator == "=" then
      return item_quality_level == filter_quality_level
    elseif comparator == "<" then
      return item_quality_level < filter_quality_level
    elseif comparator == ">" then
      return item_quality_level > filter_quality_level
    elseif comparator == "≤" or comparator == "<=" then
      return item_quality_level <= filter_quality_level
    elseif comparator == "≥" or comparator == ">=" then
      return item_quality_level >= filter_quality_level
    elseif comparator == "≠" or comparator == "!=" then
      return item_quality_level ~= filter_quality_level
    end
  end
  
  return true
end