Dead by Daylight Wiki
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 |
 
  +
local nl = "\n"
 
  +
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 getSurvivorIndexById(id)
+
function getSurvivorNameById(id) --not used
for i, s in ipairs(survivors) do
+
for _, s in ipairs(survivors) do
if s.id == id then return i end
+
if s.id == id then return s.name end
 
end
 
end
 
return 0
 
return 0
 
end
 
end
   
function getSurvivorIndexByName(name) --not used
+
function getSurvivorIdByName(name)
 
for _, survivor in ipairs(survivors) do
local i = 1
 
 
if survivor.name == name then
while survivors[i] do
 
 
return survivor.id
if survivors[i].name == name then
 
return i
 
 
end
 
end
i = i + 1
 
 
end
 
end
 
 
return 0
 
return 0
 
end
 
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()
 
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 .. "[[File:" .. fileName .. ".png|center|frameless|link=" .. survivor.name .. "]]</div>"
+
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 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)
 
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 .. fileConst) then --looking for new convention fileName
+
if not utils.isValidFileName(fileName) then --S{ID}_charPreview_portrait
fileName = resolveNewInitialsByIndex(i)
+
fileName = "S" .. string.format("%02d", id) .. fileConst
 
end
 
end
if isValidFileName(fileName .. fileConst) then --looking for old convention fileName
+
if not utils.isValidFileName(fileName) then --File not Found
 
fileName = "UnknownSurvivor" .. fileConst
mw.log("File not found. Looking further...")
 
fileName = getSurvivorsInitialsByIndex(i)
 
end
 
if isValidFileName(fileName .. fileConst) then --File not Found
 
fileName = "UnknownSurvivor"
 
 
end
 
end
 
 
fileName = fileName .. fileConst
 
 
mw.log(fileName)
 
mw.log(fileName)
 
return fileName
 
return fileName
end
 
 
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 resolveNewInitialsByIndex(i)
+
function getDlcById(id)
  +
for _, dlc in ipairs(dlcs) do
if survivors[i] == nil then
 
return ""
+
if dlc.id == id then return dlc end
 
end
 
end
local s = survivors
 
local initials = getSurvivorsInitialsByIndex(i)
 
local dlcCodeName =""
 
if s[i].dlc ~= nil then
 
dlcCodeName = getDlcById(s[i].dlc).codeName
 
end
 
 
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 getSurvivorsInitialsByIndex(i)
+
function getSurvivorListWithPerks()
  +
local perkTable = {}
if survivors[i] == nil then
 
  +
for _,perk in ipairs(perks) do
return ""
 
  +
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 getDlcById(id)
+
function p.resolveSurvivorsEntries()
  +
local perkTable = getSurvivorListWithPerks()
for _, dlc in ipairs(dlcs) do
 
  +
local result = ""
if dlc.id == id then return dlc end
 
  +
  +
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