Module:MissionLister

From Terra Invicta Official Wiki

Documentation for this module may be created at Module:MissionLister/doc

---
---Reads the Mission data files and presents them in readable formats, with additional calculated statistics.
---
---@module MissionLister
local MissionLister = {}

--region Dependencies
local IconModule = require('Module:Icon')
local MissionData = mw.loadData('Module:CSVReader/Mission')
local MissionNames = mw.loadData('Module:ENReader/Mission')
--endregion

--region Private constants
--endregion



--region Private member variables
--none
--endregion

--region Private methods


--endregion

--region Public methods

---#param Whether to show the spoiler missions.
---@return wiki table of Missions to Noise Levels
function MissionLister.ListNoise(frame)
	local showSpoilers = frame.args[1]
	
	local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
	returnString = returnString .. "\n|+ Noise generated by [[missions]]"
	returnString = returnString .. '\n|-'
	returnString = returnString .. '\n! rowspan=2 | Mission'
	returnString = returnString .. '\n! colspan=4 | Noise Generated when Outcome is:'
	returnString = returnString .. '\n|-'
	returnString = returnString .. '\n! Critical Failure'
	returnString = returnString .. '\n! Normal Failure'
	returnString = returnString .. '\n! Normal Success'
	returnString = returnString .. '\n! Critical Success'
	returnString = returnString .. '\n|-'
	
	for rowID, row in pairs(MissionData) do
		if (not row['disable'] or row['disable'] ~= 'true') then
			if (showSpoilers == 'true') == (row['councilorEffects/0/$type'] == 'TIMissionEffect_Win' 
				or (row['knowledgeProject'] and row['knowledgeProject'] ~= '')) then 
				returnString = returnString .. '\n| ' .. IconModule.MissionIcon({args={rowID}}) .. '[[' .. MissionNames['TIMissionTemplate.displayName.' .. rowID] .. ']]'
				
				if row['resolutionMethod/$type'] == 'TIMissionResolution_Contested' then
					returnString = returnString .. '\n| ' .. row['noise/1']
					returnString = returnString .. '\n| ' .. row['noise/2']
					returnString = returnString .. '\n| ' .. row['noise/4']
					returnString = returnString .. '\n| ' .. row['noise/5']
				else
					returnString = returnString .. '\n| '
					returnString = returnString .. '\n| ' 
					returnString = returnString .. '\n| ' .. row['noise/4']
					returnString = returnString .. '\n| '
				end
				
		    	returnString = returnString .. '\n|-'
			end
    	end
	end
	returnString = returnString .. '\n|}'
	
	return returnString
end

---#param Whether to show the spoiler missions.
---@return wiki table of Missions to Hate Levels
function MissionLister.ListHate(frame)
	local showSpoilers = frame.args[1]
	
	local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
	returnString = returnString .. "\n|+ Base Hate generated by [[missions]]"
	returnString = returnString .. '\n|-'
	returnString = returnString .. '\n! rowspan=2 | Mission'
	returnString = returnString .. '\n! colspan=4 | Base Hate Generated when Outcome is:'
	returnString = returnString .. '\n|-'
	returnString = returnString .. '\n! Critical Failure'
	returnString = returnString .. '\n! Normal Failure'
	returnString = returnString .. '\n! Normal Success'
	returnString = returnString .. '\n! Critical Success'
	returnString = returnString .. '\n|-'
	
	for rowID, row in pairs(MissionData) do
		if (not row['disable'] or row['disable'] ~= 'true') then
			if (showSpoilers == 'true') == (row['councilorEffects/0/$type'] == 'TIMissionEffect_Win' 
				or (row['knowledgeProject'] and row['knowledgeProject'] ~= '')) then 
				returnString = returnString .. '\n| ' .. IconModule.MissionIcon({args={rowID}}) .. '[[' .. MissionNames['TIMissionTemplate.displayName.' .. rowID] .. ']]'
				
				if row['resolutionMethod/$type'] == 'TIMissionResolution_Contested' then
					returnString = returnString .. '\n| ' .. row['hate/1']
					returnString = returnString .. '\n| ' .. row['hate/2']
					returnString = returnString .. '\n| ' .. row['hate/4']
					returnString = returnString .. '\n| ' .. row['hate/5']
				else
					returnString = returnString .. '\n| '
					returnString = returnString .. '\n| ' 
					returnString = returnString .. '\n| ' .. row['hate/4']
					returnString = returnString .. '\n| '
				end
				
		    	returnString = returnString .. '\n|-'
			end
    	end
	end
	returnString = returnString .. '\n|}'
	
	return returnString
end

--endregion

return MissionLister