Module:LeatherworkerList: Difference between revisions
Jump to navigation
Jump to search
Content added Content deleted
Californ1a (talk | contribs) mNo edit summary |
(switch from using Infobox Recipe function _getTrueRawMaterials to a purpose built module RecipeTreeSearch designed for combining multi-stage recipes) |
||
Line 1: | Line 1: | ||
require('strict') |
require('strict') |
||
require('Module:Mw.html extension') |
require('Module:Mw.html extension') |
||
local |
local search = require('Module:RecipeTreeSearch') |
||
local param = require( 'Module:Paramtest' ) |
local param = require( 'Module:Paramtest' ) |
||
local currency = require('Module:Currency') |
local currency = require('Module:Currency') |
||
Line 64: | Line 64: | ||
for _, item in ipairs(results) do |
for _, item in ipairs(results) do |
||
-- New module for recipe searching |
|||
local unpackJSON = mw.text.jsonDecode(item.recipeJSON) |
|||
local fullRecipe = search.main(item.name) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
-- call the module:infobox recipe to extensively search for |
|||
⚫ | |||
-- all raw materials (to add to prices) |
|||
item.XP = fullRecipe.xp |
|||
-- all intermediate materials (for intermediate XP and duration) |
|||
item.duration = fullRecipe.duration |
|||
local Materials = recipe._getTrueRawMaterials(unpackJSON.materials) |
|||
⚫ | |||
if next(Materials) ~= nil then |
|||
-- discounted buy price is not included by the RecipeTreeSearch module, have to do it manually |
|||
⚫ | |||
item.intermediates = Materials.intermediateMaterials |
|||
end |
|||
-- iterate through materials, adding buy price to running total (individuals not needed) |
|||
⚫ | |||
item.buyDiscount = 0 |
item.buyDiscount = 0 |
||
for _, material in ipairs(item.materials) do |
for _, material in ipairs(item.materials) do |
||
⚫ | |||
--shamelessley lifted from Module:Products |
|||
local shopPriceQuery = '[[:+]][[Sold item::' .. material.name .. ']]|?Shop buy price|mainlabel=' .. material.name |
|||
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 |
|||
else |
|||
item.buy = nil |
|||
end |
|||
item.buy = item.buy and item.buy + shopPrice * material.quantity |
|||
--with the merchant discount, buy price is sell price |
--with the merchant discount, buy price is sell price |
||
Line 109: | Line 91: | ||
end |
end |
||
-- iterate through intermediaries to add to XP and duration parameters |
|||
for _, intermediate in ipairs(item.intermediates) do |
|||
-- look up activity XP and add it to running total |
|||
local XPQuery = '[[Recipe output::' .. intermediate.name .. ']]|?Activity XP|mainlabel=' .. intermediate.name |
|||
local XPResult = mw.smw.ask(XPQuery) or {} |
|||
local XPIncrease = 0 |
|||
if XPResult[1] and XPResult[1]["Activity XP"] then |
|||
XPIncrease = tonumber(XPResult[1]["Activity XP"]) or 0 |
|||
else |
|||
XPIncrease = nil |
|||
end |
|||
-- need to look up both the amount of the item used in this recipe and created in its own recipe to know how much of this xp to use |
|||
local QTYused = intermediate.quantity |
|||
local QTYQuery = '[[Recipe output::' .. intermediate.name .. ']]|?Recipe JSON|mainlabel=' .. intermediate.name |
|||
local QTYResult = mw.smw.ask(QTYQuery) or {} |
|||
local QTYmade = 0 |
|||
if QTYResult[1] and QTYResult[1]["Recipe JSON"] then |
|||
QTYmade = mw.text.jsonDecode(QTYResult[1]["Recipe JSON"]) or {} |
|||
end |
|||
QTYmade = QTYmade.output[1].quantity |
|||
item.XP = item.XP and XPIncrease and item.XP + XPIncrease * QTYused / QTYmade; |
|||
-- look up activity duration and add it to running total |
|||
local durationQuery = '[[Recipe output::' .. intermediate.name .. ']]|?Activity duration|mainlabel=' .. intermediate.name |
|||
local durationResult = mw.smw.ask(durationQuery) or {} |
|||
local durationIncrease = 0 |
|||
if durationResult[1] and durationResult[1]["Activity duration"] then |
|||
durationIncrease = tonumber(durationResult[1]["Activity duration"]) or 0 |
|||
else |
|||
durationIncrease = nil |
|||
end |
|||
item.duration = item.duration and durationIncrease and item.duration + durationIncrease * intermediate.quantity |
|||
end |
|||
-- direct values |
-- direct values |
||
item.sell = item.sell and item.outputQuantity and item.sell * item.outputQuantity |
item.sell = item.sell and item.outputQuantity and item.sell * item.outputQuantity |
||
Line 157: | Line 100: | ||
item.discountLevel = discount[hideName] |
item.discountLevel = discount[hideName] |
||
-- a lot of downtime in leatherworker |
-- a lot of downtime in leatherworker, but large batch sizes |
||
-- 1min 40s to go from hide stall to tannery, run round the tannery, run to leather stall, then back to hide stall |
-- 1min 40s to go from hide stall to tannery, run round the tannery, run to leather stall, then back to hide stall |
||
local batchSize = 24 |
local batchSize = 24 |