Editing Module:Sandbox/User:Alsang/PotionList

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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',
'?Activity XP = brewXP',
'?Recipe XP = brewXP',
'?Uses item.Activity XP = prepXP',
'?Uses item.Recipe XP = prepXP',
'?Activity KP = brewKP',
'?Recipe KP = brewKP',
'?Uses item.Activity KP = prepKP',
'?Uses item.Recipe KP = prepKP',
'?Activity duration = brewDuration',
'?Recipe duration = brewDuration',
'?Uses item.Activity duration = prepDuration',
'?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.formatResults(results)
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.formatResults(results)
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)
-- flags for if data values should be shown
-- currency strings for table
item.hasBuy = param.has_content(item.buy)
if param.has_content(item.buy) then
item.hasSell = param.has_content(item.sell)
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.XP = item.XP -- format to include commas
item.XPString = '|| {{formatnum:' .. item.XP .. '}}'
else
else
item.XP = 'Unknown'
item.XPString = '|| Unknown'
end
end
if item.hasKP then
if param.has_content(item.brewKP) and param.has_content(item.prepKP) then
item.KP = item.KP .. '%' -- want 1 decimal place
item.KPString = '|| {{formatnum:' .. item.KP .. '}}%'
else
else
item.KP = 'Unknown'
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.XPPerHour = item.XPPerHour -- format to include commas
item.XPPerHourString = '|| {{formatnum:' .. item.XPPerHour .. '}}'
else
else
item.XPPerHour = 'Unknown'
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.KPPerHour = item.KPPerHour -- want 2 decimal places
item.KPPerHourString = '|| {{formatnum:' .. item.KPPerHour .. '}}'
else
else
item.KPPerHour = 'Unknown'
item.KPPerHourString = '|| Unknown'
end
end
Line 145: Line 156:
function p.displayTable(results)
function p.displayTable(results)
local out = mw.html.create('table')
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()
--: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
reagentCell = reagentCell .. '[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. ']]<br>'
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.profitPerHourString )
:css{ ['text-align'] = 'center' }
:wikitext(item.lvl)
table.insert(itemRow, item.XPString )
table.insert(itemRow, item.XPPerHourString )
:done()
table.insert(itemRow, item.profitPerXPString )
:tag('td')
table.insert(itemRow, item.KPString )
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]')
table.insert(itemRow, item.KPPerHourString )
: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


Please note that all contributions to Brighter Shores Wiki are considered to be released under the CC BY-NC-SA 3.0 (see Brighter Shores:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)
Preview page with this template