Module:ChefList: Difference between revisions
offload much of the search, screen, and format functions to the new ProfessionList module, so they work the same for all table
(No need to hide broken image file links. Should encourage people to upload them.) |
(offload much of the search, screen, and format functions to the new ProfessionList module, so they work the same for all table) |
||
Line 1:
require('strict')
require('Module:Mw.html extension')
local lang = mw.getContentLanguage()
local plist = require('Module:ProfessionList')
local rts = require('Module:RecipeTreeSearch')
local p = {}
Line 10 ⟶ 9:
-- non dynamic module, no inputs
function p.main()
local queryString = '[[Category:Chef]] AND [[Category:Pages with recipes]] AND [[-Sold item.Sold by::Head Chef (shop)]]'
local function screenFunction(item)
return not item.passive
end
local results = plist.generate_recipe_table(queryString,screenFunction)
results = p.formatResults(results)
Line 36 ⟶ 27:
end
-- do calculations and determine strings to go in cells
function p.formatResults(results)
--simple check for nil results
if results ==nil or results[1] == nil then
return nil
end
-- iterate through products
for _, item in ipairs(results) do
-- list of all pages to edit, if edit is needed
item.allPageEdits = { item.pageName }
for _,intermediate in ipairs(item.intermediateMaterials) do
table.insert(
end
-- profitability
item.profitPerXP = item.profit and item.xp and item.profit / item.xp
-- iterate through materials, keep track of how many materials are needed from each shop
Line 94 ⟶ 53:
-- query which shop sold it, add to running total
local shopNameQuery = '[[:+]][[Sold item::' .. material.name .. ']]|?Sold by #-=data|mainlabel=' .. material.name
local shopNameResult = mw.smw.ask(shopNameQuery) or {}
local shopName = (shopNameResult and shopNameResult[1] and shopNameResult[1].data) or ''
if shopName=="The Frequently Fresh Fish Stall" then
item.fishShopTrips = item.fishShopTrips + 1
Line 110 ⟶ 65:
end
-- there will be extra time spent buying and selling items, and moving between stations
-- assume make one trip to buy 24 of each material from each shop per batch of 24 food
Line 127 ⟶ 77:
-- properties per hour
item.
item.profitPerHour = item.profit and item.productPerHour and math.floor(item.profit * item.productPerHour)
end
Line 136 ⟶ 86:
-- make the table
function p.displayTable(results)
--simple check for nil results
if results ==nil or results[1] == nil then
return 'No data found for table'
end
local out = mw.html.create('table')
:addClass('wikitable sortable')
Line 176 ⟶ 132:
:done()
:done()
for i, item in ipairs(results) do
local row = out:tag('tr')
--level
:IF(item.level)
:tag('td')
:css{ ['text-align'] = 'center' }
:wikitext(item.
:done()
:ELSE()
:node(plist.unknown_value_edit_cell(item.pageName,1))
:END()
-- recipe
:node(plist.three_column_image_text(item.product,item.output[1].quantity,'File:' .. item.product .. '.png',item.product,item.product))
-- materials
:node(plist.one_column_image_text(item.materials))
:node(plist.currency_cell(item.buyPrice))
:node(plist.currency_cell(item.sellPrice))
:node(plist.currency_cell(item.profit))
:node(plist.currency_cell(item.profitPerHour))
:IF(item.xp)
:tag('td')
:wikitext(item.
:done()
:ELSE()
:node(plist.unknown_value_edit_cell(item.allPageEdits,1))
:END()
-- XP per hour
:IF(item.xpPerHour)
:tag('td')
:wikitext(item.
:done()
:ELSE()
:node(plist.unknown_value_cell(1))
:END()
-- XP per hour
:node(plist.currency_cell(item.profitPerXP))
:done()
end
|