Editing Module:Sandbox/User:Alsang/PassivePotionList
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 2: | Line 2: | ||
local param = require( 'Module:Paramtest' ) |
local param = require( 'Module:Paramtest' ) |
||
local currency = require('Module:Currency') |
local currency = require('Module:Currency') |
||
local lang = mw.getContentLanguage() |
|||
require("Module:Mw.html extension") |
|||
Line 13: | Line 11: | ||
-- returns almost every parameter needed for the row, except buy values for reagents |
-- returns almost every parameter needed for the row, except buy values for reagents |
||
local query = { |
local query = { |
||
'[[Category:Potions]]', |
|||
'[[Uses facility::Passive Potion Station]] OR [[Variant of::Ebsworth Work]]', |
|||
'[[Uses facility::Passive Potion Station]]', |
|||
'?Profession Level A = lvl', |
'?Profession Level A = lvl', |
||
'? #- = name', |
'? #- = name', |
||
'?Uses item #- = reagents', |
'?Uses item #- = reagents', |
||
'?Value |
'?Value = sell', |
||
'?Activity |
'?Activity XP = brewXP', |
||
'?Activity |
'?Activity KP = brewKP', |
||
'?Activity duration = |
'?Activity duration = brewDuration', |
||
'?Variant of #- = variant', |
|||
'sort = Profession Level A' |
'sort = Profession Level A' |
||
} |
} |
||
Line 30: | Line 28: | ||
return p.displayTable(results) |
return p.displayTable(results) |
||
--for debugging |
|||
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>' |
|||
end |
end |
||
-- makes the html for the cells containing currency directly, no tags needed |
-- 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) |
|||
local function currency_cell(amount,flag) |
|||
return currency._cell(amount, { html = 'yes' }) |
|||
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 |
||
Line 46: | Line 48: | ||
for i, item in ipairs(results) do |
for i, item in ipairs(results) do |
||
-- potions have reagents, but passive ebsworth work does not |
|||
-- iterate through reagents, adding buy price to running total (individuals not needed) |
|||
if item.variant=='Ebsworth Work' then |
|||
-- starting value 20 is for bottle |
|||
item.buy = 20 |
|||
for j, reagent in ipairs(item.reagents) do |
|||
--shamelessley lifted from Module:Products |
|||
-- if it is ebsworth work, sub in different fields for the buy and sell values |
|||
local shopPriceQuery = '[[:+]][[Sold item::' .. reagent .. ']]|?Shop buy price|mainlabel=' .. reagent |
|||
item.buy = 0 |
|||
local shopPriceResult = mw.smw.ask(shopPriceQuery) or {} |
|||
item.sell = item.coins |
|||
local shopPrice = 0 |
|||
else |
|||
-- 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 |
|||
end |
end |
||
-- sanitise data, set to 0 if its not there |
-- sanitise data, set to 0 if its not there |
||
Line 75: | Line 71: | ||
local buy = item.buy or 0 |
local buy = item.buy or 0 |
||
local sell = item.sell or 0 |
local sell = item.sell or 0 |
||
local |
local brewXP = item.brewXP or 0 |
||
local |
local brewKP = item.brewKP or 0 |
||
local |
local brewDuration = item.brewDuration or 0 |
||
-- direct values |
|||
item.profit = sell - buy |
|||
item.XP = brewXP |
|||
--item.KP = brewKP |
|||
item.profitPerXP = math.floor(item.profit / item.XP * 100) / 100 |
|||
-- passive activities have no downtime |
|||
item.duration = brewDuration |
|||
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)*0.005 |
|||
-- flags for if data values should be shown |
-- flags for if data values should be shown |
||
item.hasLvl = param.has_content(item.lvl) |
|||
item.hasBuy = param.has_content(item.buy) |
item.hasBuy = param.has_content(item.buy) |
||
item.hasSell = param.has_content(item.sell) |
item.hasSell = param.has_content(item.sell) |
||
item.hasProfit = item.hasBuy and item.hasSell |
item.hasProfit = item.hasBuy and item.hasSell |
||
item.hasXP = param.has_content(item. |
item.hasXP = param.has_content(item.brewXP) |
||
item. |
--item.hasKP = param.has_content(item.brewKP) |
||
item.hasDuration = param.has_content(item.brewDuration) |
|||
-- direct values |
|||
-- XP/KP strings, if the requisite data isnt there then display "unknown" |
|||
if item.variant=='Ebsworth Work' then |
|||
if item.hasXP then |
|||
--item.xp = lang:formatNum(item.xp) -- format to include commas |
|||
else |
|||
item.XP = item.XP -- format to include commas |
|||
item.profit = (sell - buy)*0.005 -- passive potions all have quantity 0.005 per action |
|||
end |
|||
item.XP = XP |
|||
if item.XP==0 then |
|||
item.profitPerXP = 0 |
|||
else |
else |
||
item.XP = 'Unknown' |
|||
item.profitPerXP = math.floor(item.profit / (item.XP) * 100) / 100 |
|||
end |
|||
--if item.hasKP then |
|||
-- passive activities have no downtime |
|||
item. |
-- item.KP = item.KP .. '%' -- want 1 decimal place |
||
--else |
|||
if item.duration == 0 then |
|||
item. |
-- item.KP = 'Unknown' |
||
--end |
|||
if item.hasXP and item.hasDuration then |
|||
item.XPPerHour = item.XPPerHour -- format to include commas |
|||
else |
else |
||
item. |
item.XPPerHour = 'Unknown' |
||
end |
|||
--if item.hasKP and item.hasDuration then |
|||
-- properties per hour |
|||
item. |
-- item.KPPerHour = item.KPPerHour -- want 2 decimal places |
||
--else |
|||
item.profitPerHour = math.floor(item.profit * item.potionPerHour) |
|||
-- item.KPPerHour = 'Unknown' |
|||
--end |
|||
end |
end |
||
Line 128: | Line 140: | ||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
:wikitext('Potion |
:wikitext('Potion') |
||
:done() |
:done() |
||
:tag('th') |
:tag('th') |
||
Line 159: | Line 171: | ||
:wikitext('Coins/XP') |
:wikitext('Coins/XP') |
||
:done() |
:done() |
||
--:tag('th') |
|||
-- :wikitext('KP') |
|||
--:done() |
|||
--:tag('th') |
|||
-- :wikitext('KP/hr') |
|||
--:done() |
|||
:done() |
:done() |
||
for i,item in ipairs(results) do |
for i,item in ipairs(results) do |
||
-- need to generate the text for the reagent cell before starting the row |
|||
-- if its not ebsworth work, need a list of reagents |
|||
local reagentCell = '' |
local reagentCell = '' |
||
for j, reagent in ipairs(item.reagents) do |
|||
if not(item.variant=='Ebsworth Work') then |
|||
reagentCell = reagentCell .. '[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. ']]<br>' |
|||
-- need to generate the text for the reagent cell before starting the row |
|||
for j, reagent in ipairs(item.reagents) do |
|||
reagentCell = reagentCell .. '[[File:' .. reagent .. '.png|30px|link=' .. reagent .. ']] [[' .. reagent .. ']]<br>' |
|||
end |
|||
end |
end |
||
out |
out |
||
:tag('tr') |
:tag('tr') |
||
:tag('td') |
:tag('td') |
||
:css{ ['text-align'] = 'center' } |
|||
:IF(item.hasBuy) |
|||
:wikitext(item.lvl) |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext(item.lvl) |
|||
:ELSE() |
|||
:addClass('table-bg-grey') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:END() |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]') |
:wikitext('[[File:' .. item.name .. '.png|30px|link=' .. item.name .. ']] [[' .. item.name .. ']]') |
||
:done() |
:done() |
||
:IF(not(item.variant=='Ebsworth Work')) |
|||
: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) |
|||
-- I cannot for the life of me figure out why, |
|||
-- but if I put item.sell directly into this function it claims it has value nil |
|||
-- it works for other functions to display it directly |
|||
-- so here is the workaround I guess |
|||
:wikitext(currency_cell(item.buy+200*item.profit)) |
|||
--:wikitext(currency_cell(item.sell)) |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-bg-grey') |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:ELSE() |
|||
:tag('td') |
|||
:addClass('table-na') |
|||
:attr{ colspan = '21' } |
|||
:wikitext('N/A') |
|||
: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') |
:tag('td') |
||
: |
:wikitext(reagentCell) |
||
:done() |
|||
:wikitext(currency_cell(item.buy,item.hasBuy)) |
|||
:ELSE() |
|||
:wikitext(currency_cell(item.sell,item.hasSell)) |
|||
:addClass('table-bg-grey') |
|||
:wikitext(currency_cell(item.profit,item.hasProfit)) |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext(currency_cell(item.profitPerHour,item.hasProfit and item.hasDuration)) |
|||
:wikitext('unknown') |
|||
:tag('td') |
|||
:wikitext(item.XP) |
|||
:done() |
:done() |
||
:tag('td') |
:tag('td') |
||
: |
:wikitext(item.XPPerHour) |
||
:wikitext(lang:formatNum(tonumber(item.XPPerHour))) |
|||
:ELSE() |
|||
:addClass('table-bg-grey') |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:END() |
|||
:done() |
:done() |
||
:wikitext(currency_cell(item.profitPerXP,item.hasXP and item.hasProfit)) |
|||
--:tag('td') |
|||
:IF(item.hasXP and item.hasProfit) |
|||
:wikitext |
-- :wikitext(item.KP) |
||
: |
--:done() |
||
--:tag('td') |
|||
-- :wikitext(item.KPPerHour) |
|||
--:done() |
|||
:attr{ colspan = '10' } |
|||
:css{ ['text-align'] = 'center' } |
|||
:wikitext('unknown') |
|||
:done() |
|||
:END() |
|||
:done() |
:done() |
||