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 lang = mw.getContentLanguage() |
|||
require("Module:Mw.html extension") |
|||
local p = {} |
|||
-- non dynamic module, no inputs |
-- non dynamic module, no inputs |
||
Line 15: | 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) |
|||
return currency._cell(amount, { html = 'yes' }) |
|||
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 71: | 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 82: | 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 98: | 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.hasSell = param.has_content(item.sell) |
|||
item. |
item.buyString = '|| colspan="10" | Unknown' |
||
end |
|||
item.hasXP = param.has_content(item.brewXP) and param.has_content(item.prepXP) |
|||
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 |
|||
-- KP/KP strings |
|||
if param.has_content(item.brewXP) and param.has_content(item.prepXP) then |
|||
item.XPString = '|| {{formatnum:' .. item.XP .. '}}' |
|||
else |
|||
item.XPString = '|| Unknown' |
|||
end |
|||
if param.has_content(item.brewKP) and param.has_content(item.prepKP) then |
|||
item.KPString = '|| {{formatnum:' .. item.KP .. '}}%' |
|||
else |
|||
item.KPString = '|| Unknown' |
|||
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 |
|||
item.XPPerHourString = '|| {{formatnum:' .. item.XPPerHour .. '}}' |
|||
else |
|||
item.XPPerHourString = '|| Unknown' |
|||
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 |
|||
item.KPPerHourString = '|| {{formatnum:' .. item.KPPerHour .. '}}' |
|||
else |
|||
item.KPPerHourString = '|| Unknown' |
|||
end |
|||
end |
end |
||
Line 115: | 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, '!! colspan="10" | Profit/hr') |
|||
:done() |
|||
table.insert(headerRow, '!! XP') |
|||
:tag('th') |
|||
table.insert(headerRow, '!! XP/hr') |
|||
:attr{ colspan = '10' } |
|||
table.insert(headerRow, '!! colspan="10" | Profit/XP') |
|||
:wikitext('Buy Value') |
|||
table.insert(headerRow, '!! KP') |
|||
:done() |
|||
table.insert(headerRow, '!! KP/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() |
|||
:done() |
|||
for i,item in ipairs(results) do |
for i,item in ipairs(results) do |
||
table.insert(out, '|-') |
|||
local itemRow = {} |
|||
-- need to generate the text for the reagent cell before starting the row |
|||
table.insert(itemRow, '| [[File:Alchemist small icon.png|15px]] ' .. item.lvl ) |
|||
local reagentCell = '' |
|||
table.insert(itemRow, '|| {{plink|' .. item.name .. '}}') |
|||
table.insert(itemRow, '||') |
|||
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 ) |
|||
table.insert(itemRow, item.profitPerHourString ) |
|||
:tag('td') |
|||
table.insert(itemRow, item.XPString ) |
|||
table.insert(itemRow, item.XPPerHourString ) |
|||
:css{ ['text-align'] = 'center' } |
|||
table.insert(itemRow, item.profitPerXPString ) |
|||
:wikitext(item.lvl) |
|||
table.insert(itemRow, item.KPString ) |
|||
:ELSE() |
|||
table.insert(itemRow, item.KPPerHourString ) |
|||
:addClass('table-bg-grey') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:END() |
|||
:done() |
|||
:tag('td') |
|||
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]') |
|||
:done() |
|||
:tag('td') |
|||
:wikitext(reagentCell) |
|||
:done() |
|||
:IF(item.hasBuy) |
|||
:wikitext(currency_cell(item.buy)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:IF(item.hasSell) |
|||
:wikitext(currency_cell(item.sell)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:IF(item.hasProfit) |
|||
:wikitext(currency_cell(item.profit)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:IF(item.hasProfit and item.hasDuration) |
|||
:wikitext(currency_cell(item.profitPerHour)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:tag('td') |
|||
:IF(item.hasXP) |
|||
:wikitext(lang:formatNum(tonumber(item.XP))) |
|||
:ELSE() |
|||
:addClass('table-bg-grey') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:END() |
|||
:done() |
|||
:tag('td') |
|||
:IF(item.hasXP and item.hasDuration) |
|||
:wikitext(lang:formatNum(tonumber(item.XPPerHour))) |
|||
:ELSE() |
|||
:addClass('table-bg-grey') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:END() |
|||
:done() |
|||
:IF(item.hasXP and item.hasProfit) |
|||
:wikitext(currency_cell(item.profitPerXP)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:done() |
|||
table.insert(out, table.concat(itemRow, ' ')) |
|||
end |
end |
||
table.insert(out, '|}') |
|||
return out |
|||
return table.concat(out, '\n') |
|||
end |
end |
||