Module:EffectLister/DescriptionBuilder
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:EffectLister/DescriptionBuilder/doc
-- This module builds a full description for an effect
-- Other modules should use this to describe effects consistently.
local p = {}
local IconModule = require('Module:Icon')
local EffectData = mw.loadData('Module:CSVReader/Effect')
local TraitData = mw.loadData('Module:CSVReader/Trait')
local EffectNames = mw.loadData('Module:ENReader/Effect')
local NarrativeEventNames = mw.loadData('Module:ENReader/NarrativeEvent')
local TraitNames = mw.loadData('Module:ENReader/Trait')
local RegionNames = mw.loadData('Module:ENReader/Region')
local MapRegionToRegion = mw.loadData('Module:RegionLister/MapRegions')
local sfind = string.find
local ssub = string.sub
local tinsert = table.insert
local tconcat = table.concat
-- Replaces ONE instance of the stringToReplace with replacementString in the fullString
local sreplace = function(fullString, stringToReplace, replacementString)
local si, ei = sfind(fullString, stringToReplace, 1, true)
if not si then
return fullString
end
local prefix = ssub(fullString,1,si - 1)
local suffix = ssub(fullString,ei+1)
return prefix .. replacementString .. suffix
end
function p.buildDescription( frame )
-- Read parameters
--- [1] is Effect data name (mandatory)
---
local effectID = frame.args[1]
if not effectID or not EffectData[effectID] then
return 'No such Effect'
end
local effectString = EffectNames['TIEffectTemplate.description.' .. effectID] or 'ERROR: No Description'
if ssub(effectString,1,1) == '-' then
effectString = ssub(effectString, 2)
end
local evalue = {}
evalue[0] = EffectData[effectID]['value'] or 0
evalue[1] = frame.args['primaryDisplay'] or 'Primary Target'
evalue[2] = frame.args['secondaryDisplay'] or 'Secondary Target'
evalue[3] = tostring((tonumber(EffectData[effectID]['value'] or 0) or 0) * 100) .. '%'
evalue[4] = tostring(100 - (tonumber(EffectData[effectID]['value'] or 0) or 0) * 100) .. '%'
evalue[5] = frame.args['inPrimaryNationDisplay'] or "in Primary Target's Nation"
evalue[6] = frame.args['inSecondaryNationDisplay'] or "in Secondary Target's Nation"
evalue[7] = EffectData[effectID]['duration_months'] or 0
evalue[8] = tostring((tonumber(EffectData[effectID]['value'] or 0) or 0) * 100 - 100) .. '%'
evalue[9] = frame.args['primaryNationDisplay'] or "Primary Target's Nation"
evalue[10] = frame.args['primaryRegionDisplay'] or "Primary Target's Region"
evalue[11] = frame.args['secondaryNationDisplay'] or "Secondary Target's Nation"
evalue[12] = frame.args['secondaryRegionDisplay'] or "Secondary Target's Region"
evalue[13] = EffectData[effectID]['strValue'] or 'ERROR'
if MapRegionToRegion[evalue[13]] then
evalue[13] = (RegionNames['TIRegionTemplate.displayName.' .. MapRegionToRegion[evalue[13]]] or 'Error: Region Not Found')
end
evalue[13] = NarrativeEventNames['TINarrativeEventTemplate.displayName.' .. evalue[13]] or evalue[13]
evalue[13] = TraitNames['TITraitTemplate.displayName.' .. evalue[13]] or evalue[13]
evalue[14] = frame.args['primaryFactionDisplay'] or "Primary Target's Faction"
evalue[15] = frame.args['secondaryFactionDisplay'] or "Secondary Target's Faction"
local traitList = {}
for rowID, row in pairs(TraitData) do
if row['grouping'] == evalue[0] then
tinsert(traitList,TraitNames['TITraitTemplate.displayName.' .. rowID] or rowID)
end
end
evalue[16] = tconcat(traitList, ', ')
evalue[17] = 'Trait from Group ' .. evalue[0]
evalue[18] = tostring(100 / (tonumber(EffectData[effectID]['value'] or 1) or 1) - 100) .. '%'
evalue[19] = (tonumber(EffectData[effectID]['value'] or 0) or 0) * -1
evalue[20] = EffectData[effectID]['strValue'] or 'ERROR' -- Councilor Attribute
evalue[21] = evalue[14]
evalue[22] = evalue[15]
evalue[23] = evalue[0] .. ' (Pop Scaled)' -- By Primary Nation
evalue[24] = evalue[0] .. ' (Pop Scaled)' -- By Secondary Nation
evalue[25] = sreplace(tostring((tonumber(EffectData[effectID]['value'] or 0) or 0) * 100) .. '%', '-', '') -- Absolute value as %
evalue[26] = 'Executive Nations for Primary Target'
for i = 0, 26 do
effectString = sreplace(effectString, '{' .. i .. '}', evalue[i])
effectString = sreplace(effectString, '{' .. i .. '}', evalue[i])
end
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="water"></color>', IconModule.Icon({args={'water'}}))
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="volatiles"></color>', IconModule.Icon({args={'volatiles'}}))
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="metal"></color>', IconModule.Icon({args={'metals'}}))
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="metal_noble"></color>', IconModule.Icon({args={'nobles'}}))
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="radioactive"></color>', IconModule.Icon({args={'fissiles'}}))
effectString = sreplace(effectString, '<color=#FFFFFFFF><sprite name="mission_control"></color>', IconModule.Icon({args={'mc'}}))
return effectString
end
return p


