Module:AlternateRecipesTable/sandbox

local cargo = mw.ext.cargo -- DO NOT RELEASE YET | There multiple things im still working on and this could cause issues for people as I make it print an error as my budget console.log, as I cant understand how to use it local moduleTooltips = require('Module:ItemTooltip') local argList = { '_pageName', 'experimental', 'alternateRecipe', 'recipeName', 'researchTier', 'craftingTime', 'product', 'productCount', 'productsPerMinute', 'product2', 'productCount2', 'productsPerMinute2', 'product3', 'productCount3', 'productsPerMinute3', 'product4', 'productCount4', 'productsPerMinute4', 'ingredient1', 'quantity1', 'ingredient2', 'quantity2', 'ingredient3', 'quantity3', 'ingredient4', 'quantity4', 'ingredient5', 'quantity5', 'ingredient6', 'quantity6', 'ingredient7', 'quantity7', 'ingredient8', 'quantity8', 'ingredient9', 'quantity9', 'ingredient10', 'quantity10' }

local ExpAltRecip = 0 local StaAltRecip = 0 local p = {} local ribbonStyle = 'position:absolute; font-variant:all-small-caps; font-size:x-small; font-weight:bold; left:0; top:0; transform: rotate(-30deg) translate(-2em, -0.5em); color:white; padding: 1px 20px;' local experimental_style = ribbonStyle .. 'background:red;' local stable_style = ribbonStyle .. 'background:orange;'

-- creates debugging variables local debugx = '' -- what the user specified to debug local tablindeb = 0 -- the variable as to if it should log the variables related to the original ingredients /s (used to add 2 lines of padding to each alternate column) Full var name: tableLineDebug

-- displays a table with info about alternate recipes compared to their default counterpart function p.table local html = '' local rows = {} -- lookup recipe data from database local fields = table.concat(argList, ',') local queryArgs = { where = 'product IS NOT NULL', orderBy = 'alternateRecipe ASC, researchTier ASC, product ASC, recipeName ASC', limit = 500 } local recipes = cargo.query('crafting_recipes', fields, queryArgs)

-- store the default recipes for comparison local defaultRecipes = {} local r = 1 while recipes[r] and not (recipes[r].alternateRecipe and recipes[r].alternateRecipe == '1') do   local craftingTime = tonumber(recipes[r].craftingTime) if craftingTime and craftingTime > 0 then defaultRecipes[recipes[r].product] = recipes[r] local ingRows = {} local ii = 1 local numRows = tonumber(recipes[r]['quantity'..ii]) local blankRows = {} local batchPerMinute = 60 / craftingTime while recipes[r]['ingredient'..ii] and tonumber(recipes[r]['quantity'..ii]) do     	if  ii == 0 then table.insert(blankRows, ' ') table.insert(1, 'N/A') table.insert(blankRows, ' ') elseif ii > 0 then table.insert(blankRows, ' ') table.insert(ingRows, ' '..recipes[r]['ingredient'..ii]..' '..round(batchPerMinute * tonumber(recipes[r]['quantity'..ii]))..' ') table.insert(blankRows, ' ') end ii = ii + 1 if tablindeb == 1 then mw.log('ii: ' .. ii .. ' blankRows:' .. blankRows) end end defaultRecipes[recipes[r].product].ingredientTable = table.concat(ingRows,'') end r = r + 1 end

-- header local cols={'Alternate name','Product', 'Ingredients /min', 'Rate/min', 'Original Rate/min', 'Original Ingredients /min', 'Prerequisites'} table.insert(rows,' '..table.concat(cols,'  ')..'  ')

-- loop the alt recipes local altRecipesCount = 0 local iii = 1 while recipes[r] do   local craftingTime = tonumber(recipes[r].craftingTime) if craftingTime and craftingTime > 0 then local stripe = '' local stabletag = 0 -- DO NOT DELETE | Toastry | This is going to automatically label things to be "Stable only" meaning the recipe is only in stable, I've been awake for 33 hours at this point and I need to get some sleep, the keys on my keyboard are wobbling... if recipes[r].experimental ~= '1' then stablerecipie = recipes[r].recipeName local altRecipesCount = 0 for i=1, #recipes, 1 do       		if recipes[r].experimental == 1 and recipes[r].recipeName == stablerecipie then error('Condition 1') stripe = '' ..mw.getCurrentFrame:expandTemplate{title='Tooltip', args={[1]='Stable Only', [2]='This recipe is available only in Stable version of Satisfactory', [3]='no underline'}} .. ' '         end end end if recipes[r].experimental == '1' then ExpAltRecip = ExpAltRecip + 1 stripe = '' .. mw.getCurrentFrame:expandTemplate{title='Tooltip', args={[1]='Exp Only', [2]='This recipe is available only in Experimental version of Satisfactory', [3]='no underline'}} .. ' ' end --if recipes[r].experimental ~= '1' and recipes[r].recipeName=='Electrode - Aluminum Scrap' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Electromagnetic Connection Rod' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Heat Exchanger' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Infused Uranium Cell' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Nuclear Fuel Unit' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Pure Aluminum Ingot' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Radio Control System' or recipes[r].experimental ~= '1' and recipes[r].recipeName=='Turbo Rigour Motor' then   StaAltRecip = StaAltRecip + 1    stripe = ''       ..mw.getCurrentFrame:expandTemplate{title='Tooltip', args={[1]='Stable Only', [2]='This recipe is available only in Stable version of Satisfactory', [3]='no underline'}}      .. ' '  end-- local batchPerMinute = 60 / craftingTime local ingRows = {} local ii = 1 while recipes[r]['ingredient'..ii] and tonumber(recipes[r]['quantity'..ii]) do       table.insert(ingRows, ' '..recipes[r]['ingredient'..ii]..' '..round(batchPerMinute * tonumber(recipes[r]['quantity'..ii]))..' ') ii = ii + 1 end cols = {''..((recipes[r].recipeName and recipes[r].recipeName ~= '') and recipes[r].recipeName or recipes[r].product)..stripe..' ', ' '..recipes[r].product..' ', ''..table.concat(ingRows,'')..' ', ''..round(recipes[r].productsPerMinute)..' ' }     -- if default recipe is available, show it for comparison if defaultRecipes[recipes[r].product] then table.insert(cols, ''..round(defaultRecipes[recipes[r].product].productsPerMinute)..' ') table.insert(cols, ''..defaultRecipes[recipes[r].product].ingredientTable..' ') else table.insert(cols,' ') table.insert(cols,' ') end table.insert(cols, ' '..(recipes[r].researchTier and recipes[r].researchTier or '')..' ') table.insert(rows,' '..table.concat(cols)..' ') altRecipesCount = altRecipesCount + 1 else html = html .. ' '   end r = r + 1 end

return ' Total alternate recipes: '..altRecipesCount..' ' end -- debugging, leave in, may help in future -- to debug, in the console do p.debug(x), x being one of the following: 'Table', 'TableLines' -- example: p.debug('Table')

function p.debug(debugx) if debugx == 'Table' then mw.log('Running Table') p.table end if debugx == 'TableLines' then mw.log('Running Table Lines') tablindeb = 1 p.table end end

-- round to 1 decimal for display (string) function round(n) local tentimes = math.floor(n*10+0.5) local suffix = '' if tentimes % 10 == 0 then suffix = '.0' end return (tentimes/10)..suffix end

return p