Module:ProfessionList: Difference between revisions
m
profit per xp
No edit summary |
m (profit per xp) |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1:
local currency = require('Module:Currency')
local search = require('Module:RecipeTreeSearch')
local p = {}
Line 48 ⟶ 49:
-- the queryString is just a selection of pages, from any combination of SMW properties and categories
-- for pages with multiple recipes or activities, will make on entry into the results table for each
-- screenFunction takes a decoded recipe/activity JSON and returns true if it is to be kept
function p.generate_recipe_table(queryString,screenFunction)
-- first formulate the query to get the list of pages
Line 66 ⟶ 68:
end
--
local
-- iterate through pages found
Line 79 ⟶ 81:
for _, JSON in ipairs(page.activityJSON) do
local item = mw.text.jsonDecode(JSON)
item.
item.pageImage = page.pageImage
item.type = 'activity'
table.insert(
end
end
Line 93 ⟶ 95:
for _, JSON in ipairs(page.recipeJSON) do
local item = mw.text.jsonDecode(JSON)
item.
item.pageImage = page.pageImage
item.type = 'recipe'
table.insert(
end
end
Line 102 ⟶ 104:
end
-- if none of the pages had recipes of activities, skip the rest of this function
if recipes == nil or recipes[1] == nil then
return nil
end
-- output structure
local output = {}
-- screen using screenFunction
for _, item in ipairs(recipes) do
if screenFunction(item) then
table.insert(output,item)
end
end
-- if all of the results were screened, skip the rest of this function
if output == nil or output[1] == nil then
return nil
end
-- sort the output by the .level parameter
table.sort(output, function(item1, item2)
Line 116 ⟶ 138:
return item1.level < item2.level
end)
-- perform a number of useful calculations on the data that are widely useful
-- like cost of materials, profit of products, recipe tree search
for _,item in ipairs(output) do
item.product = item.output[1].name or ''
-- perform the full recipe tree search on the product
local fullRecipe = search.main(item.product)
-- overwrite any parameters from the original recipe with their counterparts from the full recipe
-- when product is nil, no data is overwritten
for key,value in pairs(fullRecipe) do
item[key] = value
end
-- include the price of selling the product
item.sellPrice = search.getShopSellPrice(item.product)
item.profit = item.buyPrice and item.sellPrice and item.sellPrice - item.buyPrice
item.profitPerXP = item.profit and item.xp and item.profit / item.xp
end
return output
end
function p.one_column_image_text(sort,materials)
local materialCell = mw.html.create('td')
for _, mat in ipairs(item.materials) do
materialCell:wikitext(mat.quantity .. ' × [[File:' .. mat.name .. '.png|18px|link=' .. mat.name .. ']] [[' .. mat.name .. ']]<br>')
end
return materialCell
end
function p.two_column_image_text(sort,image,text,link)
return mw.html.create('td')
:css{ ['border-right'] = '0', ['text-align'] = 'right', ['max-width'] = '100px' }
:attr{ ['data-sort-value'] = sort }
:wikitext(' [[' .. image .. '|link=' .. link .. '|30x30px]]')
:done()
:tag('td')
:addClass('plinkt-link no-border')
:wikitext('[[' .. link .. '|' .. text ..']]')
:done()
end
function p.three_column_image_text(sort,quantity,image,text,link)
return mw.html.create('td')
:css{ ['border-right'] = '0', ['padding-right'] = '0', ['text-align'] = 'right' }
:attr{ ['data-sort-value'] = sort }
:wikitext(quantity .. ' ×')
:done()
:tag('td')
:addClass('plinkt-image no-border')
:css{ ['border-left'] = '0', ['padding-left'] = '0' }
:wikitext('[[' .. image .. '|link=' .. link .. '|30px]]')
:done()
:tag('td')
:addClass('plinkt-link no-border')
:wikitext('[[' .. link .. '|' .. text .. ']]')
:done()
end
|