Module:ProjectLister/Single
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:ProjectLister/Single/doc
---
---Reads the Project data files and presents them in readable formats, with additional calculated statistics.
---
---@module ProjectLister
local ProjectLister = {}
--region Dependencies
local IconModule = require('Module:Icon')
local TVModule = require('Module:TV')
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 ObjectiveNames = mw.loadData('Module:ENReader/Objective')
local ProjectPrereqs = mw.loadData('Module:ProjectLister/Prereqs')
local ProjectCosts = mw.loadData('Module:ProjectLister/Costs')
local ProjectProjects = mw.loadData('Module:ProjectLister/Projects')
local HabModuleLister = require('Module:HabModuleLister')
local OrgLister = require('Module:OrgLister')
local BatteryNames = mw.loadData('Module:ENReader/Battery')
local DriveNames = mw.loadData('Module:ENReader/Drive')
local GunNames = mw.loadData('Module:ENReader/Gun')
local HeatSinkNames = mw.loadData('Module:ENReader/HeatSink')
local LaserWeaponNames = mw.loadData('Module:ENReader/LaserWeapon')
local MagneticGunNames = mw.loadData('Module:ENReader/MagneticGun')
local MissileNames = mw.loadData('Module:ENReader/Missile')
local NationNames = mw.loadData('Module:ENReader/Nation')
local ParticleWeaponNames = mw.loadData('Module:ENReader/ParticleWeapon')
local PlasmaWeaponNames = mw.loadData('Module:ENReader/PlasmaWeapon')
local PowerPlantNames = mw.loadData('Module:ENReader/PowerPlant')
local RadiatorNames = mw.loadData('Module:ENReader/Radiator')
local RegionNames = mw.loadData('Module:ENReader/Region')
local ShipArmorNames = mw.loadData('Module:ENReader/ShipArmor')
local ShipHullNames = mw.loadData('Module:ENReader/ShipHull')
local UtilityModuleNames = mw.loadData('Module:ENReader/UtilityModule')
local BatteryProjects = mw.loadData('Module:BatteryLister/Projects')
local ClaimProjects = mw.loadData('Module:ClaimLister/Projects')
local DriveProjects = mw.loadData('Module:DriveLister/Projects')
local GunProjects = mw.loadData('Module:GunLister/Projects')
local HabModuleProjects = mw.loadData('Module:HabModuleLister/Projects')
local HeatSinkProjects = mw.loadData('Module:HeatSinkLister/Projects')
local LaserWeaponProjects = mw.loadData('Module:LaserWeaponLister/Projects')
local MagneticGunProjects = mw.loadData('Module:MagneticGunLister/Projects')
local MissileProjects = mw.loadData('Module:MissileLister/Projects')
local ParticleWeaponProjects = mw.loadData('Module:ParticleWeaponLister/Projects')
local PlasmaWeaponProjects = mw.loadData('Module:PlasmaWeaponLister/Projects')
local PowerPlantProjects = mw.loadData('Module:PowerPlantLister/Projects')
local RadiatorProjects = mw.loadData('Module:RadiatorLister/Projects')
local ShipArmorProjects = mw.loadData('Module:ShipArmorLister/Projects')
local ShipHullProjects = mw.loadData('Module:ShipHullLister/Projects')
local UtilityModuleProjects = mw.loadData('Module:UtilityModuleLister/Projects')
local EffectDescriptionBuilder = require('Module:EffectLister/DescriptionBuilder')
--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
---@param frame a set of arguments that includes:
----frame.args[1] the dataName of the project
----frame.args['notes'] any additional notes the output table should contain
---@return wiki table of details for that project
function ProjectLister.SingleProjectTable(frame)
local ProjectID = frame.args[1]
local ProjectNotes = frame.args['notes'] or ''
local returnString = '{| class="wikitable" style="width: 100%;text-align:center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! colspan=4 | <big><big><big>' .. (ProjectNames['TIProjectTemplate.displayName.' .. ProjectID] or ProjectID) .. '</big></big></big><br>' .. IconModule.Icon({args={ScienceCategories[ProjectData[ProjectID]['techCategory']], size='120px'}})
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! colspan=4 | ' .. TVModule.TV({args={'research', ProjectData[ProjectID]['researchCost']}})
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! colspan=4 | Summary'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | ' .. (ProjectNames['TIProjectTemplate.summary.' .. ProjectID] or 'Error: Missing Summary')
returnString = returnString .. '\n|-'
if ProjectNames['TIProjectTemplate.description.' .. ProjectID] then
returnString = returnString .. '\n! colspan=4 | Description'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | ' .. ProjectNames['TIProjectTemplate.description.' .. ProjectID]
returnString = returnString .. '\n|-'
end
if ProjectData[ProjectID]['repeatable'] and ProjectData[ProjectID]['repeatable'] == 'true' then
returnString = returnString .. '\n! <big>Repeatable Project</big>'
returnString = returnString .. '\n| colspan=3 | Can be researched an unlimited number of times, but research cost is multiplied by (1 + number of times researched).'
returnString = returnString .. '\n|-'
end
if ProjectData[ProjectID]['oneTimeGlobally'] and ProjectData[ProjectID]['oneTimeGlobally'] == 'true' then
returnString = returnString .. '\n! <big>Global Project</big>'
returnString = returnString .. '\n| colspan=3 | Can be researched by only one faction. As soon as a faction researches this project, it is removed from all factions. Global projects usually give a global bonus (such as nation claims) that all factions can potentially benefit from, but may also have smaller bonuses that are only given to the faction that researches the project.'
returnString = returnString .. '\n|-'
end
returnString = returnString .. '\n! rowspan=2| Base Unlock Chance'
returnString = returnString .. '\n! colspan=3| Monthly Available Chance'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Initial'
returnString = returnString .. '\n! Monthly Increase'
returnString = returnString .. '\n! Maximum'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| style="width:25%;" | ' .. ProjectData[ProjectID]['factionAvailableChance'] .. '%'
returnString = returnString .. '\n| style="width:25%;" | ' .. ProjectData[ProjectID]['initialUnlockChance'] .. '%'
returnString = returnString .. '\n| style="width:25%;" | ' .. ProjectData[ProjectID]['deltaUnlockChance'] .. '%'
returnString = returnString .. '\n| style="width:25%;" | ' .. ProjectData[ProjectID]['maxUnlockChance'] .. '%'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Available to Faction(s): '
if not ProjectData[ProjectID]['factionPrereq/0'] or ProjectData[ProjectID]['factionPrereq/0'] == '' then
returnString = returnString .. '\n| colspan=3 | All'
else
local councils = {}
for i = 0, 5 do
local freq = ProjectData[ProjectID]['factionPrereq/' .. i]
if freq and freq ~= '' and freq ~= 0 then
insert(councils, IconModule.Icon({args={CouncilIcons[freq]}}))
end
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(councils, '')
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Guaranteed for Faction: '
local falways = ProjectData[ProjectID]['factionAlways']
if not falways or falways == '' then
returnString = returnString .. '\n| colspan=3 | '
elseif falways == 'Random' then
returnString = returnString .. '\n| colspan=3 | Random'
else
returnString = returnString .. '\n| colspan=3 | ' .. IconModule.Icon({args={CouncilIcons[falways]}})
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | \n{| class="wikitable sortable mw-collapsible" style="width: 100%;text-align:center;"'
returnString = returnString .. '\n|+ Full List of Prerequisites.'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Name'
returnString = returnString .. '\n! Type'
returnString = returnString .. '\n! Cost'
returnString = returnString .. '\n|-'
for prereqID, _ in pairs(ProjectPrereqs[ProjectID]) do
if string.sub(prereqID,1,7) == 'Project' then
local prereqIDChance = ProjectData[prereqID]['factionAvailableChance']
returnString = returnString .. '\n| (' .. prereqIDChance .. '%) [[' .. prereqID .. '|' .. (ProjectNames['TIProjectTemplate.displayName.' .. prereqID] or prereqID) .. ']]'
returnString = returnString .. '\n| ' .. IconModule.Icon({args={ScienceCategories[ProjectData[prereqID]['techCategory']]}}) .. IconModule.Icon({args={'projects'}})
returnString = returnString .. '\n| ' .. ProjectData[prereqID]['researchCost']
returnString = returnString .. '\n|-'
else
returnString = returnString .. '\n| [[' .. prereqID .. '|' .. (TechNames['TITechTemplate.displayName.' .. prereqID] or prereqID) .. ']]'
returnString = returnString .. '\n| ' .. IconModule.Icon({args={ScienceCategories[TechData[prereqID]['techCategory']]}})
returnString = returnString .. '\n| ' .. TechData[prereqID]['researchCost']
returnString = returnString .. '\n|-'
end
end
returnString = returnString .. '\n|}'
returnString = returnString .. '\n|-'
local prereq0 = ProjectData[ProjectID]['prereqs/0']
local altprereq = ProjectData[ProjectID]['altPrereq0']
if altprereq and altprereq ~= '' then
if string.sub(prereq0,1,7) == 'Project' then
prereq0 = '[[' .. prereq0 .. '|' .. (ProjectNames['TIProjectTemplate.displayName.' .. prereq0] or prereq0) .. ']]'
else
prereq0 = '[[' .. prereq0 .. '|' .. TechNames['TITechTemplate.displayName.' .. prereq0] .. ']]'
end
if string.sub(altprereq,1,7) == 'Project' then
altprereq = '[[' .. altprereq .. '|' .. (ProjectNames['TIProjectTemplate.displayName.' .. altprereq] or altprereq) .. ']]'
else
altprereq = '[[' .. altprereq .. '|' .. TechNames['TITechTemplate.displayName.' .. altprereq] .. ']]'
end
returnString = returnString .. '\n! Alt Prereq: || colspan=3 | Replace ' .. prereq0 .. '<br>With ' .. altprereq
returnString = returnString .. '\n|-'
end
local requiredObjectiveName = ProjectData[ProjectID]['requiredObjectiveName']
local altRequiredObjectiveName = ProjectData[ProjectID]['altRequiredObjectiveName']
if requiredObjectiveName and requiredObjectiveName ~= '' then
returnString = returnString .. '\n! colspan=4 | Required Objective (only one needed)'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'destroy'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.DestroyCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.DestroyCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.DestroyCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.DestroyCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.DestroyCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'resist'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ResistCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ResistCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.ResistCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ResistCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.ResistCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'escape'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.EscapeCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.EscapeCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.EscapeCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.EscapeCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.EscapeCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'exploit'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ExploitCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ExploitCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.ExploitCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.ExploitCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.ExploitCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'cooperate'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.CooperateCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.CooperateCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.CooperateCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.CooperateCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.CooperateCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'appease'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.AppeaseCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.AppeaseCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.AppeaseCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.AppeaseCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.AppeaseCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! ' .. IconModule.Icon({args={'submit'}})
returnString = returnString .. '\n| colspan=3 | '
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.SubmitCouncil'] then
returnString = returnString .. '[[' .. requiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.SubmitCouncil'] .. ']]'
end
if altRequiredObjectiveName and altRequiredObjectiveName ~= '' and ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.SubmitCouncil'] then
if ObjectiveNames['TIObjectiveTemplate.displayName.' .. requiredObjectiveName .. '.SubmitCouncil'] then
returnString = returnString .. ' • '
end
returnString = returnString .. '[[' .. altRequiredObjectiveName .. '|' .. ObjectiveNames['TIObjectiveTemplate.displayName.' .. altRequiredObjectiveName .. '.SubmitCouncil'] .. ']]'
end
returnString = returnString .. '\n|-'
end
local requiredMilestone = ProjectData[ProjectID]['requiredMilestone']
if requiredMilestone and requiredMilestone ~= '' then
returnString = returnString .. '\n! colspan=4 | Required Milestone'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | ' .. (ObjectiveNames['TIObjectiveTemplate.MilestoneFulfilled.' .. requiredMilestone] or requiredMilestone)
returnString = returnString .. '\n|-'
end
returnString = returnString .. '\n! colspan=4 | <big>Total ' .. TVModule.TV({args={'research'}}) .. ' Cost</big><br>(Including itself)<br>(Does not consider Alt Prereqs)'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. 'Category'
returnString = returnString .. '\n!' .. 'From Projects'
returnString = returnString .. '\n!' .. 'From Techs'
returnString = returnString .. '\n!' .. 'Category Subtotal'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'energy'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['energyProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['energyTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['energyTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'information'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['informationProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['informationTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['informationTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'life'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['lifeProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['lifeTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['lifeTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'material'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['materialProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['materialTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['materialTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'military'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['militaryProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['militaryTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['militaryTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'social'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['socialProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['socialTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['socialTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'space'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['spaceProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['spaceTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['spaceTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n!' .. IconModule.Icon({args={'xenology'}})
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['xenologyProject']
returnString = returnString .. '\n|'
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['xenologyTotal']
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Total'
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['totalProject']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['totalTech']
returnString = returnString .. '\n|' .. ProjectCosts[ProjectID]['total']
returnString = returnString .. '\n|-'
if ProjectProjects[ProjectID] then
returnString = returnString .. '\n! colspan=4 | Direct Prerequisite For Projects:'
returnString = returnString .. '\n|-'
local projectprojects = {}
for projectprojectID, _ in pairs(ProjectProjects[ProjectID]) do
insert(projectprojects, '[[' .. projectprojectID .. '|' .. (ProjectNames['TIProjectTemplate.displayName.' .. projectprojectID] or projectprojectID) .. ']]')
end
returnString = returnString .. '\n| colspan=4 | ' .. concat(projectprojects, ' • ')
returnString = returnString .. '\n|-'
end
returnString = returnString .. '\n! colspan=4| <big>Effects</big>'
returnString = returnString .. '\n|-'
if ProjectData[ProjectID]['effects/0'] and ProjectData[ProjectID]['effects/0'] ~= '' and ProjectData[ProjectID]['effects/0'] ~= 0 then
for i = 0, 3 do
local peffect = ProjectData[ProjectID]['effects/' .. i]
if peffect and peffect ~= '' and peffect ~= 0 then
effectDescription = EffectDescriptionBuilder.buildDescription({args={peffect,primaryDisplay='Researching Faction'}})
if effectDescription and effectDescription ~= '' and effectDescription ~= 'ERROR: No Description' then
returnString = returnString .. '\n| colspan=4| ' .. effectDescription
else
returnString = returnString .. '\n| colspan=4| ' .. peffect
end
returnString = returnString .. '\n|-'
end
end
end
local projectOrg = ProjectData[ProjectID]['orgGranted']
if projectOrg and projectOrg ~= '' and projectOrg ~= 0 then
returnString = returnString .. '\n! colspan=4 | Creates [[Orgs|Org]]: \n|-'
returnString = returnString .. '\n| colspan=4 | \n' .. OrgLister.ListRestrictedOrgs({args = {'Match,dataName,' .. projectOrg}})
returnString = returnString .. '\n|-'
end
local projectResourceType = ProjectData[ProjectID]['resourcesGranted/0/resource']
if projectResourceType and projectResourceType ~= '' and projectResourceType ~= 0 then
returnString = returnString .. '\n! Gives [[Resources|Resource]]:'
returnString = returnString .. '\n| colspan=3 | ' .. TVModule.TV({args={projectResourceType, ProjectData[ProjectID]['resourcesGranted/0/value'], 'true'}})
returnString = returnString .. '\n|-'
end
local unlockItems = BatteryProjects[ProjectID]
local uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Battery|Batteries]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, BatteryNames['TIBatteryTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = ClaimProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Foreign_Relations#Claims|Claim(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, '[[' .. BilateralData[unlock]['nation1'] .. '|' .. (NationNames['TINationTemplate.displayName.' .. BilateralData[unlock]['nation1']] or BilateralData[unlock]['nation1']) .. ']] gains a claim on ' .. (RegionNames['TIRegionTemplate.displayName.' .. BilateralData[unlock]['region1']] or BilateralData[unlock]['region1']))
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = DriveProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Drive|Drive(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, DriveNames['TIDriveTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = GunProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Guns|Naval Gun(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, GunNames['TIGunTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = HabModuleProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! colspan=4 | Unlocks [[Habs|Hab Module(s)]]: \n|-'
for unlock, _ in pairs(unlockItems) do
insert(uitems, unlock)
end
returnString = returnString .. '\n| colspan=4 | \n' .. HabModuleLister.ListHabModules({'Match Any,dataName,' .. concat(uitems, ',')})
returnString = returnString .. '\n|-'
end
unlockItems = HeatSinkProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Heat Sink|Heat Sink(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, HeatSinkNames['TIHeatSinkTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = LaserWeaponProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Lasers|Laser(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, LaserWeaponNames['TILaserWeaponTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = MagneticGunProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Magnetic Weapons|Magnetic Gun(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, MagneticGunNames['TIMagneticGunTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = MissileProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Missiles|Missile(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, MissileNames['TIMissileTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = ParticleWeaponProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Particle Weapons|Particle Weapon(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, ParticleWeaponNames['TIParticleWeaponTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = PlasmaWeaponProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Plasma Weapons|Plasma Weapon(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, PlasmaWeaponNames['TIPlasmaWeaponTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = PowerPlantProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Power Plant|Power Plant(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, PowerPlantNames['TIPowerPlantTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = RadiatorProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Radiator|Radiator(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, RadiatorNames['TIRadiatorTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = ShipArmorProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Armor|Ship Armor(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, ShipArmorNames['TIShipArmorTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = ShipHullProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Hull|Ship Hull(s)]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, ShipHullNames['TIShipHullTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
unlockItems = UtilityModuleProjects[ProjectID]
uitems = {}
if unlockItems and unlockItems ~= {} then
returnString = returnString .. '\n! Unlocks [[Spaceships#Utility Modules|Utility Modules]]:'
for unlock, _ in pairs(unlockItems) do
insert(uitems, UtilityModuleNames['TIUtilityModuleTemplate.displayName.' .. unlock] or unlock)
end
returnString = returnString .. '\n| colspan=3 | ' .. concat(uitems, ' • ')
returnString = returnString .. '\n|-'
end
returnString = returnString .. '\n! colspan=4 | Notes'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | ' .. ProjectNotes
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! colspan=4 | Data Sources'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | [[TIProjectTemplate_CSV]] • [[TIProjectTemplate_EN]] • [[TITechTemplate_CSV]] • [[TITechTemplate_EN]] • [[TIBatteryTemplate_CSV]] • [[TIBatteryTemplate_EN]] • [[TIBilateralTemplate_CSV]] • [[TIDriveTemplate_CSV]] • [[TIDriveTemplate_EN]] • [[TIGunTemplate_CSV]] • [[TIGunTemplate_EN]] • [[TIHabModuleTemplate_CSV]] • [[TIHabModuleTemplate_EN]] • [[TIHeatSinkTemplate_CSV]] • [[TIHeatSinkTemplate_EN]] • [[TILaserWeaponTemplate_CSV]] • [[TILaserWeaponTemplate_EN]] • [[TIMagneticGunTemplate_CSV]] • [[TIMagneticGunTemplate_EN]] • [[TIMissileTemplate_CSV]] • [[TIMissileTemplate_EN]] • [[TINationTemplate_EN]] • [[TIOrgTemplate_CSV]] • [[TIOrgTemplate_EN]] • [[TIParticleWeaponTemplate_CSV]] • [[TIParticleWeaponTemplate_EN]] • [[TIPlasmaWeaponTemplate_CSV]] • [[TIPlasmaWeaponTemplate_EN]] • [[TIPowerPlantTemplate_CSV]] • [[TIPowerPlantTemplate_EN]] • [[TIRadiatorTemplate_CSV]] • [[TIRadiatorTemplate_EN]] • [[TIRegionTemplate_EN]] • [[TIShipArmorTemplate_CSV]] • [[TIShipArmorTemplate_EN]] • [[TIShipHullTemplate_CSV]] • [[TIShipHullTemplate_EN]] • [[TIUtilityModuleTemplate_CSV]] • [[TIUtilityModuleTemplate_EN]]'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! colspan=4 | Related Pages'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n| colspan=4 | [[Tech List]] • [[Project List]] • [[Technology]]'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n|}'
return returnString
end
--endregion
return ProjectLister


