Editing Module:AlchemistList
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: | ||
require('strict') |
require('strict') |
||
require('Module:Mw.html extension') |
require('Module:Mw.html extension') |
||
local search = require('Module:RecipeTreeSearch') |
|||
local param = require( 'Module:Paramtest' ) |
local param = require( 'Module:Paramtest' ) |
||
local currency = require('Module:Currency') |
local currency = require('Module:Currency') |
||
Line 10: | Line 9: | ||
-- non dynamic module, no inputs |
-- non dynamic module, no inputs |
||
function p.main() |
function p.main() |
||
-- returns |
-- returns almost every parameter needed for the row, except buy values for reagents |
||
-- other parameters are determined by subqueries of chained pages |
|||
local query = { |
local query = { |
||
'[[Category:Potions]]', |
|||
'[[Uses facility::Standard Potion Station||Potent Potion Station]]', |
'[[Uses facility::Standard Potion Station||Potent Potion Station]]', |
||
'?Profession Level A = lvl', |
'?Profession Level A = lvl', |
||
'? #- = name', |
'? #- = name', |
||
'? |
'?Uses item.Uses item #- = reagents', |
||
⚫ | |||
⚫ | |||
'?Value = sell', |
'?Value = sell', |
||
' |
'?Activity XP = brewXP', |
||
'?Uses item.Activity XP = prepXP', |
|||
'limit = 500' |
|||
⚫ | |||
'?Uses item.Activity KP = prepKP', |
|||
⚫ | |||
'?Uses item.Activity duration = prepDuration', |
|||
'sort = Profession Level A' |
|||
} |
} |
||
local results = mw.smw.ask(query) |
local results = mw.smw.ask(query) |
||
Line 28: | Line 30: | ||
return p.displayTable(results) |
return p.displayTable(results) |
||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
end |
||
Line 38: | Line 37: | ||
local function currency_cell(amount) |
local function currency_cell(amount) |
||
if not amount then |
if not amount then |
||
return mw.html.create('td') |
return tostring(mw.html.create('td') |
||
:addClass('table-bg-gray') |
:addClass('table-bg-gray') |
||
:css{ ['text-align'] = 'center' } |
:css{ ['text-align'] = 'center' } |
||
:attr{ colspan = '10' } |
:attr{ colspan = '10' } |
||
:wikitext("''unknown''") |
:wikitext("''unknown''") |
||
:done() |
:done()) |
||
end |
end |
||
return currency._cell(amount, { html = 'yes' }) |
return currency._cell(amount, { html = 'yes' }) |
||
Line 51: | Line 50: | ||
function p.formatResults(results) |
function p.formatResults(results) |
||
-- iterate through |
-- iterate through potions |
||
for _, item in ipairs(results) do |
for _, item in ipairs(results) do |
||
--in case of single reagent potions, make table of 1 element |
|||
-- New module for recipe searching |
|||
if type(item.reagents) ~= 'table' then |
|||
local fullRecipe = search.main(item.name) |
|||
item. |
item.reagents = {item.reagents} |
||
end |
|||
item.outputQuantity = fullRecipe.output[1].quantity |
|||
⚫ | |||
-- iterate through reagents, adding buy price to running total (individuals not needed) |
|||
item.XP = fullRecipe.xp |
|||
-- starting value 20 is for bottle |
|||
item.duration = fullRecipe.duration |
|||
⚫ | |||
for _, 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 |
|||
-- direct values |
-- direct values |
||
⚫ | |||
item.profit = item.sell and item.buy and item.sell - item.buy |
item.profit = item.sell and item.buy and item.sell - item.buy |
||
⚫ | |||
item.KP = item.brewKP and item.prepKP and item.brewKP + item.prepKP |
|||
item.profitPerXP = item.profit and item.XP and math.floor(item.profit / item.XP * 100) / 100 |
item.profitPerXP = item.profit and item.XP and math.floor(item.profit / item.XP * 100) / 100 |
||
Line 70: | Line 84: | ||
local batchSize = 12 |
local batchSize = 12 |
||
local downtime = 40 |
local downtime = 40 |
||
item.duration = item. |
item.duration = item.prepDuration and item.brewDuration and item.prepDuration + item.brewDuration + downtime/batchSize |
||
item. |
item.potionPerHour = item.duration and 1 / item.duration * 3600 |
||
-- properties per hour |
-- properties per hour |
||
item.XPPerHour = item.XP and item. |
item.XPPerHour = item.XP and item.potionPerHour and math.floor(item.XP * item.potionPerHour) |
||
item. |
item.KPPerHour = item.KP and item.potionPerHour and math.floor(item.KP * item.potionPerHour) / 100 |
||
item.profitPerHour = item.profit and item.potionPerHour and math.floor(item.profit * item.potionPerHour) |
|||
end |
end |
||
Line 90: | Line 105: | ||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
: |
:wikitext('Potion') |
||
:wikitext('Product') |
|||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext(' |
:wikitext('Reagents (plus bottle)') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
Line 141: | Line 155: | ||
:tag('td') |
:tag('td') |
||
⚫ | |||
:css{ ['border-right'] = '0', ['padding-right'] = '0', ['text-align'] = 'right' } |
|||
:attr{ ['data-sort-value'] = item.name } |
|||
:wikitext(item.outputQuantity .. ' ×') |
|||
:done() |
|||
:tag('td') |
|||
:addClass('plinkt-image no-border') |
|||
:css{ ['border-left'] = '0', ['padding-left'] = '0' } |
|||
⚫ | |||
:done() |
|||
:tag('td') |
|||
:addClass('plinkt-link no-border') |
|||
:wikitext('[[' .. item.name .. ']]') |
|||
:done() |
:done() |
||
local |
local reagentCell = row:tag('td') |
||
for |
for j, reagent in ipairs(item.reagents) do |
||
reagentCell:wikitext('[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. ']]<br>') |
|||
end |
end |
||
row |
row |
||
: |
:wikitext(currency_cell(item.buy)) |
||
: |
:wikitext(currency_cell(item.sell)) |
||
: |
:wikitext(currency_cell(item.profit)) |
||
: |
:wikitext(currency_cell(item.profitPerHour)) |
||
:IF(item.XP) |
:IF(item.XP) |
||
Line 183: | Line 186: | ||
:END() |
:END() |
||
: |
:wikitext(currency_cell(item.profitPerXP)) |
||
:done() |
:done() |