Anonymous

Module:Shop: Difference between revisions

From Melvor Idle
3,734 bytes added ,  24 March 2021
Tinkered with p.getItemShopTable to match new data formatting (and moved here from Items/SourceTables
(Tweaked formatting on getCostString)
(Tinkered with p.getItemShopTable to match new data formatting (and moved here from Items/SourceTables)
Line 8: Line 8:
local Constants = require('Module:Constants')
local Constants = require('Module:Constants')
local Areas = require('Module:CombatAreas')
local Areas = require('Module:CombatAreas')
--Cape of Completion is a special purchase that has to be spoofed since it's not in the code
function p.getCapeOfCompletionPurchase()
  local item = Items.getItem('Cape of Completion')
  local purchase = { category = 'Skillcape', id = -1}
  purchase.name = 'Cape of Completion'
  purchase.description = item.description
  purchase.cost = {gp = item.buysFor}
  purchase.unlockRequirements = {text = '100% Completion Log', items = {}}
  purchase.contains = {items = {{item.id, 1}}}
  return purchase
end
function p.processPurchase(category, purchaseID)
  local purchase = Shared.clone(ShopData.Shop[category][purchaseID + 1])
  purchase.id = purchaseID
  purchase.category = category
  return purchase
end


function p.getCostString(cost)
function p.getCostString(cost)
Line 69: Line 90:
       table.insert(reqArray, Icons.Icon({purchase.name, type=(isUpgrade and 'upgrade' or 'item')})..' Purchased')
       table.insert(reqArray, Icons.Icon({purchase.name, type=(isUpgrade and 'upgrade' or 'item')})..' Purchased')
     end
     end
  end
  if reqs.text ~= nil then
    table.insert(reqArray, reqs.text)
   end
   end


Line 116: Line 141:
     return p._getShopTable(shopCat)
     return p._getShopTable(shopCat)
   end
   end
end
function p.getItemCostArray(itemID)
  local purchaseArray = {}
  for catName, cat in Shared.skpairs(ShopData.Shop) do
    for j, purchase in Shared.skpairs(cat) do
      if purchase.cost.items ~= nil then
        for k, costLine in Shared.skpairs(purchase.cost.items) do
          if costLine[1] == itemID then
            table.insert(purchaseArray, p.processPurchase(catName, j - 1))
            break
          end
        end
      end
    end
  end
  return purchaseArray
end
function p.getItemSourceArray(itemID)
  local purchaseArray = {}
  for catName, cat in Shared.skpairs(ShopData.Shop) do
    for j, purchase in Shared.skpairs(cat) do
      if purchase.contains.items ~= nil and purchase.contains.items ~= nil then
        for k, containsLine in Shared.skpairs(purchase.contains.items) do
          if containsLine [1] == itemID then
            table.insert(purchaseArray, p.processPurchase(catName, j - 1))
            break
          end
        end
      end
    end
  end
  if itemID == 903 then --Special Cape of Completion thing
    table.insert(purchaseArray, p.getCapeOfCompletionPurchase())
  end
  return purchaseArray
end
function p._getPurchaseTable(purchase)
  local result = '{| class="wikitable"\r\n|-'
  result = result..'\r\n!colspan="2"|[[Shop]] Purchase'
  if purchase.contains.items ~= nil and Shared.tableCount(purchase.contains.items) > 1 then
    result = result..' - '..Icons.Icon({purchase.name, type='item'})
  end
  result = result..'\r\n|-\r\n!style="text-align:right;"|Cost'
  result = result..'\r\n|'..p.getCostString(purchase.cost)
  result = result..'\r\n|-\r\n!style="text-align:right;"|Requirements'
  result = result..'\r\n|'..p.getRequirementString(purchase.unlockRequirements)
  result = result..'\r\n|-\r\n!style="text-align:right;"|Contains'
  local containArray = {}
  if purchase.contains.items ~= nil then
    for i, itemLine in Shared.skpairs(purchase.contains.items) do
      local item = Items.getItemByID(itemLine[1])
      table.insert(containArray, Icons.Icon({item.name, type='item', qty=itemLine[2]}))
    end
  end
  if purchase.charges ~= nil and purchase.charges > 0 then
    table.insert(containArray, '+'..purchase.charges..' '..Icons.Icon({purchase.name, type='item'})..' Charges')
  end
  result = result..'\r\n|'..table.concat(containArray, '<br/>')
  result = result..'\r\n|}'
  return result
end
function p._getItemShopTable(item)
  local tableArray = {}
  local purchaseArray = p.getItemSourceArray(item.id)
  for i, purchase in Shared.skpairs(purchaseArray) do
    table.insert(tableArray, p._getPurchaseTable(purchase))
  end
  return table.concat(tableArray, '\r\n<br/>\r\n')
end
function p.getItemShopTable(frame)
  local itemName = frame.args ~= nil and frame.args[1] or frame
  local item = Items.getItem(itemName)
  if item == nil then
    return "ERROR: No item named "..itemName.." exists in the data module"
  end
  return p._getItemShopTable(item)
end
end


return p
return p