Anonymous

Module:ModifierTables: Difference between revisions

From Melvor Idle
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