Module:ModifierTables: Difference between revisions

Allowed for calling multiple modifiers at once and fixed various bugs
No edit summary
(Allowed for calling multiple modifiers at once and fixed various bugs)
Line 64: Line 64:
end
end


function p.getItemsWithModifier(modifier, skill, getOpposites)
function p.getItemsWithModifier(modifiers, skill, getOpposites)
  if type(modifiers) == 'string' then
    modifiers = {modifiers}
  end
   local itemList = Items.getItems(
   local itemList = Items.getItems(
         function(item)
         function(item)
           return p.getModifierValue(item.modifiers, modifier, skill, getOpposites) ~= 0
           local result = false
          for i, mod in Shared.skpairs(modifiers) do
            if p.getModifierValue(item.modifiers, mod, skill, getOpposites) ~= 0 then
              result = true
              break
            end
          end
          return result
         end)
         end)
   return itemList
   return itemList  
end
end


function p.getObstaclesWithModifier(modifier, skill, getOpposites)
function p.getObstaclesWithModifier(modifiers, skill, getOpposites)
  if type(modifiers) == 'string' then
    modifiers = {modifiers}
  end
   local obstList = Agility.getObstacles(
   local obstList = Agility.getObstacles(
         function(obst)
         function(obst)
           return p.getModifierValue(obst.modifiers, modifier, skill, getOpposites) ~= 0
           local result = false
          for i, mod in Shared.skpairs(modifiers) do
            if p.getModifierValue(obst.modifiers, mod, skill, getOpposites) ~= 0 then
              result = true
              break
            end
          end
          return result
         end)
         end)
   return obstList
   return obstList
end
end


function p.getPetsWithModifier(modifier, skill, getOpposites)
function p.getPetsWithModifier(modifiers, skill, getOpposites)
  if type(modifiers) == 'string' then
    modifiers = {modifiers}
  end
   local petList = Pets.getPets(
   local petList = Pets.getPets(
         function(pet)
         function(pet)
           return p.getModifierValue(pet.modifiers, modifier, skill, getOpposites) ~= 0
           local result = false
          for i, mod in Shared.skpairs(modifiers) do
            if p.getModifierValue(pet.modifiers, mod, skill, getOpposites) ~= 0 then
              result = true
              break
            end
          end
          return result
         end)
         end)
   return petList
   return petList
end
end


function p.getUpgradesWithModifier(modifier, skill, getOpposites)
function p.getUpgradesWithModifier(modifiers, skill, getOpposites)
  if type(modifiers) == 'string' then
    modifiers = {modifiers}
  end
   local upgradeList = Shop.getPurchases(
   local upgradeList = Shop.getPurchases(
         function(purchase)
         function(purchase)
           return p.getModifierValue(purchase.contains.modifiers, modifier, skill, getOpposites) ~= 0
           local result = false
          for i, mod in Shared.skpairs(modifiers) do
            if p.getModifierValue(purchase.contains.modifiers, mod, skill, getOpposites) ~= 0 then
              result = true
              break
            end
          end
          return result
         end)
         end)
  return upgradeList
  return upgradeList
end
end


function p._getModifierTable(modifier, skill, columnName, getOpposites)
function p._getModifierTable(modifiers, skill, columnName, getOpposites)
   local modifierNames = {}
   local modifierNames = {}
   if getOpposites then
   if type(modifiers) == 'string' then
    table.insert(modifierNames, 'increased'..modifier)
    modifiers = {modifiers}
    table.insert(modifierNames, 'decreased'..modifier)
  end
  else
  for i, modifier in pairs(modifiers) do
    table.insert(modifierNames, modifier)
    if getOpposites then
      table.insert(modifierNames, 'increased'..modifier)
      table.insert(modifierNames, 'decreased'..modifier)
    else
      table.insert(modifierNames, modifier)
    end
   end
   end
   local hasOtherModifiers = false
   local hasOtherModifiers = false


Line 118: Line 164:
       for modName, modValue in Shared.skpairs(modifiers) do
       for modName, modValue in Shared.skpairs(modifiers) do
         if Shared.contains(modifierNames, modName) then
         if Shared.contains(modifierNames, modName) then
           if type(modValue) == table then
           if type(modValue) == 'table' then
             for j, subVal in Shared.skpairs(modValue) do
             for j, subVal in Shared.skpairs(modValue) do
               if subVal[1] == skill then
               if subVal[1] == skill then
                 table.insert(mainModText, Constants._getModifierText(modName, subVal[2]))
                 table.insert(mainModText, Constants._getModifierText(modName, subVal))
               else
               else
                 table.insert(modTextArray, Constants._getModifierText(modName, subVal[2]))
                 table.insert(modTextArray, Constants._getModifierText(modName, subVal))
               end
               end
             end
             end
Line 139: Line 185:
   local tableArray = {}
   local tableArray = {}
   --Going through each type of thing to add to the array
   --Going through each type of thing to add to the array
   local itemList = p.getItemsWithModifier(modifier, skill, getOpposites)
   local itemList = p.getItemsWithModifier(modifiers, skill, getOpposites)
   for i, item in Shared.skpairs(itemList) do
   for i, item in Shared.skpairs(itemList) do
     local row = {}
     local row = {}
Line 145: Line 191:
     row.icon = Icons.Icon({item.name, type='item'})
     row.icon = Icons.Icon({item.name, type='item'})
     row.type = 'Item'
     row.type = 'Item'
     row.val = p.getModifierValue(item.modifiers, modifier, skill, getOpposites)
     local totalVal = 0
    for i, mod in pairs(modifiers) do
      totalVal = totalVal + p.getModifierValue(item.modifiers, mod, skill, getOpposites)
    end
    row.val = totalVal


     row.modifierText, row.otherModifiers = getModText(item.modifiers)
     row.modifierText, row.otherModifiers = getModText(item.modifiers)
Line 155: Line 205:
     table.insert(tableArray, row)
     table.insert(tableArray, row)
   end
   end
   local petList = p.getPetsWithModifier(modifier, skill, getOpposites)
   local petList = p.getPetsWithModifier(modifiers, skill, getOpposites)
   for i, pet in Shared.skpairs(petList) do
   for i, pet in Shared.skpairs(petList) do
     local row = {}
     local row = {}
Line 161: Line 211:
     row.icon = Icons.Icon({pet.name, type='pet'})
     row.icon = Icons.Icon({pet.name, type='pet'})
     row.type = '[[Pets|Pet]]'
     row.type = '[[Pets|Pet]]'
     row.val = p.getModifierValue(pet.modifiers, modifier, skill, getOpposites)
     local totalVal = 0
    for i, mod in pairs(modifiers) do
      totalVal = totalVal + p.getModifierValue(pet.modifiers, mod, skill, getOpposites)
    end
    row.val = totalVal


     row.modifierText, row.otherModifiers = getModText(pet.modifiers)
     row.modifierText, row.otherModifiers = getModText(pet.modifiers)
Line 171: Line 225:
     table.insert(tableArray, row)
     table.insert(tableArray, row)
   end
   end
   local obstList = p.getObstaclesWithModifier(modifier, skill, getOpposites)
   local obstList = p.getObstaclesWithModifier(modifiers, skill, getOpposites)
   for i, obst in Shared.skpairs(obstList) do
   for i, obst in Shared.skpairs(obstList) do
     local row = {}
     local row = {}
Line 177: Line 231:
     row.icon = Icons.Icon({'Agility', obst.name, type='skill'})
     row.icon = Icons.Icon({'Agility', obst.name, type='skill'})
     row.type = '[[Agility#Obstacles|Agility Obstacle]]'
     row.type = '[[Agility#Obstacles|Agility Obstacle]]'
     row.val = p.getModifierValue(obst.modifiers, modifier, skill, getOpposites)
     local totalVal = 0
    for i, mod in pairs(modifiers) do
      totalVal = totalVal + p.getModifierValue(obst.modifiers, mod, skill, getOpposites)
    end
    row.val = totalVal


     row.modifierText, row.otherModifiers = getModText(obst.modifiers)
     row.modifierText, row.otherModifiers = getModText(obst.modifiers)
Line 187: Line 245:
     table.insert(tableArray, row)
     table.insert(tableArray, row)
   end
   end
   local upgradeList = p.getUpgradesWithModifier(modifier, skill, getOpposites)
   local upgradeList = p.getUpgradesWithModifier(modifiers, skill, getOpposites)
   for i, upgrade in Shared.skpairs(upgradeList) do
   for i, upgrade in Shared.skpairs(upgradeList) do
     local row = {}
     local row = {}
Line 193: Line 251:
     row.icon = Icons.Icon({upgrade.name, type='upgrade'})
     row.icon = Icons.Icon({upgrade.name, type='upgrade'})
     row.type = '[[Shop|Upgrade]]'
     row.type = '[[Shop|Upgrade]]'
     row.val = p.getModifierValue(upgrade.contains.modifiers, modifier, skill, getOpposites)
     local totalVal = 0
    for i, mod in pairs(modifiers) do
      totalVal = totalVal + p.getModifierValue(upgrade.contains.modifiers, mod, skill, getOpposites)
    end
    row.val = totalVal


     row.modifierText, row.otherModifiers = getModText(upgrade.contains.modifiers)
     row.modifierText, row.otherModifiers = getModText(upgrade.contains.modifiers)
Line 236: Line 298:
   local columnName = frame.args ~= nil and frame.args[2] or frame[2]
   local columnName = frame.args ~= nil and frame.args[2] or frame[2]
   local getOpposites = frame.args ~= nil and frame.args[3] or frame[3]
   local getOpposites = frame.args ~= nil and frame.args[3] or frame[3]
  if Shared.contains(modifier, ',') then
    modifier = Shared.splitString(modifier, ',')
  end
   getOpposites = getOpposites ~= nil and string.upper(getOpposites) == 'TRUE' or true
   getOpposites = getOpposites ~= nil and string.upper(getOpposites) == 'TRUE' or true