Module:MissionLister/Modifier
From Terra Invicta Official Wiki
Documentation for this module may be created at Module:MissionLister/Modifier/doc
---
---Reads the data subpage and presents it as a row of a wiki table.
---Table format is Name, Condition(s), Value
---
---Note these modifier descriptions are HANDWRITTEN. There is no convenient JSON or EN file to refer to.
---
---@module ModifierLister
local ModifierLister = {}
--region Dependencies
--local IconModule = require('Module:Icon')
local TVModule = require('Module:TV')
local ModifierData = mw.loadData('Module:MissionLister/Modifier/data')
local MissionData = mw.loadData('Module:CSVReader/Mission')
local StringReplaceModule = require('Module:StringReplace')
local sreplace = StringReplaceModule.replace
local slen = string.len
local sfind = string.find
local ssub = string.sub
--endregion
--region Private constants
--endregion
--region Private member variables
--none
--endregion
--region Private methods
--endregion
--region Public methods
---#param frame, which contains:
---- args[1]: The data name of the modifier.
---- args[2] and args[3]: Any additional values the modifier has.
---@return wiki row for the Modifier
function ModifierLister.ListModifier(frame)
local modifierDataName = frame.args[1]
local modifierValueA = frame.args[2]
local modifierValueB = frame.args[3]
if not modifierDataName then
return 'ERROR: No modifier name specified for [[Module:MissionLister/Modifier|Modifier Lister Module]]'
end
modifierDataName = mw.text.trim(modifierDataName)
if not ModifierData[modifierDataName] then
return 'ERROR: Unknown modifier type ' .. modifierDataName .. ' for [[Module:MissionLister/Modifier|Modifier Lister Module]]'
end
local returnString = '\n|-\n' .. ModifierData[modifierDataName] .. '\n|-'
if modifierValueA and modifierValueA ~= '' then
returnString = sreplace(returnString, '{A}', modifierValueA)
end
if modifierValueB and modifierValueB ~= '' then
returnString = sreplace(returnString, '{B}', modifierValueB)
end
return returnString
end
---@return wiki rows for all Modifiers
function ModifierLister.ListAllModifiers()
local returnString = ''
for rowID, row in pairs(ModifierData) do
returnString = returnString .. '\n|-'
returnString = returnString .. '\n' .. row
end
return returnString
end
---#param frame, which contains:
---- args[1]: The data name of the mission to show modifiers for.
---- args[2]: Whether to show attack or defense modifiers. true = Attack
---@return wiki rows for all attack or defense modifiers for one mission
function ModifierLister.ListModifiersForMission(frame)
local missionDataName = frame.args[1]
local showAttack = frame.args[2]
if not missionDataName or missionDataName == '' then
return "No Mission Specified"
end
missionDataName = mw.text.trim(missionDataName)
if not MissionData[missionDataName] then
return "ERROR: Unknown Mission Data Name " .. missionDataName
end
local returnString = ''
local entryprefix = nil
if showAttack == 'true' then
entryprefix = 'resolutionMethod/attackingModifiers/'
else
entryprefix = 'resolutionMethod/defendingModifiers/'
end
for i = 0, 15 do
local modifierDataName = MissionData[missionDataName][entryprefix .. i .. '/$type']
if not modifierDataName or modifierDataName == '' then
-- No more modifiers, so break.
break
end
local modifierValueA = nil
if showAttack == 'true' then
modifierValueA = MissionData[missionDataName][entryprefix .. i .. '/attackerAttribute']
else
modifierValueA = MissionData[missionDataName][entryprefix .. i .. '/defenderAttribute']
end
if not modifierValueA or modifierValueA == '' then
modifierValueA = MissionData[missionDataName][entryprefix .. i .. '/flatModifier']
else
modifierValueA = TVModule.TV({args={modifierValueA}})
end
returnString = returnString .. ModifierLister.ListModifier({args={modifierDataName,modifierValueA}})
end
return returnString
end
--endregion
return ModifierLister


