Dead by Daylight Wiki
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

local p = {}
local utils = require("Module:Utils")
local data = require("Module:Datatable" .. utils.lang())
local perksData = mw.loadData("Module:Datatable/Loadout" .. utils.lang())
local perkImg = require("Module:PerkImage")
local str = require("Module:Strings")
local frame = mw.getCurrentFrame()

p.strings = {
	survNotFound = "Survivor not found",
	altName = "Other Name(s)",
	gender = "Gender",
	role = "Role",
	origin = "Origin",
	dlc  = "DLC",
	actor = "Voice Actor",
	unknownActor = "Undisclosed Voice Actor", --unkown/undisclosed
	male = "Male",
	female = "Female",
	transmale = "Trans Male",
	transfemale = "Trans Female",
	undefined = "Undefined",
	survivors = "Survivors",
	menuMusic = "Menu Music",
	cost = "Cost",
	freeCost = "Free", --this string needs to be same as the string at DLCs that are free
	metadata = "Metadata",
	
	--Metadata
	charid = "CharID",
	themeFilename = "Theme Filename"
}
local strings = p.strings
if utils.lang() ~= cstr.empty and (counter or 0) < 1 then
	counter = (counter or 0) + 1
	strings = require("Module:Survivors" .. utils.lang()).strings
end

local perks = perksData.perks

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 p.getSurvivorById(id)
	for _, survivor in ipairs(survivors) do
		if survivor.id == id then return survivor end
	end
	return nil
end

function p.resolveSurvivorCharTable(charName)
	local dlcs = require("Module:DLCs")
	local various = require("Module:Various")
	charName = utils.resolveParameter(charName, 1, false)
	local survivorId = getSurvivorIdByName(charName)

	local surv = utils.getCharacterById(survivorId, survivors)
	if not surv then return strings.survNotFound end
	local result = cstr.empty
	
	surv.dlcList = dlcs.getDlcsByCharacter(surv)
	surv.dlc = dlcs.getMainDlc(surv.dlcList) --Main DLC
	surv.isPriceHalved = dlcs.isPriceHalved(surv.dlcList)
	
	if type(surv) ~= types.table then return utils.resolveParameter(charName) end
	
	result = 
		'{| class = "infoboxtable charInfoboxTable survivorInfobox"' .. nl ..
		ntl ..' class = "infoboxTitle" | ' .. nl ..
		'! class = "center bold" colspan = 2 | ' .. (surv.shortName or surv.name) .. nl ..
		ntl .. nl ..
		'! class = "center charInfoboxImage" colspan = 2 | ' .. file(resolveSurvPortraitImageFileName(surv) .. '.png', '270px') .. nl ..
		ntl .. nl
		
	if surv.altName ~= nil then
		result = result .. tl .. class('titleColumn') .. tl .. strings.altName .. dtl .. class('valueColumn') .. tl .. surv.altName .. nl .. ntl .. nl
	end
	result = result ..
		tl .. class('titleColumn') .. tl .. strings.gender .. dtl .. class('valueColumn') .. tl .. surv.gender .. nl ..
		ntl .. nl ..
		((surv.role and tl .. class('titleColumn') .. tl .. strings.role .. dtl .. class('valueColumn') .. tl .. surv.role .. nl ..
		ntl .. nl) or cstr.empty) ..
		tl .. class('titleColumn') .. tl .. strings.origin .. dtl .. class('valueColumn') .. tl .. surv.origin .. nl ..
		ntl .. nl
	if surv.dlc ~= nil then
		result = result .. tl .. class('titleColumn') .. tl .. strings.dlc .. dtl .. class('valueColumn') .. tl .. dlcs.getDlcFullNameByCharacter(surv) .. nl .. ntl .. nl
	end
	result = result ..
		tl .. class('titleColumn') .. tl .. strings.actor .. dtl .. class('valueColumn') .. tl .. (surv.actor or strings.uknownActor) .. nl
	if surv.dlc and 
		(
			(not surv.dlc.retracted and (surv.dlc.cost == nil or type(surv.dlc.cost) == types.table or (type(surv.dlc.cost) == types.string and surv.dlc.cost ~= strings.freeCost)))
		or	(surv.dlc.retracted and surv.isPriceHalved)
		)
		then
			
		local ac = utils.getCcyById(5) --we retrieve the ac and is currency (mainly due to other non-en wikis)
		local is = utils.getCcyById(3)
		result = result .. ntl .. nl .. 
			tl .. class('titleColumn') .. tl .. strings.cost .. dtl .. class('valueColumn') .. tl .. 
			((not surv.dlc.licensed and utils.commaFormat((surv.isPriceHalved and data.charISCost / 2) or data.charISCost) .. space .. utils.IconLink(is.plural or is.name .. "s") .. nl) or cstr.empty) ..
			utils.commaFormat((surv.isPriceHalved and data.charACCost / 2) or data.charACCost) .. space .. utils.IconLink(ac.plural or ac.name .. "s") .. nl
	end
	local theme, themeSuccess = various.resolveCharacterThemeMusic(surv, true)
	if themeSuccess then
		result = result .. ntl .. nl ..
		tl .. class("titleColumn", "center") .. colspan(2) .. tl .. space .. strings.menuMusic .. nl .. ntl .. nl ..
		tl .. class("valueColumn", "center", "soundColumn") .. colspan(2) .. tl .. space .. theme .. nl
	end
	
	--Metadata
	local metadataNewLine = ntl .. class("metadata") .. nl .. tl .. class("titleColumn") .. tl
	result = result ..
		ntl .. nl ..
		tl .. colspan(2) .. space .. class("metadata") .. tl .. center(b(strings.metadata)) .. nl ..
		metadataNewLine .. strings.charid .. dtl .. utils.getCharacterIdentifier(surv) .. nl ..
		(surv.theme ~= false and (not themeSuccess and various.shouldHaveTheme(surv) and metadataNewLine .. strings.themeFilename .. dtl .. theme .. nl) or cstr.empty)
	
	result = result .. 
		'|}'
		
	--mw.log(result)
	return result
end

function p.resolveSurvivorsTable()
	local result = cstr.empty
	local name
	local fileName

	result = result .. '<div style = "color: #fff;">'
	maxId = utils.getMaxId(survivors)
	for i, survivor in ipairs(survivors) do
		fileName = utils.resolveCharacterPortraitFileName(survivor, maxId)
		
		result = result .. 
			'<div style = "display: inline-block; text-align:center; margin: 10px">' .. link(survivor.name) ..
			link(cstr.file .. fileName .. '.png|center|frameless|link=' .. survivor.name) .. '</div>'
	end
	result = result .. '</div>'

	return result
end

function p.resolveSurvivorsTableMainPage()
	local result = cstr.empty
	local name
	local fileName

	result = result ..
		'<div class = "fpbox" id = "fpsurvivors" style = "text-align: center;">' .. nl ..
			'<div class = "heading">' .. the(strings.survivors) .. space .. link(strings.survivors) .. space .. link(cstr.file .. 'IconHelpLoading survivor.png|32px') .. '</div>' .. nl ..
			'<div class = "fplinks charSection">' .. nl
			
		utils.sortTableById(survivors)
		local maxId = utils.getMaxId(survivors)
		for i, survivor in ipairs(survivors) do
			name = survivor.shortName or survivor.name
			fileName = utils.resolveCharacterPortraitFileName(survivor, maxId)
			
			result = result .. 
				'<div class = "fplink charMainPageBox plainlinks image">' .. nl ..
					'<div class = "box">' .. nl ..
						'<div class = "row">' .. nl ..
							'<div class = "cell">' .. nl ..
								'<div class = "image">' .. file(fileName .. dot .. cstr.png, 'link=' .. name) .. '</div>' .. nl ..
								'<div class = "charLink survivorLink link">' .. link(name) .. '</div>' .. nl ..
								'<div class = "charPerkBox">' .. resolveCharPerksMainPage(survivor) .. '</div>' .. nl ..
							'</div>' .. nl ..
						'</div>' .. nl ..
					'</div>' .. nl ..
				'</div>' .. nl
		end
		result = result ..
			'</div>' .. nl ..
		'</div>' .. nl

	return result
end

function resolveCharPerksMainPage(character)
	local mPerks = require("Module:Perks")
	local result = cstr.empty
	local perkList = mPerks.getPerksByCharacter(character)
	
	utils.sortPerksByLevel(perkList)
	for _, perk in ipairs(perkList) do
		result = result .. utils.assembleImage("sosPerk", perk.name, 42)
	end
	--Teachable unknown.png
	return result
end
	
function resolveSurvPortraitImageFileName(surv, addon)
	local fileConst = "_charSelect_portrait"
	return "S" .. string.format("%02d", surv.id) .. ((addon and space .. addon) or cstr.empty) .. fileConst
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 = p.getSurvivorById(trio.id)
		result = result .. '|+ ' .. survivor.name .. nl ..
		ntl .. nl ..
		tl .. 'class = "center" rowspan = 3' .. tl .. file(resolveSurvPortraitImageFileName(survivor) .. dot .. cstr.png, "99px", 'link=' .. survivor.name) .. nl
		utils.sortPerksByLevel(trio)
		for i, perk in ipairs(trio) do
			result = result .. hl .. file(perkImg.main(perk.techName or perk.name),"33px") .. nl ..
			hl .. link(perk.name) .. 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
Advertisement