Module:Sandbox/User:Alsang/PotionList: Difference between revisions

mostly done, minor formatting left (commas in numbes, decimal places, zero currency replacement)
(back to testing, wont format properly through template)
(mostly done, minor formatting left (commas in numbes, decimal places, zero currency replacement))
(One intermediate revision by the same user not shown)
Line 1:
require('Module:Mw.html extension')
local p = {}
local param = require( 'Module:Paramtest' )
local currency = require('Module:Currency')
 
 
local p = {}
 
-- non dynamic module, no inputs
Line 10 ⟶ 13:
'[[Category:Potions]]',
'[[Uses facility::Standard Potion Station||Potent Potion Station]]',
'[[Variant of::Fear]]',
'?Profession Level A = lvl',
'? #- = name',
Line 25 ⟶ 27:
local results = mw.smw.ask(query)
results = p.makeTableStringsformatResults(results)
 
-- actual output
return p.displayTable(results)
end
-- for testing
 
--return '<pre>' ..mw.text.jsonEncode(results, mw.text.JSON_PRETTY).. '</pre>'
-- makes the html for the cells containing currency directly, no tags needed
-- flag is for if the number should not be known, replaces with zero
local function currency_cell(amount,flag)
local a = {}
if flag then
a = currency._cell(amount, { html = 'yes' })
else
a = currency._cell(0, { html = 'yes' }) -- replace this with blank, if I can figure out how to
end
return a
end
 
-- do calculations and determine strings to go in cells
function p.makeTableStringsformatResults(results)
 
-- iterate through potions
Line 65 ⟶ 75:
-- sanitise data, set to 0 if its not there
local lvl = item.lvl or 0'?'
local buy = item.buy or 0
local sell = item.sell or 0
local brewXP = item.brewXP or 0
Line 75 ⟶ 86:
-- direct values
item.profit = sell - item.buy
item.XP = brewXP + prepXP
item.KP = brewKP + prepKP
Line 91 ⟶ 102:
item.profitPerHour = math.floor(item.profit * item.potionPerHour)
-- currency stringsflags for tableif data values should be shown
ifitem.hasBuy = param.has_content(item.buy) then
item.buyStringhasSell = '|| {{Currency cell|' param.. has_content(item.buy .. '}}'sell)
item.hasProfit = item.hasBuy and item.hasSell
else
item.hasXP = param.has_content(item.brewXP) and param.has_content(item.prepXP)
item.buyString = '|| colspan="10" | Unknown'
item.hasKP = param.has_content(item.brewKP) and param.has_content(item.prepKP)
end
item.hasDuration = param.has_content(item.brewDuration) and param.has_content(item.prepDuration)
if param.has_content(item.sell) then
item.sellString = '|| {{Currency cell|' .. item.sell .. '}}'
else
item.sellString = '|| colspan="10" | Unknown'
end
if param.has_content(item.buy) and param.has_content(item.sell) then
item.profitString = '|| {{Currency cell|' .. item.profit .. '}}'
else
item.profitString = '|| colspan="10" | Unknown'
end
if param.has_content(item.buy) and param.has_content(item.sell) and param.has_content(item.brewXP) and param.has_content(item.prepXP) then
item.profitPerXPString = '|| {{Currency cell|' .. item.profitPerXP .. '}}'
else
item.profitPerXPString = '|| colspan="10" | Unknown'
end
if param.has_content(item.buy) and param.has_content(item.sell) and param.has_content(item.brewDuration) and param.has_content(item.prepDuration) then
item.profitPerHourString = '|| {{Currency cell|' .. item.profitPerHour .. '}}'
else
item.profitPerHourString = '|| colspan="10" | Unknown'
end
-- XP/KP strings, if the requisite data isnt there then display "unknown"
if item.hasXP then
-- KP/KP strings
item.xp = tostring(item.xp) -- format to include commas
if param.has_content(item.brewXP) and param.has_content(item.prepXP) then
else
item.XPString = '|| {{formatnum:' .. item.XP .. '}}'
item.XP = 'Unknown'
else
item.XPString = '|| Unknown'
end
if param.has_content(item.brewKP) and param.has_content(item.prepKP)hasKP then
item.KPStringKP = '|| {{formatnum:' .. tostring(item.KP) .. '}}%' -- want 1 decimal place
else
item.KPStringKP = '|| Unknown'
end
if item.hasXP and item.hasDuration then
if param.has_content(item.brewXP) and param.has_content(item.prepXP) and param.has_content(item.brewDuration) and param.has_content(item.prepDuration) then
item.XPPerHourStringXPPerHour = '|| {{formatnum:' .. tostring(item.XPPerHour) ..-- format to include '}}'commas
else
item.XPPerHourStringXPPerHour = '|| Unknown'
end
if item.hasKP and item.hasDuration then
if param.has_content(item.brewKP) and param.has_content(item.prepKP) and param.has_content(item.brewDuration) and param.has_content(item.prepDuration) then
item.KPPerHourStringKPPerHour = '|| {{formatnum:' .. tostring(item.KPPerHour) ..-- want 2 decimal '}}'places
else
item.KPPerHourStringKPPerHour = '|| Unknown'
end
Line 156 ⟶ 144:
function p.displayTable(results)
local out = {}mw.html.create('table')
:addClass('wikitable sortable')
table.insert(out, 'Potions per hour assumes 40 seconds resupply between each batch of 12 potions.')
:tag('tr')
table.insert(out, '{| class="wikitable sortable"')
:tag('th')
:wikitext('Level')
local headerRow = {}
:done()
table.insert(headerRow, '! Level')
:tag('th')
table.insert(headerRow, '!! Potion')
:wikitext('Potion')
table.insert(headerRow, '!! Reagents (plus bottle)')
:done()
table.insert(headerRow, '!! colspan="10" | Buy Value')
:tag('th')
table.insert(headerRow, '!! colspan="10" | Sell Value')
:wikitext('Reagents (plus bottle)')
table.insert(headerRow, '!! colspan="10" | Profit')
:done()
table.insert(headerRow, '!! XP')
:tag('th')
table.insert(headerRow, '!! KP')
:attr{ colspan = '10' }
table.insert(headerRow, '!! colspan="10" | Profit/XP')
:wikitext('Buy Value')
table.insert(headerRow, '!! XP/hr')
:done()
table.insert(headerRow, '!! KP/hr')
:tag('th')
table.insert(headerRow, '!! colspan="10" | Profit/hr')
:attr{ colspan = '10' }
table.insert(out, table.concat(headerRow, ' '))
:wikitext('Sell Value')
:done()
:tag('th')
:attr{ colspan = '10' }
:wikitext('Profit')
:done()
:tag('th')
:attr{ colspan = '10' }
:wikitext('Profit/hr')
:done()
:tag('th')
:wikitext('XP')
:done()
:tag('th')
:wikitext('XP/hr')
:done()
:tag('th')
:attr{ colspan = '10' }
:wikitext('Profit/XP')
:done()
:tag('th')
:wikitext('KP')
:done()
:tag('th')
:wikitext('KP/hr')
:done()
:done()
for i,item in ipairs(results) do
table.insert(out, '|-')
local itemRow = {}
table.insert(itemRow, '| [[File:Alchemist small icon.png|15px]] ' .. item.lvl )
table.insert(itemRow, '|| {{plink|' .. item.name .. '}}')
-- need to generate the text for the reagent cell before starting the row
table.insert(itemRow, '||')
local reagentCell = ''
for j, reagent in ipairs(item.reagents) do
tablereagentCell = reagentCell ..insert(itemRow, '{{plink[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. '}}]]<br>')
end
out
table.insert(itemRow, item.buyString )
:tag('tr')
table.insert(itemRow, item.sellString )
:tag('td')
table.insert(itemRow, item.profitString )
:wikitext('[[File:Alchemist small icon.png|15px]] ' .. item.lvl)
table.insert(itemRow, item.XPString )
:done()
table.insert(itemRow, item.KPString )
:tag('td')
table.insert(itemRow, item.profitPerXPString )
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]')
table.insert(itemRow, item.XPPerHourString )
:done()
table.insert(itemRow, item.KPPerHourString )
:tag('td')
table.insert(itemRow, item.profitPerHourString )
:wikitext(reagentCell)
:done()
:wikitext(currency_cell(item.buy,item.hasBuy))
:wikitext(currency_cell(item.sell,item.hasSell))
:wikitext(currency_cell(item.profit,item.hasProfit))
:wikitext(currency_cell(item.profitPerHour,item.hasProfit and item.hasDuration))
:tag('td')
:wikitext(item.XP,item.hasXP)
:done()
:tag('td')
:wikitext(item.XPPerHour)
:done()
:wikitext(currency_cell(item.profitPerXP,item.hasXP and item.hasProfit))
:tag('td')
:wikitext(item.KP)
:done()
:tag('td')
:wikitext(item.KPPerHour)
:done()
:done()
table.insert(out, table.concat(itemRow, ' '))
end
return out
table.insert(out, '|}')
return table.concat(out, '\n')
end
 
928

edits