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 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',
'?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)
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.formatResults(results)
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)
-- flags for if data values should be shown
-- currency strings for table
item.hasLvl = param.has_content(item.lvl)
if param.has_content(item.buy) then
item.hasBuy = param.has_content(item.buy)
item.buyString = '|| {{Currency cell|' .. item.buy .. '}}'
else
item.hasSell = param.has_content(item.sell)
item.hasProfit = item.hasBuy and item.hasSell
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 = 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()
: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
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 )
table.insert(itemRow, item.profitPerHourString )
:tag('td')
:IF(item.hasBuy)
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


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