mNo edit summary |
mNo edit summary |
||
(52 intermediate revisions by 4 users not shown) | |||
Line 3: | Line 3: | ||
local mathOps = require("Module:MathOps") |
local mathOps = require("Module:MathOps") |
||
local utils = require("Module:Utils") |
local utils = require("Module:Utils") |
||
+ | local prkz = require("Module:Datatable/Perks") |
||
+ | local perkImg = require("Module:PerkImage") |
||
+ | local str = require("Module:Strings") |
||
local frame = mw.getCurrentFrame() |
local frame = mw.getCurrentFrame() |
||
+ | |||
− | local bar = "|" -- code for | |
||
+ | |||
⚫ | |||
+ | strings = { |
||
+ | the = "The", |
||
+ | altName = "Alt. Name", |
||
+ | gender = "Gender", |
||
+ | role = "Role", |
||
+ | nationality = "Nationality", |
||
+ | dlc = "DLC", |
||
+ | actor = "Voice Actor", |
||
+ | uknownActor = "Undisclosed Voice Actor", --unkown/undisclosed |
||
+ | male = "Male", |
||
+ | female = "Female", |
||
+ | undefined = "Undefined", |
||
+ | } |
||
function p.getCountOfSurvivors() |
function p.getCountOfSurvivors() |
||
Line 11: | Line 27: | ||
end |
end |
||
− | function |
+ | function getSurvivorNameById(id) --not used |
− | for |
+ | for _, s in ipairs(survivors) do |
− | if s.id == id then return |
+ | if s.id == id then return s.name end |
end |
end |
||
return 0 |
return 0 |
||
end |
end |
||
− | function |
+ | function getSurvivorIdByName(name) |
⚫ | |||
⚫ | |||
⚫ | |||
− | while survivors[i] do |
||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
− | i = i + 1 |
||
end |
end |
||
⚫ | |||
return 0 |
return 0 |
||
end |
end |
||
+ | |||
+ | function getSurvivorById(id) |
||
+ | for _, survivor in ipairs(survivors) do |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
+ | |||
+ | function p.resolveSurvivorCharTable() |
||
+ | local survivorId = getSurvivorIdByName(mw.title.getCurrentTitle().text) |
||
+ | local surv = utils.getCharacterById(survivorId, survivors) |
||
⚫ | |||
⚫ | |||
+ | if type(surv) ~= "table" then return surv end |
||
⚫ | |||
+ | result = |
||
+ | '{| class = "infoboxtable"' .. nl .. |
||
+ | ntl ..' class = "infoboxTitle" | ' .. nl .. |
||
+ | '! class = "center bold" colspan = 2 | ' .. (surv.shortName or surv.name) .. nl .. |
||
+ | ntl .. nl .. |
||
+ | '! class = "center" colspan = 2 | [[' .. cstr.file .. resolveSurvPortraitImageFileName(surv) .. '.png|150px]]' .. nl .. |
||
+ | ntl .. nl |
||
⚫ | |||
+ | result = result .. '| class = "titleColumn" | ' .. strings.altName .. ' || class = "valueColumn" | ' .. surv.altName .. nl .. ntl .. nl |
||
⚫ | |||
+ | result = result .. |
||
+ | '| class = "titleColumn" | ' .. strings.gender .. ' || class = "valueColumn" | ' .. utils.resolveGender(surv.gender) .. nl .. |
||
+ | ntl .. nl .. |
||
+ | '| class = "titleColumn" | ' .. strings.role .. ' || class = "valueColumn" | ' .. surv.role .. nl .. |
||
+ | ntl .. nl .. |
||
+ | '| class = "titleColumn" | ' .. strings.nationality .. ' || class = "valueColumn" | ' .. surv.nationality .. nl .. |
||
+ | ntl .. nl |
||
⚫ | |||
+ | result = result .. '| class = "titleColumn" | ' .. strings.dlc .. ' || class = "valueColumn" | [[' .. getDlcById(surv.dlc).name .. ']] ' .. nl .. ntl .. nl |
||
+ | end |
||
+ | result = result .. |
||
+ | '| class = "titleColumn" | ' .. strings.actor .. ' || class = "valueColumn" | ' .. (surv.actor or strings.uknownActor) .. nl .. |
||
+ | '|}' |
||
+ | |||
+ | |||
+ | mw.log(result) |
||
+ | return result |
||
+ | |||
+ | end |
||
+ | |||
function p.resolveSurvivorsTable() |
function p.resolveSurvivorsTable() |
||
Line 35: | Line 95: | ||
result = result .. "<div style=\"color: #fff;\">" |
result = result .. "<div style=\"color: #fff;\">" |
||
⚫ | |||
for i, survivor in ipairs(survivors) do |
for i, survivor in ipairs(survivors) do |
||
Line 41: | Line 100: | ||
result = result .. "<div style=\"display: inline-block; text-align:center; margin: 10px\">[[" .. survivor.name .. "]]" |
result = result .. "<div style=\"display: inline-block; text-align:center; margin: 10px\">[[" .. survivor.name .. "]]" |
||
− | result = result .. "[[ |
+ | result = result .. "[[" .. cstr.file .. fileName .. ".png|center|frameless|link=" .. survivor.name .. "]]</div>" |
end |
end |
||
− | |||
result = result .. "</div>" |
result = result .. "</div>" |
||
return result |
return result |
||
end |
end |
||
+ | |||
+ | function p.resolveSurvivorsTableMainPage() |
||
+ | local result = "" |
||
⚫ | |||
+ | local fileName |
||
+ | |||
+ | result = result .. |
||
+ | '<div class = "fpbox" id = "fpsurvivors" style = "text-align: center;">' .. |
||
+ | '<div class = "heading">' .. strings.the .. space .. '[[Survivors]] [[' .. cstr.file .. 'IconHelpLoading survivor.png|32px]]</div>' .. |
||
+ | '<div class = "fplinks charSection">' |
||
+ | for i, survivor in ipairs(survivors) do |
||
+ | name = survivor.shortName or survivor.name |
||
+ | fileName = resolveSurvivorsPortraitFileNameById(survivor.id) |
||
+ | |||
+ | result = result .. |
||
+ | '<div class = "fplink charMainPageBox plainlinks image"><div class = "box"><div class = "row"><div class = "cell">' .. |
||
+ | '<div class = "image">[[' .. cstr.file .. fileName .. '.png|link=' .. name .. ']]</div>' .. |
||
+ | '<div class = "charLink survivorLink link">[[' .. name .. ']]</div>' .. |
||
+ | '<div class = "charPerkBox">' .. resolveCharPerksMainPage(survivor) .. '</div>' .. |
||
+ | '</div></div></div></div>' |
||
+ | end |
||
+ | result = result .. |
||
+ | '</div>' .. |
||
+ | '</div>' |
||
+ | |||
+ | return result |
||
+ | end |
||
+ | |||
+ | function resolveCharPerksMainPage(character) |
||
+ | local mPerks = require("Module:Perks") |
||
+ | local result = '' |
||
+ | local perkList = mPerks.getPerksByCharacter(character) |
||
+ | for _, perk in ipairs(perkList) do |
||
+ | result = result .. '[[' .. cstr.file .. mPerks.getTeachablePerkIcon(perk) .. '|link=' .. perk.name .. '|42px]]' |
||
+ | end |
||
+ | |||
+ | return result |
||
+ | end |
||
+ | |||
+ | function resolveSurvPortraitImageFileName(surv) |
||
+ | local fileConst = "_charSelect_portrait" |
||
+ | return "S" .. string.format("%02d", surv.id) .. fileConst |
||
+ | end |
||
+ | |||
function resolveSurvivorsPortraitFileNameById(id) |
function resolveSurvivorsPortraitFileNameById(id) |
||
− | i = getSurvivorIndexById(id) |
||
local fileConst = "_charPreview_portrait" |
local fileConst = "_charPreview_portrait" |
||
local fileName |
local fileName |
||
fileName = getFileNameFromTableById(id) |
fileName = getFileNameFromTableById(id) |
||
− | if isValidFileName(fileName |
+ | if not utils.isValidFileName(fileName) then --S{ID}_charPreview_portrait |
− | fileName = |
+ | fileName = "S" .. string.format("%02d", id) .. fileConst |
end |
end |
||
− | if isValidFileName(fileName |
+ | if not utils.isValidFileName(fileName) then --File not Found |
⚫ | |||
− | mw.log("File not found. Looking further...") |
||
− | fileName = getSurvivorsInitialsByIndex(i) |
||
⚫ | |||
− | if isValidFileName(fileName .. fileConst) then --File not Found |
||
⚫ | |||
end |
end |
||
− | fileName = fileName .. fileConst |
||
mw.log(fileName) |
mw.log(fileName) |
||
return fileName |
return fileName |
||
⚫ | |||
− | |||
− | function isValidFileName(name) |
||
− | return name == "" or not mw.title.new("File:" .. name .. ".png").exists |
||
end |
end |
||
function getFileNameFromTableById(id) |
function getFileNameFromTableById(id) |
||
+ | mw.log(id) |
||
for j, sImage in ipairs(survivorImages) do |
for j, sImage in ipairs(survivorImages) do |
||
if sImage.id == id then |
if sImage.id == id then |
||
Line 85: | Line 178: | ||
end |
end |
||
− | function |
+ | function getDlcById(id) |
+ | for _, dlc in ipairs(dlcs) do |
||
⚫ | |||
− | return |
+ | if dlc.id == id then return dlc end |
end |
end |
||
− | local s = survivors |
||
− | local initials = getSurvivorsInitialsByIndex(i) |
||
⚫ | |||
⚫ | |||
− | dlcCodeName = getDlcById(s[i].dlc).codeName |
||
⚫ | |||
− | |||
− | local dlcInitial = dlcCodeName:match("^(%S).+$") or "A" --A is for characters from original game as they don't have any DLC code Name nor DLC id |
||
− | |||
− | mw.log(dlcInitial .. initials .. "S") |
||
− | return dlcInitial .. initials .. "S" |
||
end |
end |
||
− | function |
+ | function getSurvivorListWithPerks() |
+ | local perkTable = {} |
||
− | if survivors[i] == nil then |
||
+ | for _,perk in ipairs(perks) do |
||
⚫ | |||
+ | if perk.character ~= nil and perk.charType == 'S' then |
||
+ | if perkTable[perk.character] == nil then |
||
+ | perkTable[perk.character] = {} |
||
+ | end |
||
+ | perkTable[perk.character].id = perk.character |
||
+ | perkTable[perk.character][#perkTable[perk.character]+1] = perk |
||
+ | end |
||
end |
end |
||
+ | return perkTable |
||
− | local firstLetter, lastLetter |
||
⚫ | |||
− | firstLetter, lastLetter = survivors[i].name:match("^(%S).+ (%S).-$") |
||
⚫ | |||
− | return firstLetter .. lastLetter |
||
end |
end |
||
− | function |
+ | function p.resolveSurvivorsEntries() |
+ | local perkTable = getSurvivorListWithPerks() |
||
⚫ | |||
+ | local result = "" |
||
⚫ | |||
+ | |||
+ | result = result .. '<div style="display: flex; flex-flow: row wrap; justify-content:center;">' .. nl |
||
+ | |||
+ | for _, trio in ipairs(perkTable) do |
||
+ | result = result .. '<div class = "entryTable">' .. nl .. |
||
+ | '{| class = "wikitable"' .. nl |
||
+ | |||
+ | survivor = getSurvivorById(trio.id) |
||
+ | result = result .. '|+ ' .. survivor.name .. nl .. |
||
+ | ntl .. nl .. |
||
+ | '| rowspan = 3 | [[' .. cstr.file .. resolveSurvPortraitImageFileName(survivor) .. '.png|99px|link=' .. survivor.name .. ']]' .. nl |
||
+ | utils.sortPerksByLevel(trio) |
||
+ | for i, perk in ipairs(trio) do |
||
+ | result = result .. '! [[' .. cstr.file .. perkImg.main(perk.techName or perk.name) .. '|33px]]' .. nl .. |
||
+ | '! [[' .. perk.name .. ']]' .. nl .. |
||
+ | '| ' .. utils.clr(perk.level, 6) .. nl |
||
+ | if i < #trio then |
||
+ | result = result .. ntl .. nl |
||
+ | end |
||
+ | end |
||
+ | result = result .. '|}' .. nl .. |
||
+ | '</div>' .. nl |
||
end |
end |
||
+ | |||
+ | result = result .. '</div>' .. nl |
||
+ | |||
+ | mw.log(result) |
||
+ | --mw.log(mw.dumpObject(perkTable)) |
||
+ | return result |
||
end |
end |
||
Revision as of 01:23, 21 October 2021
local p = {}
local data = require("Module:Datatable")
local mathOps = require("Module:MathOps")
local utils = require("Module:Utils")
local prkz = require("Module:Datatable/Perks")
local perkImg = require("Module:PerkImage")
local str = require("Module:Strings")
local frame = mw.getCurrentFrame()
strings = {
the = "The",
altName = "Alt. Name",
gender = "Gender",
role = "Role",
nationality = "Nationality",
dlc = "DLC",
actor = "Voice Actor",
uknownActor = "Undisclosed Voice Actor", --unkown/undisclosed
male = "Male",
female = "Female",
undefined = "Undefined",
}
function p.getCountOfSurvivors()
return utils.getCount("survivor")
end
function getSurvivorNameById(id) --not used
for _, s in ipairs(survivors) do
if s.id == id then return s.name end
end
return 0
end
function getSurvivorIdByName(name)
for _, survivor in ipairs(survivors) do
if survivor.name == name then
return survivor.id
end
end
return 0
end
function getSurvivorById(id)
for _, survivor in ipairs(survivors) do
if survivor.id == id then return survivor end
end
return nil
end
function p.resolveSurvivorCharTable()
local survivorId = getSurvivorIdByName(mw.title.getCurrentTitle().text)
local surv = utils.getCharacterById(survivorId, survivors)
local result = ""
if type(surv) ~= "table" then return surv end
result =
'{| class = "infoboxtable"' .. nl ..
ntl ..' class = "infoboxTitle" | ' .. nl ..
'! class = "center bold" colspan = 2 | ' .. (surv.shortName or surv.name) .. nl ..
ntl .. nl ..
'! class = "center" colspan = 2 | [[' .. cstr.file .. resolveSurvPortraitImageFileName(surv) .. '.png|150px]]' .. nl ..
ntl .. nl
if surv.altName ~= nil then
result = result .. '| class = "titleColumn" | ' .. strings.altName .. ' || class = "valueColumn" | ' .. surv.altName .. nl .. ntl .. nl
end
result = result ..
'| class = "titleColumn" | ' .. strings.gender .. ' || class = "valueColumn" | ' .. utils.resolveGender(surv.gender) .. nl ..
ntl .. nl ..
'| class = "titleColumn" | ' .. strings.role .. ' || class = "valueColumn" | ' .. surv.role .. nl ..
ntl .. nl ..
'| class = "titleColumn" | ' .. strings.nationality .. ' || class = "valueColumn" | ' .. surv.nationality .. nl ..
ntl .. nl
if surv.dlc ~= nil then
result = result .. '| class = "titleColumn" | ' .. strings.dlc .. ' || class = "valueColumn" | [[' .. getDlcById(surv.dlc).name .. ']] ' .. nl .. ntl .. nl
end
result = result ..
'| class = "titleColumn" | ' .. strings.actor .. ' || class = "valueColumn" | ' .. (surv.actor or strings.uknownActor) .. nl ..
'|}'
mw.log(result)
return result
end
function p.resolveSurvivorsTable()
local result = ""
local name
local fileName
result = result .. "<div style=\"color: #fff;\">"
for i, survivor in ipairs(survivors) do
fileName = resolveSurvivorsPortraitFileNameById(survivor.id)
result = result .. "<div style=\"display: inline-block; text-align:center; margin: 10px\">[[" .. survivor.name .. "]]"
result = result .. "[[" .. cstr.file .. fileName .. ".png|center|frameless|link=" .. survivor.name .. "]]</div>"
end
result = result .. "</div>"
return result
end
function p.resolveSurvivorsTableMainPage()
local result = ""
local name
local fileName
result = result ..
'<div class = "fpbox" id = "fpsurvivors" style = "text-align: center;">' ..
'<div class = "heading">' .. strings.the .. space .. '[[Survivors]] [[' .. cstr.file .. 'IconHelpLoading survivor.png|32px]]</div>' ..
'<div class = "fplinks charSection">'
for i, survivor in ipairs(survivors) do
name = survivor.shortName or survivor.name
fileName = resolveSurvivorsPortraitFileNameById(survivor.id)
result = result ..
'<div class = "fplink charMainPageBox plainlinks image"><div class = "box"><div class = "row"><div class = "cell">' ..
'<div class = "image">[[' .. cstr.file .. fileName .. '.png|link=' .. name .. ']]</div>' ..
'<div class = "charLink survivorLink link">[[' .. name .. ']]</div>' ..
'<div class = "charPerkBox">' .. resolveCharPerksMainPage(survivor) .. '</div>' ..
'</div></div></div></div>'
end
result = result ..
'</div>' ..
'</div>'
return result
end
function resolveCharPerksMainPage(character)
local mPerks = require("Module:Perks")
local result = ''
local perkList = mPerks.getPerksByCharacter(character)
for _, perk in ipairs(perkList) do
result = result .. '[[' .. cstr.file .. mPerks.getTeachablePerkIcon(perk) .. '|link=' .. perk.name .. '|42px]]'
end
return result
end
function resolveSurvPortraitImageFileName(surv)
local fileConst = "_charSelect_portrait"
return "S" .. string.format("%02d", surv.id) .. fileConst
end
function resolveSurvivorsPortraitFileNameById(id)
local fileConst = "_charPreview_portrait"
local fileName
fileName = getFileNameFromTableById(id)
if not utils.isValidFileName(fileName) then --S{ID}_charPreview_portrait
fileName = "S" .. string.format("%02d", id) .. fileConst
end
if not utils.isValidFileName(fileName) then --File not Found
fileName = "UnknownSurvivor" .. fileConst
end
mw.log(fileName)
return fileName
end
function getFileNameFromTableById(id)
mw.log(id)
for j, sImage in ipairs(survivorImages) do
if sImage.id == id then
return sImage.preview
end
end
return ""
end
function getDlcById(id)
for _, dlc in ipairs(dlcs) do
if dlc.id == id then return dlc end
end
end
function getSurvivorListWithPerks()
local perkTable = {}
for _,perk in ipairs(perks) do
if perk.character ~= nil and perk.charType == 'S' then
if perkTable[perk.character] == nil then
perkTable[perk.character] = {}
end
perkTable[perk.character].id = perk.character
perkTable[perk.character][#perkTable[perk.character]+1] = perk
end
end
return perkTable
end
function p.resolveSurvivorsEntries()
local perkTable = getSurvivorListWithPerks()
local result = ""
result = result .. '<div style="display: flex; flex-flow: row wrap; justify-content:center;">' .. nl
for _, trio in ipairs(perkTable) do
result = result .. '<div class = "entryTable">' .. nl ..
'{| class = "wikitable"' .. nl
survivor = getSurvivorById(trio.id)
result = result .. '|+ ' .. survivor.name .. nl ..
ntl .. nl ..
'| rowspan = 3 | [[' .. cstr.file .. resolveSurvPortraitImageFileName(survivor) .. '.png|99px|link=' .. survivor.name .. ']]' .. nl
utils.sortPerksByLevel(trio)
for i, perk in ipairs(trio) do
result = result .. '! [[' .. cstr.file .. perkImg.main(perk.techName or perk.name) .. '|33px]]' .. nl ..
'! [[' .. perk.name .. ']]' .. nl ..
'| ' .. utils.clr(perk.level, 6) .. nl
if i < #trio then
result = result .. ntl .. nl
end
end
result = result .. '|}' .. nl ..
'</div>' .. nl
end
result = result .. '</div>' .. nl
mw.log(result)
--mw.log(mw.dumpObject(perkTable))
return result
end
return p