Module:MinerPassiveList: Difference between revisions

Jump to navigation Jump to search
Content added Content deleted
m (condense table by omitting " (skill node)" from the displayed links to the skill nodes (link still goes to node))
(offload much of the search, screen, and format functions to the new ProfessionList module, so they work the same for all table)
Line 1: Line 1:
require('strict')
require('strict')
require('Module:Mw.html extension')
require('Module:Mw.html extension')
local param = require( 'Module:Paramtest' )
local currency = require('Module:Currency')
local lang = mw.getContentLanguage()
local lang = mw.getContentLanguage()
local plist = require('Module:ProfessionList')
local rts = require('Module:RecipeTreeSearch')


local p = {}
local p = {}
Line 10: Line 10:
function p.main()
function p.main()
local queryString = '[[Category:Miner]] AND [[Category:Pages with activities]]'
-- returns only directly needed parameter needed for the row,
-- other parameters are determined by subqueries of chained pages
local query = {
local function screenFunction(item)
return item.passive
'[[Variant of::Limestone (skill node)||Soapstone (skill node)||Alabaster (skill node)||Marble (skill node)||Mythstone (skill node)||Shinerium (skill node)||Silver (skill node)||Gold (skill node)||Purpladium (skill node)]]',
end
'?Variant of #- = variant',
'?Profession Level A = lvl',
local results = plist.generate_recipe_table(queryString,screenFunction)
'? #- = name',
'?Image #- = Image',
'?Activity XP = XP',
'?Activity duration = duration',
'?Activity coins = coins',
'?Skill node name = product',
'sort = Profession Level A',
'limit = 500'
}
local results = mw.smw.ask(query)


results = p.formatResults(results)
results = p.formatResults(results)
Line 34: Line 25:
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>'
--return '<pre>'..mw.text.jsonEncode(results, mw.text.JSON_PRETTY)..'</pre>'


end

-- makes the html for the cells containing currency directly
-- Replaces nil with an "unknown" cell
local function currency_cell(amount)
if not amount then
return mw.html.create('td')
:addClass('table-bg-gray')
:css{ ['text-align'] = 'center' }
:attr{ colspan = '10' }
:wikitext("''unknown''")
:done()
end
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.formatResults(results)
--simple check for nil results
if results ==nil or results[1] == nil then
return nil
end
-- iterate through products
-- iterate through products
for _, item in ipairs(results) do
for _, item in ipairs(results) do

-- protection against missing parameters
-- profit from selling the items
if not item.givesCoins then
item.product = item.product or ''
-- protection against missing parameters
item.product = item.product or ''
-- query is: there is a shop object page that has this item AND has buy price cannot be "N/A"
local query = mw.smw.ask('[[Sold item::' .. item.product .. ']][[Shop sell price::!~N/A]]|?Shop sell price=data|mainlabel=-')
if type(query)=='table' then
-- price is returned as a number
item.coins = tonumber(query[1].data)*0.005 or 0
else
-- will return nil if the item is not in a shop, or if it is in a shop but can only be sold to the shop
item.coins = 0
end
end
-- no downtime for passives
-- no downtime for passives
item.profit = item.sellPrice and item.sellPrice * 0.005
item.productPerHour = item.duration and 1 / item.duration * 3600
item.productPerHour = item.duration and 1 / item.duration * 3600


-- properties per hour
-- properties per hour
item.XPPerHour = item.XP and item.productPerHour and math.floor(item.XP * item.productPerHour)
item.xpPerHour = item.xp and item.productPerHour and math.floor(item.xp * item.productPerHour)
item.coinsPerHour = item.coins and item.productPerHour and math.floor(item.coins * item.productPerHour)
item.profitPerHour = item.profit and item.productPerHour and math.floor(item.profit * item.productPerHour)
end
end


Line 87: Line 55:
-- make the table
-- make the table
function p.displayTable(results)
function p.displayTable(results)
--simple check for nil results
if results ==nil or results[1] == nil then
return 'No data found for table'
end
local out = mw.html.create('table')
local out = mw.html.create('table')
:addClass('wikitable sortable')
:addClass('wikitable sortable')
Line 115: Line 89:
:done()
:done()
:done()
:done()

local unknown_value_cell = mw.html.create('td')
:addClass('table-bg-gray')
:css{ ['text-align'] = 'center' }
:wikitext("''unknown''")


for i, item in ipairs(results) do
for i, item in ipairs(results) do
Line 125: Line 94:
--level
--level
:IF(item.lvl)
:IF(item.level)
:tag('td')
:tag('td')
:css{ ['text-align'] = 'center' }
:css{ ['text-align'] = 'center' }
:wikitext(item.lvl)
:wikitext(item.level)
:done()
:done()
:ELSE()
:ELSE()
:node(plist.unknown_value_edit_cell(item.pageName,1))
:node(unknown_value_cell)
:END()
:END()
-- activity
-- activity
:node(plist.two_column_image_text(item.pageName,item.pageImage,item.pageName,item.pageName))
:tag('td')
:css{ ['border-right'] = '0', ['text-align'] = 'right', ['max-width'] = '100px' }
:addClass('plinkt-link no-border')
:attr{ ['data-sort-value'] = item.name }
:wikitext(' [[' .. item.Image .. '|link=' .. item.name .. '|30x30px]]')
:done()
:tag('td')
:addClass('plinkt-link no-border')
:wikitext('[[' .. item.name .. '|' .. item.product .. ']]')
:done()
-- products (coins or items)
-- products
:node(plist.three_column_image_text(item.product,0.005,'File:' .. item.product .. '.png',item.product,item.product))
:tag('td')
:css{ ['border-right'] = '0', ['text-align'] = 'right' }
:attr{ ['data-sort-value'] = item.name }
:wikitext('0.005 &times; ')
:done()
:tag('td')
:css{ ['border-right'] = '0', ['text-align'] = 'center' }
:addClass('plinkt-link no-border')
:wikitext('[[File:' .. item.product .. '.png|link=' .. item.product .. '|30x30px]]')
:done()
:tag('td')
:addClass('plinkt-link no-border')
:wikitext('[[' .. item.product .. ']]')
:done()
-- products per hour (items)
-- products per hour
:tag('td')
:tag('td')
:css{ ['text-align'] = 'right' }
:css{ ['text-align'] = 'right' }
Line 169: Line 116:
-- profit per hour (coins)
-- profit per hour (coins)
:node(currency_cell(item.coinsPerHour))
:node(plist.currency_cell(item.profitPerHour))


-- XP
-- XP
:IF(item.XP)
:IF(item.xp)
:tag('td')
:tag('td')
:wikitext(item.XP and lang:formatNum(tonumber(item.XP)))
:wikitext(item.xp and lang:formatNum(tonumber(item.xp)))
:done()
:done()
:ELSE()
:ELSE()
:node(plist.unknown_value_edit_cell(item.pageName,1))
:node(unknown_value_cell)
:END()
:END()
-- XP per hour
-- XP per hour
:IF(item.XPPerHour)
:IF(item.xpPerHour)
:tag('td')
:tag('td')
:wikitext(item.XPPerHour and lang:formatNum(tonumber(item.XPPerHour)))
:wikitext(item.xpPerHour and lang:formatNum(tonumber(item.xpPerHour)))
:done()
:done()
:ELSE()
:ELSE()
:node(unknown_value_cell)
:node(plist.unknown_value_cell(1))
:END()
:END()