Editing Module:Sandbox/User:Alsang/PassivePotionList

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 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 #- = sell',
'?Value = sell',
'?Activity coins = coins',
'?Recipe XP = brewXP',
'?Activity XP = XP',
'?Recipe KP = brewKP',
'?Activity duration = duration',
'?Recipe 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
if shopPriceResult[1] and shopPriceResult[1]["Shop buy price"] then
shopPrice = tonumber(shopPriceResult[1]["Shop buy price"]) or 0
shopPrice = tonumber(shopPriceResult[1]["Shop buy price"]) or 0
end
end
item.buy = item.buy + shopPrice
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 XP = item.XP or 0
local brewXP = item.brewXP or 0
local KP = item.KP or 0
local brewKP = item.brewKP or 0
local duration = item.duration or 0
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.XP)
item.hasXP = param.has_content(item.brewXP)
item.hasDuration = param.has_content(item.duration)
--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
item.profit = sell - buy
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
end
--if item.hasKP then
-- passive activities have no downtime
item.duration = duration
-- item.KP = item.KP .. '%' -- want 1 decimal place
--else
if item.duration == 0 then
item.potionPerHour = 0
-- item.KP = 'Unknown'
--end
if item.hasXP and item.hasDuration then
item.XPPerHour = item.XPPerHour -- format to include commas
else
else
item.potionPerHour = 1 / (item.duration) * 3600
item.XPPerHour = 'Unknown'
end
end
--if item.hasKP and item.hasDuration then
-- properties per hour
item.XPPerHour = math.floor(item.XP * item.potionPerHour)
-- 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 or Activity')
: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')
:IF(item.hasXP)
:wikitext(reagentCell)
:wikitext(item.XP)
: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')
:END()
:tag('td')
:wikitext(item.XP)
:done()
:done()
:tag('td')
:tag('td')
:IF(item.hasXP and item.hasDuration)
: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(currency_cell(item.profitPerXP))
-- :wikitext(item.KP)
:ELSE()
--:done()
:tag('td')
--:tag('td')
:addClass('table-bg-grey')
-- :wikitext(item.KPPerHour)
--:done()
:attr{ colspan = '10' }
:css{ ['text-align'] = 'center' }
:wikitext('unknown')
:done()
:END()
:done()
:done()
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