Module:ProjectLister/Faction
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:ProjectLister/Faction/doc
---
---Reads the Project data files and presents them in readable formats, with additional calculated statistics, for a specific faction
---
---@module ProjectLister
local ProjectLister = {}
--region Dependencies
local IconModule = require('Module:Icon')
local ProjectData = mw.loadData('Module:CSVReader/Project')
local TechData = mw.loadData('Module:CSVReader/Tech')
local BilateralData = mw.loadData('Module:CSVReader/Bilateral')
local ProjectNames = mw.loadData('Module:ENReader/Project')
local TechNames = mw.loadData('Module:ENReader/Tech')
local ProjectPrereqs = mw.loadData('Module:ProjectLister/Prereqs')
local ProjectCosts = mw.loadData('Module:ProjectLister/Costs')
local ProjectProjects = mw.loadData('Module:ProjectLister/Projects')
--endregion
--region Private constants
local insert = table.insert
local concat = table.concat
local floor = math.floor
local sfind = string.find
local ssub = string.sub
local ScienceCategories = {
Energy = 'energy',
InformationScience='information',
LifeScience='life',
Materials='material',
MilitaryScience='military',
SocialScience='social',
SpaceScience='space',
Xenology='xenology'
}
local CouncilIcons = {
DestroyCouncil='destroy',
ResistCouncil='resist',
EscapeCouncil='escape',
ExploitCouncil='exploit',
CooperateCouncil='cooperate',
AppeaseCouncil='appease',
SubmitCouncil='submit',
AlienCouncil='alien'
}
--endregion
--region Private member variables
--none
--endregion
--region Private methods
--endregion
--region Public methods
function ProjectLister.ListDestroyProjects()
return ProjectLister.ListFactionProjects('DestroyCouncil')
end
function ProjectLister.ListResistProjects()
return ProjectLister.ListFactionProjects('ResistCouncil')
end
function ProjectLister.ListEscapeProjects()
return ProjectLister.ListFactionProjects('EscapeCouncil')
end
function ProjectLister.ListExploitProjects()
return ProjectLister.ListFactionProjects('ExploitCouncil')
end
function ProjectLister.ListCooperateProjects()
return ProjectLister.ListFactionProjects('CooperateCouncil')
end
function ProjectLister.ListAppeaseProjects()
return ProjectLister.ListFactionProjects('AppeaseCouncil')
end
function ProjectLister.ListSubmitProjects()
return ProjectLister.ListFactionProjects('SubmitCouncil')
end
---@param faction string indicating which faction to show projects for.
---Use the ideology + 'Council', e.g. Humanity first = DestroyCouncil
---@return wiki table of Projects
function ProjectLister.ListFactionProjects(faction)
local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Project'
returnString = returnString .. '\n! Type'
returnString = returnString .. '\n! Research<br>Cost'
returnString = returnString .. '\n! Full<br>Cost'
returnString = returnString .. '\n! Base Unlock Chance'
returnString = returnString .. '\n! Available To:'
returnString = returnString .. '\n! Guaranteed Unlock for:'
returnString = returnString .. '\n|-'
for rowID, row in pairs(ProjectData) do
if (not row['disable'] or row['disable'] ~= 'true') and row['factionPrereq/0'] ~= 'AlienCouncil' and (row['factionPrereq/0'] == faction or row['factionPrereq/1'] == faction or row['factionPrereq/2'] == faction or row['factionPrereq/3'] == faction or row['factionPrereq/4'] == faction or row['factionPrereq/5'] == faction or row['factionAlways'] == faction) then
returnString = returnString .. '\n| [[' .. rowID .. '|' .. (ProjectNames['TIProjectTemplate.displayName.' .. rowID] or rowID) .. ']]'
returnString = returnString .. '\n| ' .. IconModule.Icon({args={ScienceCategories[row['techCategory']]}})
returnString = returnString .. '\n| ' .. row['researchCost']
returnString = returnString .. '\n| ' .. tostring(ProjectCosts[rowID]['total'])
returnString = returnString .. '\n| ' .. row['factionAvailableChance'] .. '%'
if not row['factionPrereq/0'] or row['factionPrereq/0'] == '' then
returnString = returnString .. '\n| All'
else
local councils = {}
for i = 0, 5 do
local freq = row['factionPrereq/' .. i]
if freq and freq ~= '' and freq ~= 0 then
insert(councils, IconModule.Icon({args={CouncilIcons[freq]}}))
end
end
returnString = returnString .. '\n| ' .. concat(councils, '')
end
local falways = row['factionAlways']
if not falways or falways == '' then
returnString = returnString .. '\n| '
elseif falways == 'Random' then
returnString = returnString .. '\n| Random'
else
returnString = returnString .. '\n| ' .. IconModule.Icon({args={CouncilIcons[falways]}})
end
returnString = returnString .. '\n|-'
end
end
returnString = returnString .. '\n|}'
return returnString
end
--endregion
return ProjectLister


