Editing Module:Sandbox/User:Alsang/PotionList
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
local p = {} |
|||
require('Module:Mw.html extension') |
|||
local param = require( 'Module:Paramtest' ) |
local param = require( 'Module:Paramtest' ) |
||
local currency = require('Module:Currency') |
|||
local p = {} |
|||
-- non dynamic module, no inputs |
-- non dynamic module, no inputs |
||
Line 13: | Line 10: | ||
'[[Category:Potions]]', |
'[[Category:Potions]]', |
||
'[[Uses facility::Standard Potion Station||Potent Potion Station]]', |
'[[Uses facility::Standard Potion Station||Potent Potion Station]]', |
||
'[[Variant of::Fear]]', |
|||
'?Profession Level A = lvl', |
'?Profession Level A = lvl', |
||
'? #- = name', |
'? #- = name', |
||
'?Uses item.Uses item #- = reagents', |
'?Uses item.Uses item #- = reagents', |
||
'?Value = sell', |
'?Value = sell', |
||
'? |
'?Recipe XP = brewXP', |
||
'?Uses item. |
'?Uses item.Recipe XP = prepXP', |
||
'? |
'?Recipe KP = brewKP', |
||
'?Uses item. |
'?Uses item.Recipe KP = prepKP', |
||
'? |
'?Recipe duration = brewDuration', |
||
'?Uses item. |
'?Uses item.Recipe duration = prepDuration', |
||
'sort = Profession Level A' |
'sort = Profession Level A' |
||
} |
} |
||
local results = mw.smw.ask(query) |
local results = mw.smw.ask(query) |
||
results = p. |
results = p.makeTableStrings(results) |
||
-- actual output |
|||
return p.displayTable(results) |
return p.displayTable(results) |
||
-- for testing |
|||
end |
|||
--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 |
end |
||
-- do calculations and determine strings to go in cells |
-- do calculations and determine strings to go in cells |
||
function p. |
function p.makeTableStrings(results) |
||
-- iterate through potions |
-- iterate through potions |
||
Line 75: | Line 65: | ||
-- sanitise data, set to 0 if its not there |
-- sanitise data, set to 0 if its not there |
||
local lvl = item.lvl or |
local lvl = item.lvl or 0 |
||
local buy = item.buy or 0 |
|||
local sell = item.sell or 0 |
local sell = item.sell or 0 |
||
local brewXP = item.brewXP or 0 |
local brewXP = item.brewXP or 0 |
||
Line 86: | Line 75: | ||
-- direct values |
-- direct values |
||
item.profit = sell - buy |
item.profit = sell - item.buy |
||
item.XP = brewXP + prepXP |
item.XP = brewXP + prepXP |
||
item.KP = brewKP + prepKP |
item.KP = brewKP + prepKP |
||
Line 102: | Line 91: | ||
item.profitPerHour = math.floor(item.profit * item.potionPerHour) |
item.profitPerHour = math.floor(item.profit * item.potionPerHour) |
||
-- |
-- currency strings for table |
||
if param.has_content(item.buy) then |
|||
item. |
item.buyString = '|| {{Currency cell|' .. item.buy .. '}}' |
||
else |
|||
item.hasProfit = item.hasBuy and item.hasSell |
|||
item.buyString = '|| colspan="10" | Unknown' |
|||
item.hasXP = param.has_content(item.brewXP) and param.has_content(item.prepXP) |
|||
end |
|||
item.hasKP = param.has_content(item.brewKP) and param.has_content(item.prepKP) |
|||
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" |
|||
-- KP/KP strings |
|||
if item.hasXP then |
|||
if param.has_content(item.brewXP) and param.has_content(item.prepXP) then |
|||
--item.xp = lang:formatNum(item.xp) -- format to include commas |
|||
item.XPString = '|| {{formatnum:' .. item.XP .. '}}' |
|||
else |
|||
item. |
item.XPString = '|| Unknown' |
||
end |
end |
||
if item. |
if param.has_content(item.brewKP) and param.has_content(item.prepKP) then |
||
item. |
item.KPString = '|| {{formatnum:' .. item.KP .. '}}%' |
||
else |
else |
||
item. |
item.KPString = '|| Unknown' |
||
end |
end |
||
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 |
|||
if item.hasXP and item.hasDuration then |
|||
item. |
item.XPPerHourString = '|| {{formatnum:' .. item.XPPerHour .. '}}' |
||
else |
else |
||
item. |
item.XPPerHourString = '|| Unknown' |
||
end |
end |
||
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 |
|||
if item.hasKP and item.hasDuration then |
|||
item. |
item.KPPerHourString = '|| {{formatnum:' .. item.KPPerHour .. '}}' |
||
else |
else |
||
item. |
item.KPPerHourString = '|| Unknown' |
||
end |
end |
||
Line 145: | Line 156: | ||
function p.displayTable(results) |
function p.displayTable(results) |
||
local out = |
local out = {} |
||
table.insert(out, 'Potions per hour assumes 40 seconds resupply between each batch of 12 potions.') |
|||
:addClass('wikitable sortable') |
|||
table.insert(out, '{| class="wikitable sortable"') |
|||
:tag('tr') |
|||
:tag('th') |
|||
local headerRow = {} |
|||
:wikitext('[[File:Alchemist small icon.png|15px]] Level') |
|||
table.insert(headerRow, '! Level') |
|||
:done() |
|||
table.insert(headerRow, '!! Potion') |
|||
:tag('th') |
|||
table.insert(headerRow, '!! Reagents (plus bottle)') |
|||
:wikitext('Potion') |
|||
table.insert(headerRow, '!! colspan="10" | Buy Value') |
|||
:done() |
|||
table.insert(headerRow, '!! colspan="10" | Sell Value') |
|||
:tag('th') |
|||
table.insert(headerRow, '!! colspan="10" | Profit') |
|||
:wikitext('Reagents (plus bottle)') |
|||
table.insert(headerRow, '!! XP') |
|||
:done() |
|||
table.insert(headerRow, '!! KP') |
|||
:tag('th') |
|||
table.insert(headerRow, '!! colspan="10" | Profit/XP') |
|||
:attr{ colspan = '10' } |
|||
table.insert(headerRow, '!! XP/hr') |
|||
:wikitext('Buy Value') |
|||
table.insert(headerRow, '!! KP/hr') |
|||
:done() |
|||
table.insert(headerRow, '!! colspan="10" | Profit/hr') |
|||
:tag('th') |
|||
table.insert(out, table.concat(headerRow, ' ')) |
|||
:attr{ colspan = '10' } |
|||
: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 |
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 .. '}}') |
|||
table.insert(itemRow, '||') |
|||
-- need to generate the text for the reagent cell before starting the row |
|||
local reagentCell = '' |
|||
for j, reagent in ipairs(item.reagents) do |
for j, reagent in ipairs(item.reagents) do |
||
table.insert(itemRow, '{{plink|' .. reagent .. '}}<br>') |
|||
end |
end |
||
table.insert(itemRow, item.buyString ) |
|||
out |
|||
table.insert(itemRow, item.sellString ) |
|||
:tag('tr') |
|||
table.insert(itemRow, item.profitString ) |
|||
:tag('td') |
|||
table.insert(itemRow, item.XPString ) |
|||
:css{ ['text-align'] = 'center' } |
|||
table.insert(itemRow, item.KPString ) |
|||
table.insert(itemRow, item.profitPerXPString ) |
|||
:done() |
|||
table.insert(itemRow, item.XPPerHourString ) |
|||
:tag('td') |
|||
table.insert(itemRow, item.KPPerHourString ) |
|||
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]') |
|||
table.insert(itemRow, item.profitPerHourString ) |
|||
:done() |
|||
: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 |
end |
||
table.insert(out, '|}') |
|||
return out |
|||
return table.concat(out, '\n') |
|||
end |
end |
||