Home
Random
Log in
Settings
About Brighter Shores Wiki
Disclaimers
Search
Editing
Module:PotionList
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.
Anti-spam check. Do
not
fill this in!
require('Module:Mw.html extension') 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 function p.main() -- returns almost every parameter needed for the row, except buy values for reagents local query = { '[[Category:Potions]]', '[[Uses facility::Standard Potion Station||Potent Potion Station]]', '?Profession Level A = lvl', '? #- = name', '?Uses item.Uses item #- = reagents', '?Value = sell', '?Activity XP = brewXP', '?Uses item.Activity XP = prepXP', '?Activity KP = brewKP', '?Uses item.Activity KP = prepKP', '?Activity duration = brewDuration', '?Uses item.Activity duration = prepDuration', 'sort = Profession Level A' } local results = mw.smw.ask(query) results = p.formatResults(results) return p.displayTable(results) 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) return currency._cell(amount, { html = 'yes' }) end -- do calculations and determine strings to go in cells function p.formatResults(results) -- iterate through potions for i, item in ipairs(results) do --in case of single reagent potions, make table of 1 element if type(item.reagents) ~= 'table' then item.reagents = {item.reagents} end -- iterate through reagents, adding buy price to running total (individuals not needed) -- starting value 20 is for bottle item.buy = 20 for j, reagent in ipairs(item.reagents) do --shamelessley lifted from Module:Products local shopPriceQuery = '[[:+]][[Sold item::' .. reagent .. ']]|?Shop buy price|mainlabel=' .. reagent local shopPriceResult = mw.smw.ask(shopPriceQuery) or {} local shopPrice = 0 if shopPriceResult[1] and shopPriceResult[1]["Shop buy price"] then shopPrice = tonumber(shopPriceResult[1]["Shop buy price"]) or 0 end item.buy = item.buy + shopPrice end -- sanitise data, set to 0 if its not there local lvl = item.lvl or '?' local buy = item.buy or 0 local sell = item.sell or 0 local brewXP = item.brewXP or 0 local prepXP = item.prepXP or 0 local brewKP = item.brewKP or 0 local prepKP = item.prepKP or 0 local brewDuration = item.brewDuration or 0 local prepDuration = item.prepDuration or 0 -- direct values item.profit = sell - buy item.XP = brewXP + prepXP item.KP = brewKP + prepKP item.profitPerXP = math.floor(item.profit / item.XP * 100) / 100 -- 40 seconds to buy new supplies and travel and deposit and everything, per 12 potions local batchSize = 12 local downtime = 40 item.duration = prepDuration + brewDuration + downtime/batchSize item.potionPerHour = 1 / item.duration * 3600 -- properties per hour item.XPPerHour = math.floor(item.XP * item.potionPerHour) item.KPPerHour = math.floor(item.KP * item.potionPerHour) / 100 item.profitPerHour = math.floor(item.profit * item.potionPerHour) -- flags for if data values should be shown item.hasLvl = param.has_content(item.lvl) item.hasBuy = param.has_content(item.buy) item.hasSell = param.has_content(item.sell) item.hasProfit = item.hasBuy and item.hasSell 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) end return results end -- make the table function p.displayTable(results) local out = mw.html.create('table') :addClass('wikitable sortable') :tag('tr') :tag('th') :wikitext('[[File:Alchemist small icon.png|15px]] Level') :done() :tag('th') :wikitext('Potion') :done() :tag('th') :wikitext('Reagents (plus bottle)') :done() :tag('th') :attr{ colspan = '10' } :wikitext('Buy Value') :done() :tag('th') :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 -- need to generate the text for the reagent cell before starting the row local reagentCell = '' for j, reagent in ipairs(item.reagents) do reagentCell = reagentCell .. '[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. ']]<br>' end out :tag('tr') :tag('td') :IF(item.hasBuy) :css{ ['text-align'] = 'center' } :wikitext(item.lvl) :ELSE() :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() end return out end return p
Summary:
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
Templates used on this page:
Template:DependencyList
(
edit
)
Template:Documentation
(
edit
)
Template:Extension DPL
(
edit
)
Template:No documentation
(
edit
)
Template:PageType
(
edit
)
Template:PotionList
(
edit
)
Template:PotionList/doc
(
edit
)
Module:Array
(
edit
)
Module:DPLlua
(
edit
)
Module:DependencyList
(
edit
)
Module:Documentation
(
edit
)
Module:Paramtest
(
edit
)
Module:PotionList
(
edit
)
Module:PotionList/doc
(
edit
)
Module:Tooltip
(
edit
)
Module:Yesno
(
view source
) (semi-protected)
This page is a member of a hidden category:
Category:Pages using DynamicPageList3 parser function