Anonymous

Module:Items/UseTables: Difference between revisions

From Melvor Idle
(Hopefully) fixed issue with items not including Agility Obstacles as a use if no other uses existed
(Added Agility Obstacles to the list of things Item Uses considers)
((Hopefully) fixed issue with items not including Agility Obstacles as a use if no other uses existed)
(2 intermediate revisions by the same user not shown)
Line 12: Line 12:
local Icons = require('Module:Icons')
local Icons = require('Module:Icons')
local Agility = require('Module:Skills/Agility')
local Agility = require('Module:Skills/Agility')
local Shop = require('Module:Shop')




Line 172: Line 173:
   end
   end
   --Firemaking
   --Firemaking
   if item.firemakingID ~= nil or Shared.contains(itemUseArray.Firemaking, item.name) then
   if SkillData.Firemaking[item.id + 1] ~= nil or Shared.contains(itemUseArray.Firemaking, item.name) then
     table.insert(useArray, chr..Icons.Icon({'Firemaking', type='skill'}))
     table.insert(useArray, chr..Icons.Icon({'Firemaking', type='skill'}))
   end
   end
Line 218: Line 219:
    
    
   --Other odds and ends:
   --Other odds and ends:
   --Mastery Tokens are tied to 'Mastery'
   --Mastery Tokens are tied to 'Mastery'
   if item.type == 'Token' then
   if item.type == 'Token' then
Line 243: Line 245:
   if item.name == 'Charge Stone of Rhaelyx' then
   if item.name == 'Charge Stone of Rhaelyx' then
     table.insert(useArray, chr..'Powering '..Icons.Icon({'Crown of Rhaelyx', type='item'}))
     table.insert(useArray, chr..'Powering '..Icons.Icon({'Crown of Rhaelyx', type='item'}))
  end
  --Some items are needed to make shop purchases
  local shopArray = Shop.getItemCostArray(item.id)
  if Shared.tableCount(shopArray) > 0 then
    table.insert(useArray, chr..Icons.Icon({'Shop'}))
   end
   end


Line 283: Line 291:
           end
           end
           table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Upgrade', req = rowReq, xp = xp, gp = item2.trimmedGPCost})
           table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Upgrade', req = rowReq, xp = xp, gp = item2.trimmedGPCost})
          break
        end
      end
    end
    if item.name == 'Leather' and item2.buysForLeather ~= nil then
      local mat = {{id = item.id, qty = item2.buysForLeather}}
      local xp = 'N/A'
      local rowReq = 'None'
      table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Shop', req = rowReq, xp = xp, gp = item2.buysFor})
    elseif item2.buysForItems ~= nil then
      for j, req in pairs(item2.buysForItems) do
        if req[1] == item.id then
          local mat = item2.buysForItems
          local xp = 'N/A'
          local rowReq = 'None'
          table.insert(useArray, {item = item2, qty = 1, mats = mat, skill = 'Shop', req = rowReq, xp = xp, gp = item2.buysForGP})
           break
           break
         end
         end
Line 398: Line 390:
     local qty = 1
     local qty = 1
     table.insert(useArray, {item = item2, qty = qty, mats = mat, skill = 'Cooking', req = rowReq, xp = xp})
     table.insert(useArray, {item = item2, qty = qty, mats = mat, skill = 'Cooking', req = rowReq, xp = xp})
  end
  --Handle shop purchases using Module:Shop
  local shopUses = Shop.getItemCostArray(item.id)
  for i, purchase in Shared.skpairs(shopUses) do
    local rowReq = Shop.getRequirementString(purchase.unlockRequirements)
    local iconType = (purchase.contains.items ~= nil and Shared.tableCount(purchase.contains.items) > 0) and 'item' or 'upgrade'
    table.insert(useArray, {item = {name = purchase.name}, qty = 1, mats = purchase.cost.items, skill = 'Shop', req = rowReq, xp = 'N/A', gp = purchase.cost.gp, type = iconType})
   end
   end


Line 413: Line 413:
                           return a.item.name < b.item.name
                           return a.item.name < b.item.name
                         end end)
                         end end)
  local obstacles = Agility.getObstaclesForItem(item.id)


   local spellUseTable = p._getSpellUseTable(item)
   local spellUseTable = p._getSpellUseTable(item)
   local result = ''
   local result = ''
   if Shared.tableCount(useArray) == 0 then
   if Shared.tableCount(useArray) == 0 and Shared.tableCount(obstacles) == 0 then
     if string.len(spellUseTable) > 0 then
     if string.len(spellUseTable) > 0 then
       return '==Uses==\r\n==='..Icons.Icon({'Magic', type='skill', size='30'})..'===\r\n'..spellUseTable
       return '==Uses==\r\n==='..Icons.Icon({'Magic', type='skill', size='30'})..'===\r\n'..spellUseTable
Line 427: Line 429:
   for i, row in pairs(useArray) do
   for i, row in pairs(useArray) do
     local qty = row.qty ~= nil and row.qty or 1
     local qty = row.qty ~= nil and row.qty or 1
    local iconType = row.type ~= nil and row.type or 'item'
     result = result..'\r\n|-\r\n|data-sort-value="'..row.item.name..'"|'
     result = result..'\r\n|-\r\n|data-sort-value="'..row.item.name..'"|'
     result = result..Icons.Icon({row.item.name, type='item', notext=true, size=50})..'||'
     result = result..Icons.Icon({row.item.name, type=iconType, notext=true, size=50})..'||'
     if qty > 1 then result = result.."'''"..qty.."x''' " end
     if qty > 1 then result = result.."'''"..qty.."x''' " end
     result = result..'[['..row.item.name..']]'
     result = result..'[['..row.item.name..']]'
Line 434: Line 437:
       result = result..'||data-sort-value="Upgrade"|[[Upgrading Items|Upgrade]]'
       result = result..'||data-sort-value="Upgrade"|[[Upgrading Items|Upgrade]]'
     elseif row.skill == 'Shop' then
     elseif row.skill == 'Shop' then
       result = result..'||data-sort-value="Shop"|[[Shop]]'
       result = result..'||data-sort-value="Shop"|'..Icons.Icon({'Shop'})
     else
     else
       result = result..'||data-sort-value="'..row.skill..'"|'..Icons.Icon({row.skill, type='skill'})
       result = result..'||data-sort-value="'..row.skill..'"|'..Icons.Icon({row.skill, type='skill'})
Line 462: Line 465:


   --Agility obstacles are weird and get their own section
   --Agility obstacles are weird and get their own section
  local obstacles = Agility.getObstaclesForItem(item.id)
   for i, obst in Shared.skpairs(obstacles) do
   for i, obst in Shared.skpairs(obstacles) do
     result = result..'\r\n|-\r\n|'
     result = result..'\r\n|-\r\n|'
Line 483: Line 485:
     end
     end
     result = result..'||'..table.concat(reqArray, '<br/>')
     result = result..'||'..table.concat(reqArray, '<br/>')
    --Just including 'N/A' for XP since it doesn't really apply for Agility Obstacles
    result = result..'||N/A'


     --Finally the cost
     --Finally the cost