Module:LeatherworkerList: 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
(switch from using Infobox Recipe function _getTrueRawMaterials to a purpose built module RecipeTreeSearch designed for combining multi-stage recipes) |
(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 discount = require('Module:MerchantHideDiscount')
local p = {}
Line 12 ⟶ 11:
function p.main()
local queryString = '[[Category:Leatherworker]] AND [[Category:Pages with recipes]]'
local function screenFunction(item)
local product = (item.output and item.output[1] and item.output[1].name) or ''
return string.find(product,'Leather') and (not item.passive)
end
local results = plist.generate_recipe_table(queryString,screenFunction)
results = p.formatResults(results)
Line 42 ⟶ 27:
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>'
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
-- sole hide material
item.material = (item.materials and item.materials[1] and item.materials[1].name) or ''
-- list of all pages to edit, if edit is needed
item.
for _,
table.insert(item.allPageEdits,intermediate.name)
end
-- poles will show as making 1 and using 0.5 log, which doesnt match the look of planks or staves
-- double them,
if item.pageName and string.find(item.pageName,'Pole') then
item.output[1].quantity = item.output and item.output[1] and item.output[1].quantity and item.output[1].quantity * 2
item.buyPrice = item.buyPrice and item.buyPrice * 2
item.sellPrice = item.sellPrice and item.sellPrice * 2
item.profit = item.profit and item.profit * 2
item.xp = item.xp and item.xp * 2
item.duration = item.duration and item.duration * 2
for j,jtem in ipairs(item.materials) do
jtem.quantity = jtem.quantity and jtem.quantity * 2
end
end
--
item.
-- 40 seconds to buy new supplies and travel and deposit and everything, per 12 potions
local batchSize = 24
local downtime = 100
Line 108 ⟶ 74:
-- properties per hour
item.
item.profitPerHour = item.profit and item.productPerHour and math.floor(item.profit * item.productPerHour)
item.profitPerHourDiscount = item.profit and item.productPerHour and math.floor(item.profit * item.productPerHour)
-- discounted buy price is not provided by the search, have to do it manually
item.discountLevel = discount[item.material]
item.buyPriceDiscount = rts.getShopSellPrice(item.material)
item.profitDiscount = item.sellPrice and item.buyPriceDiscount and item.sellPrice - item.buyPriceDiscount
item.profitPerHourDiscount = item.profitDiscount and item.productPerHour and math.floor(item.profitDiscount * item.productPerHour)
end
Line 118 ⟶ 93:
-- 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 126 ⟶ 107:
:tag('th')
:attr{ colspan = '3' }
:wikitext('
:done()
:tag('th')
:attr{ colspan = '3' }
:wikitext('Materials')
:done()
Line 153 ⟶ 135:
: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,1,'File:' .. item.product .. '.png',item.product,item.product))
-- materials
:node(plist.three_column_image_text(item.material,1,'File:' .. item.material .. '.png',item.material,item.material))
:node(plist.currency_cell(item.profit))
:node(plist.currency_cell(item.
:tag('td')
Line 211 ⟶ 162:
:wikitext(item.discountLevel)
:done()
:node(plist.currency_cell(item.profitPerHourDiscount))
: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()
:done()
end
|