Module:ItemsTable

From Melvor Idle
Revision as of 01:49, 28 January 2022 by Falterfire (talk | contribs) (Added getMazunkiItemTable function for Mazunki)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:ItemsTable/doc

-- this module generates [[Template:ItemsTable]] 200 lines at a time.
-- run p.getItemsTableAlt() in debug and copy the result to [[Template:ItemsTable]] after an update that adds new items.
--[=[
	mw.log(p.getItemsTableAlt(0))
	mw.log(p.getItemsTableAlt(150))
	mw.log(p.getItemsTableAlt(300))
	mw.log(p.getItemsTableAlt(450))
	mw.log(p.getItemsTableAlt(600))
	mw.log(p.getItemsTableAlt(750))
	mw.log(p.getItemsTableAlt(900))
	mw.log(p.getItemsTableAlt(1050))
--]=]

local p = {}

local Shared = require('Module:Shared')
local ItemData = mw.loadData('Module:Items/data')
local Items = require('Module:Items')
local Icons = require('Module:Icons')
local SourceTables = require('Module:Items/SourceTables')
local UseTables = require('Module:Items/UseTables')

local itemCount = Shared.tableCount(ItemData.Items) - 1

function p.getItemsTable(frame)
  local itemList = {}
  local i = 0
  while i < itemCount do
    local item = Items.getItemByID(i)
    table.insert(itemList, '\r\n|-\r\n|')
    table.insert(itemList, UseTables.getItemUses(item.name))
    i = i + 1
  end
  return table.concat(itemList)
end

--Alternate version that has everything still
function p.getItemsTableAlt(startID)
  local itemList = {}
  local i = startID
  local iend = i + 150
  while i < iend do
    local item = Items.getItemByID(i)
    if item == nil then
      break
    end
    local itemRow = '\r\n|-'
    local iCat = item.category ~= nil and item.category or ''
    itemRow = itemRow..'\r\n|'..Icons.Icon({item.name, type='item', notext=true, size=50})
    itemRow = itemRow..'||'..Icons.Icon({item.name, type='item', noicon=true})..'||'..(i)..'||'..iCat..'||'..item.type
    itemRow = itemRow..'|| '..Items._getItemStat(item, 'completionReq')
    itemRow = itemRow..'||data-sort-value="'..item.sellsFor..'"|'..Icons.GP(item.sellsFor)
    itemRow = itemRow..'||style="text-align:right;"|'..SourceTables._getItemSources(item)
    itemRow = itemRow..'||style="text-align:right;"|'..UseTables._getItemUses(item, false)
    table.insert(itemList, itemRow)
    i = i + 1
  end
  return table.concat(itemList, '')
end

function p.getMazunkiItemTable(frame)
	--Generates a plaintext table for Mazunki's use for spreadsheet generation
	local result = '{|'
	result = result..'\r\n!ID!!Name!!Price!!Combat Obtainable!!Monster Drop Chances'
	local rows = {}
	
	local itemList = Items.getItems(function(item) return true end)
	table.sort(itemList, function(a, b) return a.id < b.id end)
	
	local monsterSourceColumns = { 'id', 'dropWt', 'totalWt', 'minQty', 'maxQty' }
	
	local itemID = 0
	local item = Items.getItemByID(itemID)
	while item ~= nil and itemID < 2000 do
		local rowTxt = '|-\r\n'
		rowTxt = rowTxt..'|'..item.id..'||'..item.name..'||'..item.sellsFor
		local monsterData = SourceTables._getItemMonsterSources(item)
		if(Shared.tableCount(monsterData) > 0) then
			local monsterColData = {}
			for i, colName in pairs(monsterSourceColumns) do
				monsterColData[colName] = {}
			end
			
			rowTxt = rowTxt..'||true||'
			for j, mData in pairs(monsterData) do
				for k, colName in pairs(monsterSourceColumns) do
					table.insert(monsterColData[colName], mData[colName])
				end
			end
			local colTxtArray = {}
			for j, colName in pairs(monsterSourceColumns) do
				table.insert(colTxtArray, 'monster_'..colName..' = '..table.concat(monsterColData[colName], ','))
			end
			rowTxt = rowTxt..table.concat(colTxtArray, '<br/>')
		else
			rowTxt = rowTxt..'||false||'
		end
		table.insert(rows, rowTxt)
		itemID = itemID + 1
		item = Items.getItemByID(itemID)
	end
	
	result = result..'\r\n'..table.concat(rows, '\r\n')..'\r\n|}'
	return result
end

return p