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

rename the SMW properties "Recipe XP", "Recipe KP", and "Recipe duration" to "Activity XP", "Activity KP", and "Activity duration" so they can generate the same fields as Template:Profession info
(reorder columns)
(rename the SMW properties "Recipe XP", "Recipe KP", and "Recipe duration" to "Activity XP", "Activity KP", and "Activity duration" so they can generate the same fields as Template:Profession info)
(3 intermediate revisions 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',
'?Uses item.Uses item #- = reagents',
'?Value = sell',
'?RecipeActivity XP = brewXP',
'?Uses item.RecipeActivity XP = prepXP',
'?RecipeActivity KP = brewKP',
'?Uses item.RecipeActivity KP = prepKP',
'?RecipeActivity duration = brewDuration',
'?Uses item.RecipeActivity duration = prepDuration',
'sort = Profession Level A'
}
local results = mw.smw.ask(query)
results = p.makeTableStringsformatResults(results)
 
-- actual output
return p.displayTable(results)
-- for testing
--return '<pre>' ..mw.text.jsonEncode(results, mw.text.JSON_PRETTY).. '</pre>'
end
 
-- 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 = lang:formatNum(item.xp) -- format to include commas
if param.has_content(item.brewXP) and param.has_content(item.prepXP) then
item.XPStringXP = '|| {{formatnum:' .. item.XP ..-- format to include '}}'commas
else
item.XPStringXP = '|| Unknown'
end
if param.has_content(item.brewKP) and param.has_content(item.prepKP)hasKP then
item.KPStringKP = '|| {{formatnum:' .. 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:' .. 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:' .. item.KPPerHour ..-- want 2 decimal '}}'places
else
item.KPPerHourStringKPPerHour = '|| Unknown'
end
Line 156 ⟶ 145:
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('[[File:Alchemist small icon.png|15px]] 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, '!! colspan="10" | Profit/hr')
:tag('th')
table.insert(headerRow, '!! XP')
:attr{ colspan = '10' }
table.insert(headerRow, '!! XP/hr')
:wikitext('Buy Value')
table.insert(headerRow, '!! colspan="10" | Profit/XP')
:done()
table.insert(headerRow, '!! KP')
:tag('th')
table.insert(headerRow, '!! KP/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('Coins/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 )
:css{ ['text-align'] = 'center' }
table.insert(itemRow, item.profitPerHourString )
table.insert :wikitext(itemRow, item.XPString lvl)
:done()
table.insert(itemRow, item.XPPerHourString )
:tag('td')
table.insert(itemRow, item.profitPerXPString )
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]')
table.insert(itemRow, item.KPString )
:done()
table.insert(itemRow, item.KPPerHourString )
:tag('td')
: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)
: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
 
960

edits