Module:ClaimLister
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:ClaimLister/doc
---
---Reads the Claim data files and presents them in readable formats, with additional calculated statistics.
---
---@module ClaimLister
local ClaimLister = {}
--region Dependencies
local IconModule = require('Module:Icon')
local RegionData = mw.loadData('Module:CSVReader/Region')
local NationData = mw.loadData('Module:CSVReader/Nation')
local ClaimData = mw.loadData('Module:CSVReader/Claim')
local RegionNameBuilder = require('Module:RegionLister/NameBuilder')
local NationNames = mw.loadData('Module:ENReader/Nation')
local ProjectNameBuilder = require('Module:ProjectLister/NameBuilder')
--endregion
--region Private constants
local floor = math.floor
local ssub = string.sub
local tinsert = table.insert
local tconcat = table.concat
--endregion
--region Private member variables
--none
--endregion
--region Private methods
--none
--endregion
--region Public methods
function ClaimLister.ListPresentNations()
return ClaimLister.ListNations('2022')
end
function ClaimLister.List2026Nations()
return ClaimLister.ListNations('2026')
end
function ClaimLister.ListFutureNations()
return ClaimLister.ListNations('2070')
end
function ClaimLister.ListPresentRegions()
return ClaimLister.ListRegions('2022')
end
function ClaimLister.List2026Regions()
return ClaimLister.ListRegions('2026')
end
function ClaimLister.ListFutureRegions()
return ClaimLister.ListRegions('2070')
end
---@param campaignYear The start year of the campaign to show nations for. Defaults to 2022 if not specified
---@return table
function ClaimLister.ListNations(campaignYear)
if not campaignYear then
campaignYear = '2022'
end
local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Nation<br>Alternate Name'
returnString = returnString .. '\n! Initially Owned'
returnString = returnString .. '\n! Initially Claimed'
returnString = returnString .. '\n! Researchable Claims'
returnString = returnString .. '\n|-'
for rowID, row in pairs(NationData) do
if ((string.sub(rowID,1,4) == campaignYear) or (campaignYear == '2022' and string.sub(rowID,1,2) ~= '20')) and rowID ~= 'ALN' then
local initiallyOwned = {}
local initiallyClaimed = {}
local researchableClaims = {}
local claimList = ClaimData[1][rowID]
if claimList then
for i, regionID in ipairs(claimList) do
local regionString = ''
if RegionData[regionID] then
regionString = RegionNameBuilder.buildName({args={regionID, rowID}})
else
regionString = 'Error: Unknown Region: ' .. regionID
end
local projectID = ClaimData[3][rowID][regionID]['projectUnlockName'] or ''
local projectName = ProjectNameBuilder.buildName({args={projectID}})
if ClaimData[3][rowID][regionID]['initialOwner'] == 'true' then
tinsert(initiallyOwned, regionString)
elseif (projectID == '' or projectID == 'Project_AlienMasterProject') then
tinsert(initiallyClaimed, regionString)
elseif not researchableClaims[projectName] then
researchableClaims[projectName] = {regionString}
else
tinsert(researchableClaims[projectName], regionString)
end
end
end
local unionFlag = ''
if row['unionFlagResource'] and row['unionFlagResource'] ~= '' then
unionFlag = IconModule.Icon({args={ssub(rowID,-3) .. 'U',size='25px'}})
end
returnString = returnString .. '\n|' .. IconModule.Icon({args={ssub(rowID,-3),size='25px'}}) .. '[[' .. ssub(rowID,-3) .. '|' .. (NationNames['TINationTemplate.displayName.' .. ssub(rowID,-3)] or rowID) .. ']]<br>' .. unionFlag .. (NationNames['TINationTemplate.unionDisplayName.' .. ssub(rowID,-3)] or '')
returnString = returnString .. '\n| ' .. tconcat(initiallyOwned,' ● ')
returnString = returnString .. '\n| ' .. tconcat(initiallyClaimed,' ● ')
returnString = returnString .. '\n| '
local subtableMade = false
for p, c in pairs(researchableClaims) do
if not subtableMade then
returnString = returnString .. '\n {| class="wikitable" style="text-align: center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Project'
returnString = returnString .. '\n! Claims'
returnString = returnString .. '\n|-'
subtableMade = true
end
returnString = returnString .. '\n|' .. p
returnString = returnString .. '\n|' .. tconcat(c,' ● ')
returnString = returnString .. '\n|-'
end
if subtableMade then
returnString = returnString .. '\n|}'
end
returnString = returnString .. '\n|-'
end
end
returnString = returnString .. '\n|}'
return returnString
end
---@param campaignYear The start year of the campaign to show regions for. Defaults to 2022 if not specified
---@return table
function ClaimLister.ListRegions(campaignYear)
if not campaignYear then
campaignYear = '2022'
end
local returnString = '{| class="wikitable sortable mw-collapsible" style="text-align: center;"'
returnString = returnString .. '\n|-'
returnString = returnString .. '\n! Region'
returnString = returnString .. '\n! Claim Type'
returnString = returnString .. '\n! Nation'
returnString = returnString .. '\n! Hostile?'
returnString = returnString .. '\n|-'
for rowID, row in pairs(RegionData) do
if ((string.sub(rowID,1,4) == campaignYear) or (campaignYear == '2022' and string.sub(rowID,1,2) ~= '20')) then
local claimString = ''
local claimCount = 0
local claimList = ClaimData[2][rowID]
if claimList then
for i, nationID in ipairs(claimList) do
local nationString = ''
if NationData[nationID] and nationID ~= 'ALN' then
claimCount = claimCount + 1
nationString = NationNames['TINationTemplate.displayName.' .. nationID] or NationNames['TINationTemplate.displayName.' .. ssub(nationID,6)] or nationID
nationString = '[[' .. ssub(nationID,-3) .. '|' .. nationString .. ']]'
if ClaimData[3][nationID][rowID]['capitalClaim'] == 'true' then
nationString = nationString .. IconModule.Icon({args={'capital', bgcolor='DarkSlateGray'}})
end
if ClaimData[3][nationID][rowID]['initialColony'] == 'true' then
nationString = nationString .. IconModule.Icon({args={'colony', bgcolor='DarkSlateGray'}})
end
local projectID = ClaimData[3][nationID][rowID]['projectUnlockName'] or ''
local projectName = ProjectNameBuilder.buildName({args={projectID}})
if ClaimData[3][nationID][rowID]['initialOwner'] == 'true' then
claimString = claimString .. '\n| Initial Owner'
elseif (projectID == '' or projectID == 'Project_AlienMasterProject') then
claimString = claimString .. '\n| Initial Claim'
else
claimString = claimString .. '\n|' .. projectName
end
claimString = claimString .. '\n|' .. nationString
claimString = claimString .. '\n| '
if ClaimData[3][nationID][rowID]['hostileClaim'] == 'true' then
claimString = claimString .. 'style="color:red;" | Yes'
end
claimString = claimString .. '\n|-'
end
end
end
if claimCount == 0 then
claimCount = 1
claimString = '\n|Strangely, no nation claims this region!\n|-'
end
returnString = returnString .. '\n| rowspan = ' .. tostring(claimCount) .. ' | ' .. RegionNameBuilder.buildName({args={rowID}})
returnString = returnString .. claimString
end
end
returnString = returnString .. '\n|}'
return returnString
end
--endregion
return ClaimLister


