Module:FoodDetails

From Eco - English Wiki

This module provides the back end functionality of the Template:FoodDetails.

If the template is passed, this module creates a table using details from the following Modules:


local p = {}

function p.main()
	local wiki = ''	
	
	-- import the required modules
	local itemData = mw.loadData( "Module:ItemData" )	
	local recipeData = mw.loadData( "Module:RecipeData" )
	local plantData = mw.loadData( "Module:PlantData" )
	
	-- assign modules for use
	local items = itemData.items
	local recipes = recipeData.recipes
	local plants = plantData.plants
	
	-- create the header of the table
	local header = "<table class=\"wikitable sortable\"> \n " 
	header = header .. "<tr> \n "
	header = header .. "<th>Food</th> \n "
	header = header .. "<th>Calories</th> \n "
	header = header .. "<th data-sort-type=\"descending\" style=\"color: red;\">Carbs</th> \n "
	header = header .. "<th style=\"color: orange;\">Protein</th> \n "
	header = header .. "<th style=\"color: yellow;\">Fat</th> \n "
	header = header .. "<th style=\"color: lightgreen;\">Vitamins</th> \n "
	header = header .. "<th>Nutrition</th> \n "
	header = header .. "<th>Density (/100kcal)</th> \n "
	header = header .. "<th>Skill Point Contribution</th> \n "
	header = header .. "<th>Created With</th> \n "
	header = header .. "<th>Skill Needed</th> \n "
	header = header .. "<th>Skill Level</th> \n "
	header = header .. "<th data-sort-type=\"number\">Base Crafting Time(Min)</th> \n "
	header = header .. "</tr> \n "
	
	wiki = header
	
	for k,v in pairs(items) do
		local row = ''
		if v.group == 'Food' then
--if (k == "Basic Salad" or k == "Fiddlehead Salad" or k == "Bear S U P R E M E" or k == "Charred Tomato" or k == "Tallow" or k == "Beet" or k == "Campfire Beans" or k == "Wheat") then
			local item = k
			row = row .. "<tr> \n "
			local nutrition = v.vitamins + v.carbs + v.protein + v.fat
			local sp_contribution = nutrition * v.calories
			
			-- print name, calories, carbs, protein, fat, vitamins, nutrition and skill point contribution from ItemData.
			row = row .. "<td> [[" .. item .. "]] </td> \n"
			row = row .. "<td>" .. v.calories .. " </td> \n" 
			row = row .. "<td>" .. v.carbs .. "</td> \n" 
			row = row .. "<td>" .. v.protein .. "</td> \n" 
			row = row .. "<td>" .. v.fat .. "</td> \n"
			row = row .. "<td>" .. v.vitamins .. "</td> \n"
			row = row .. "<td>" .. nutrition .. "</td> \n"
			row = row .. "<td>" .. v.density .. "</td> \n"			
			row = row .. "<td>" .. sp_contribution .. "</td> \n"
			
			local created = ''
			local skill = ''
			local skill_level = ''
			local baseCraftTime = ''
			local baseLaborCost = ''
			local baseXPGain = ''
			local recipe = ''
			local plant = ''
			if recipes[item] ~= nil then
				recipe = recipes[item]  -- implies food item is created via a recipe with the item's name
			-- else
				-- for key,val in pairs(recipes) do
					-- for numx =  1, #val.variants[item].products and val.variants ~= '' do
						-- if val.variants[item].products[numx][1] == item then
							-- recipe = val  -- implies food item is created via a differently named recipe (issue: selects the first found recipe)
						-- end
					-- end	
				-- end
			end
			if recipe ~= '' then
				created = recipe.craftStn[1][1]
				if recipe.skillNeeds[1] == nil then
					skill = "none"  -- implies a basic recipe like Campfire Beans
					skill_level = '-'
				else
					skill = recipe.skillNeeds[1][1] -- implies a "normal" recipe like Fiddlehead Salad that has a skill requirement
					skill_level = tonumber(recipe.skillNeeds[1][2])
				end
				baseCraftTime = tonumber(recipe.baseCraftTime)
				if baseCraftTime == 0 then
					baseCraftTime = '?'  -- it looks like many foods have erroneous 0 baseCraftTime, so these are explicitly marked suspect
				end
			else
				for key,val in pairs(plants) do 
					if val.resourceItem == '[[' .. item .. ']]' then
						plant = val  --implies food item is harvested from a plant
					end
				end
				if plant ~= '' then
					skill = "Gathering"
					skill_level = 0
					if (plant.harvestTool ~= nil and plant.killOnHarvest == 'Yes') then
						created = plant.harvestTool  --implies a plant like wheat that must be destroyed with a tool 
					else
						created = "none"  --implies a plant gathered like beets or huckleberry, even if the plant can be destroyed with a tool
					end
					baseCraftTime = 0
				else
					--implies food item not created via a recipe or a plant
					created = "-"
					skill = "-"
					skill_level = "-"
					baseCraftTime = "-"
				end
			end

			if (skill ~= '' and skill ~= 'none' and skill ~= '-') then
				skill = "[[" .. skill .. "]]"
			end

			if (created ~= '' and created ~= 'none' and created ~= '-') then
				created = "[[" .. created .. "]]"
			end
			
			-- print the icon or none for the found created.
			row = row .. "<td>" .. tostring(created) .. "</td> \n"
			
			-- print skill needed or none.
			row = row .. "<td>" .. tostring(skill) .. "</td> \n"
			
			-- print skill level needed.
			row = row .. "<td>" .. tostring(skill_level) .. "</td> \n"
			
			-- print crafting minutes.
			row = row .. "<td>" .. baseCraftTime .. "</td> \n" 
			row = row .. "</tr>"


			--print(item)
			--print(tostring(created))
			--print(tostring(skill))
			--print(tostring(skill_level))
			--print(tostring(baseCraftTime))
			--print("")
			
--end
		end
		
		-- add row created to table.
		wiki = wiki .. row
		
	end
	wiki = wiki .. " </table>"
	return wiki
end

return p