Module:ProfessionList: Difference between revisions

m
profit per xp
No edit summary
m (profit per xp)
(9 intermediate revisions by the same user not shown)
Line 1:
local currency = require('Module:Currency')
local search = require('Module:RecipeTreeSearch')
 
local p = {}
Line 41 ⟶ 42:
:css{ ['text-align'] = 'center' }
:attr{ colspan = tostring(N) }
:wikitext('['..url.." '''?''' (edit)]")
:done()
end
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)
function p.generate_recipe_table(queryString,screenFunction)
-- first formulate the query to get the list of pages
Line 66 ⟶ 68:
end
-- outputcollate structure
local outputrecipes = {}
-- iterate through pages found
for _, page in ipairs(pages) do
-- first iterate through activities
-- combine the activityJSON and recipeJSON into one table
local JSONs = {}
if page.activityJSON ~= nil then
if type(page.activityJSON)=='string' then
tablepage.insert(JSONs,activityJSON = { page.activityJSON) }
elseend
for _, jsonJSON in ipairs(page.activityJSON) do
local item = mw.text.jsonDecode(JSON)
json.type = 'activity'
item.pageName = page.pageName
table.insert(JSONs,json)
item.pageImage = page.pageImage
end
item.type = 'activity'
table.insert(recipes,item)
end
end
-- same iteration through recipes
if page.recipeJSON ~= nil then
if type(page.recipeJSON)=='string' then
tablepage.insert(JSONs,recipeJSON = { page.recipeJSON) }
else
for _, json in page.recipeJSON do
json.type = 'recipe'
table.insert(JSONs,json)
end
end
for _, JSON in ipairs(page.recipeJSON) do
end
-- iterate through combined list of JSONs and extract the info
if JSONs[1] ~= nil then
for _, JSON in ipairs(JSONs) do
--decode the JSON to a Lua table, add data from the page that had it
local item = mw.text.jsonDecode(JSON)
item.pagepageName = page.pageName
item.pageImage = page.pageImage
item.type = 'recipe'
table.insert(recipes,item)
--insert into output table
table.insert(output,item)
end
end
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 124 ⟶ 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 .. ' &times; [[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 .. ' &times;')
: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
11,305

edits