Module:Efficacité d'une arme de Fallout

De Les Archives de Vault-Tec
Documentation du module

Ce module est utilisé par le modèle {{Efficacité d'une arme de Fallout}} pour générer un tableau contenant les dégâts effectifs d'une arme en fonction de l'armure portée par la cible.

local armors = {
	{
		link   = '[[Armure de combat (Fallout)|Armure de combat]]',
		ca     = 20,
		sdrd   = {
			['normal']      = { sd = 5, rd = 0.4 },
			['laser']       = { sd = 8, rd = 0.6 },
			['feu']         = { sd = 4, rd = 0.3 },
			['plasma']      = { sd = 4, rd = 0.5 },
			['électrique']  = { sd = 2, rd = 0.5 },
			['explosif']    = { sd = 6, rd = 0 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[Armure de la Confrérie (Fallout)|Armure de la Confrérie]]',
		ca     = 20,
		sdrd   = {
			['normal']      = { sd = 8, rd = 0.4 },
			['laser']       = { sd = 8, rd = 0.7 },
			['feu']         = { sd = 7, rd = 0.5 },
			['plasma']      = { sd = 7, rd = 0.6 },
			['électrique']  = { sd = 6, rd = 0.6 },
			['explosif']    = { sd = 8, rd = 0.4 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[Armure en cuir (Fallout)|Armure en cuir]]',
		ca     = 15,
		sdrd   = {
			['normal']      = { sd = 2, rd = 0.2 },
			['laser']       = { sd = 0, rd = 0.2 },
			['feu']         = { sd = 0, rd = 0.2 },
			['plasma']      = { sd = 0, rd = 0.1 },
			['électrique']  = { sd = 0, rd = 0.3 },
			['explosif']    = { sd = 0, rd = 0.2 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[Armure métallique (Fallout)|Armure métallique]]',
		ca     = 10,
		sdrd   = {
			['normal']      = { sd = 4, rd = 0.3 },
			['laser']       = { sd = 6, rd = 0.75 },
			['feu']         = { sd = 4, rd = 0.1 },
			['plasma']      = { sd = 4, rd = 0.2 },
			['électrique']  = { sd = 0, rd = 0 },
			['explosif']    = { sd = 4, rd = 0.25 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[Armure Tesla (Fallout)|Armure Tesla]]',
		ca     = 15,
		sdrd   = {
			['normal']      = { sd = 4, rd = 0.2 },
			['laser']       = { sd = 19, rd = 0.9 },
			['feu']         = { sd = 4, rd = 0.1 },
			['plasma']      = { sd = 10, rd = 0.8 },
			['électrique']  = { sd = 12, rd = 0.8 },
			['explosif']    = { sd = 4, rd = 0.2 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[Robe (Fallout)|Robe]]',
		ca     = 5,
		sdrd   = {
			['normal']      = { sd = 0, rd = 0.2 },
			['laser']       = { sd = 0, rd = 0.25 },
			['feu']         = { sd = 0, rd = 0.1 },
			['plasma']      = { sd = 0, rd = 0.1 },
			['électrique']  = { sd = 0, rd = 0.4 },
			['explosif']    = { sd = 0, rd = 0.2 },
			['iem']         = { sd = 0, rd = 5 }
		}
	},
	{
		link   = '[[SuperArmure (Fallout)|SuperArmure]]',
		ca     = 25,
		sdrd   = {
			['normal']      = { sd = 12, rd = 0.4 },
			['laser']       = { sd = 18, rd = 0.8 },
			['feu']         = { sd = 12, rd = 0.6 },
			['plasma']      = { sd = 10, rd = 0.4 },
			['électrique']  = { sd = 12, rd = 0.4 },
			['explosif']    = { sd = 20, rd = 0.5 },
			['iem']         = { sd = 15, rd = 5 }
		}
	},
	{
		link   = '[[SuperArmure renforcée (Fallout)|SuperArmure renforcée]]',
		ca     = 25,
		sdrd   = {
			['normal']      = { sd = 13, rd = 0.5 },
			['laser']       = { sd = 19, rd = 0.9 },
			['feu']         = { sd = 14, rd = 0.7 },
			['plasma']      = { sd = 13, rd = 0.5 },
			['électrique']  = { sd = 13, rd = 0.5 },
			['explosif']    = { sd = 20, rd = 0.6 },
			['iem']         = { sd = 15, rd = 5.05 }
		}
	},
	{
		link   = '[[Veste en cuir (Fallout)|Veste en cuir]]',
		ca     = 8,
		sdrd   = {
			['normal']      = { sd = 0, rd = 0.20 },
			['laser']       = { sd = 0, rd = 0.20 },
			['feu']         = { sd = 0, rd = 0.10 },
			['plasma']      = { sd = 0, rd = 0.10 },
			['électrique']  = { sd = 0, rd = 0.30 },
			['explosif']    = { sd = 0, rd = 0.10 },
			['iem']         = { sd = 0, rd = 5 }
		}
	}
}

-------------------------------------------------------------------

local p = {}

function p._build(args)
	local wpName = args['nom']
	local wpDmgMin = tonumber(args['dégâts minimum'])
	local wpDmgMax = tonumber(args['dégâts maximum'])
	local wpDmgType = args['type de dégâts']
	local wpBurst = tonumber(args['rafale']) or 1
	
	if not wpName or not wpDmgMin or not wpDmgMax or not wpDmgType then
		return '<Erreur module> Paramètre obligatoire manquant'
	end
	
	local comment = mw.html.create( 'p' )
		:wikitext( "Le tableau présente les dégâts effectifs en prenant en compte le [[Seuil de dégâts]] et la [[Résistance aux dégâts]] de l'armure portée par la cible. On considère que l'attaque n'est influencée par aucune aptitude et que chaque munition touche l'objectif sans faire de dégâts critiques. Dans ''[[Fallout]]'', les propriétés des [[Munitions de Fallout|munitions]] qui influencent les dégâts ne fonctionnent pas. Elles sont donc ignorées pour le calcul." )
		:allDone()
		
	local dmgTable = mw.html.create( 'table' )
		:addClass( 'va-table va-table-right-col2')
		:tag( 'caption' )
			:wikitext( wpName .. ' (' .. (wpDmgMin * wpBurst) .. ' – ' .. (wpDmgMax * wpBurst) .. ') vs Armure' )
			:done()
		:tag( 'tr' )
			:tag( 'th' ):wikitext( 'Armure' ):done()
			:tag( 'th' ):wikitext( 'Dégâts effectifs' ):done()
			:done()

	for i, armor in pairs(armors) do
		local link = armor.link
		local sdrd = armor.sdrd[wpDmgType]

		local dmgMin = math.floor( (math.max(0, wpDmgMin - sdrd.sd) * (1 - sdrd.rd)) + 0.5 )
		local dmgMax = math.floor( (math.max(0, wpDmgMax - sdrd.sd) * (1 - sdrd.rd)) + 0.5 )

		-- Calcul des dégâts pour les armes ne tirant que par rafale
		if wpBurst then
			dmgMin = dmgMin * wpBurst
			dmgMax = dmgMax * wpBurst
		end
		
		dmgTable:node(
			mw.html.create( 'tr' )
				:tag( 'td' ):wikitext(link):done()
				:tag( 'td' ):wikitext(dmgMin .. ' – ' .. dmgMax):done()
				:done()
		)
	end
	
	return tostring(comment) .. tostring(dmgTable)
end

function p.build(frame)
	local args = {}
	
	local argsParent = frame:getParent().args
	for cle, val in pairs(argsParent) do
		if val then
			val = mw.text.trim(val)
			if val ~= '' then
				args[cle] = mw.text.trim(val)
			end
		end
	end
	
	return p._build(args)
end

return p