Module:Interactions

De Les Archives de Vault-Tec
Documentation du module

Ce module génère une liste des interactions possibles avec un personnage non-joueur.

Usage[modifier le wikicode]

Fonctions exportables :

  • build(frame) – voir la documentation du modèle {{Interactions}} ;
  • _build(args) – même fonction mais utilisable directement dans un autre module Lua ;

Ajouter une interaction[modifier le wikicode]

Il faut ajouter les lignes suivantes dans la table data :

	["nom_interaction"] = {
		checkIfYes   = true,
		image        = "",
		description  = "", -- ou function(args) ... end
		note         = ""  -- ou function(args) ... end
	},
Paramètre Description Type Statut
nom_interaction Nom du paramètre que le contributeur utilisera pour afficher l'interaction. Chaîne obligatoire
checkIfYes Indique si le paramètre nom_interaction doit être égal à la valeur oui pour pouvoir être affiché. Booléen obligatoire
image Nom d'un fichier illustrant l'interaction. Chaîne obligatoire
description Courte description de l'interaction. Chaîne
Fonction
obligatoire
image Sous-texte de la description, pour afficher des listes par exemple. Supprimez le paramètre si vide Chaîne
Fonction
facultatif

Exemples[modifier le wikicode]

Une interaction simple qui s'affiche si le contributeur appelle le paramètre fot recrue=oui.

	["fot recrue"] = {
		checkIfYes   = true,
		image        = "Icon Tour of Duty.png",
		description  = "Ce personnage est une recrue."
	},

Une interaction qui s'affiche si le contributeur renseigne une liste de factions. Cette liste est ensuite affichée dans la note.

	["factions"] = {
		checkIfYes   = false,
		image        = "Terrifying Presence.png",
		description  = "Ce personnage est allié avec les factions suivantes.",
		note         = function(args) return LF .. args["factions"] .. LF end
	},

Une interaction dont la description est une fonction, ce qui permet d'afficher ou non l'aptitude procurée par le compagnon selon les informations renseignées par le contributeur.

	["compagnon permanent"] = {
		checkIfYes   = true,
		image        = "FO76 ui casual team.png",
		description  = function(args)
			local description = "Ce personnage est un [[compagnon]] permanent."
			local perk = args["aptitude"]
			if perk then
				description = description .. " Il procure l'aptitude " .. perk .. '.'
			end
			return description
		end
	},


Documentation transclues de Module:Interactions/doc.
local p = {}

local OUI = 'oui'
local LF = '\n'

------------------------------------------------
-----     Référentiel des interactions     ----- 
------------------------------------------------

local data = {
    -- Interaction spéciale si aucune autre, ne pas toucher --------
	["aucune"] = {
		image        = "Neutral test color.png",
		description  = "Ce personnage ne possède pas d'interaction particulière."
	},
    ----------------------------------------------------------------
	["allié"] = {
		checkIfYes   = true,
		image        = "FO76 ui extra team.png",
		description  = "Ce personnage est un [[Alliés|allié]] du [[CAMP de Fallout 76|CAMP]] des joueurs."
	},
	["asservissable"] = {
		checkIfYes   = true,
		image        = "Mesmetron icon.png",
		description  = "Ce personnage peut être asservi à l'aide du [[Médusatron]]."
	},
	["autre"] = {
		checkIfYes   = true,
		image        = "ChallengePerk.png",
		description  = "Ce personnage offre différents services.",
		note         = function(args) return LF .. args["autre"] .. LF end
	},
	["bonus"] = {
		checkIfYes   = false,
		image        = "Adrenaline.Rush color.png",
		description  = "Ce personnage apporte un bonus au personnage joueur.",
		note         = function(args) return LF .. args["bonus"] .. LF end
	},
	["caravanes"] = {
		checkIfYes   = false,
		image        = "Radiated.png",
		description  = "Ce personnage est un caravanier. Il offre ses services de protection de caravane.",
		note         = function(args) return args["caravanes"] end
	},
	["compagnon permanent"] = {
		checkIfYes   = true,
		image        = "FO76 ui casual team.png",
		description  = function(args)
			local description = "Ce personnage est un [[compagnon]] permanent."
			local perk = args["aptitude"]
			if perk then
				description = description .. " Il procure l'aptitude " .. perk .. '.'
			end
			return description
		end
	},
	["compagnon temporaire"] = {
		checkIfYes   = true,
		image        = "FO76 ui casual team.png",
		description  = "Ce personnage est un [[compagnon]] temporaire."
	},
	["doigt"] = {
		checkIfYes   = true,
		image        = "Severed.finger colored.png",
		description  = "Ce personnage permet de collecter un [[doigt]] s'il est mort ([[Bras de la Loi]])."
	},
	["emplacements"] = {
		checkIfYes   = false,
		image        = "FO76 ui exploration team.png",
		description  = "Ce personnage apparait aux emplacements suivants.",
		note         = function(args) return LF .. args["emplacements"] .. LF end
	},
    ["essentiel"] = {
		checkIfYes   = true,
		image        = "Perk nociception regulator color.png",
		description  = function(args)
			local description = "Ce personnage est essentiel. Un personnage essentiel ne peut pas être tué."
			local essentialEnding = args["essentiel jusqu'à"]
			if essentialEnding then
				description = description .. " Son statut expire lorsque " .. essentialEnding .. '.'
			end
			return description
		end
	},
	["évènements débutés"] = {
		checkIfYes   = false,
		image        = "FO76 icon map public event.png",
		description  = "Ce personnage démarre des [[Événements de Fallout 76|évènements]].",
		note         = function(args) return LF .. args["évènements débutés"] .. LF end
	},
	["évènements impliqués"] = {
		checkIfYes   = false,
		image        = "FO76 icon map public event.png",
		description  = "Ce personnage est impliqué dans des [[Événements de Fallout 76|évènements]].",
		note         = function(args) return LF .. args["évènements impliqués"] .. LF end
	},
	["factions"] = {
		checkIfYes   = false,
		image        = "33 Protector.png",
		description  = "Ce personnage est allié avec les factions suivantes.",
		note         = function(args) return LF .. args["factions"] .. LF end
	},
    ["fantôme"] = {
		checkIfYes   = true,
		image        = "FoS ghost costume.png",
		description  = "Ce personnage est un fantôme. Un personnage fantôme ne peut pas être blessé et ignore les combats."
	},
	["fot recrue"] = {
		checkIfYes   = true,
		image        = "Icon Tour of Duty.png",
		description  = "Ce personnage est une recrue."
	},
	["fot recrue démo"] = {
		checkIfYes   = true,
		image        = "Icon Tour of Duty.png",
		description  = "Ce personnage est une recrue de la [[Démo de Fallout Tactics|démo de ''Fallout Tactics'']]."
	},
	["fot recrue tutoriel"] = {
		checkIfYes   = true,
		image        = "Icon Tour of Duty.png",
		description  = "Ce personnage est une recrue du tutoriel de ''[[Fallout Tactics]]''."
	},
	["implant"] = {
		checkIfYes   = true,
		image        = "Perk logic co processor.png",
		description  = "Ce personnage installe des [[implant]]s."
	},
	["joueur de caravan"] = {
		checkIfYes   = true,
		image        = "Caravan Master.png",
		description  = function(args)
			local description = "Ce personnage est un joueur de [[caravan]]."
			local caps = args["enchère au caravan"]
			if caps then
				description = description .. " Il peut enchérir de " .. caps .. ' [[capsule]]s.'
			end
			return description
		end
	},
	["lit"] = {
		checkIfYes   = false,
		image        = "Deep Sleep.png",
		description  = function(args)
			return "Ce personnage loue un lit à " .. args["lit"] .. " [[capsule]]s la nuit."
		end
	},
	["marchand"] = {
		checkIfYes   = false,
		image        = "FO76 ui trading team.png",
		description  = "Ce personnage est un marchand.",
		note         = function(args)
			local note = ""
			
			local cash = args["caisse"]
			local currency = args["devise"]
			if cash and currency then
				note = "Caisse : " .. cash .. " " .. currency .. "<br/>"
			elseif cash then
				note = "Caisse : " .. cash .. " [[capsule]]s<br/>"
			elseif currency then
				note = "Devise utilisée : " .. currency .. "<br/>"
			end
			
			note = note .. "Marchandises :" .. LF .. args["marchand"] .. LF
			
			local restock = args["réapprovisionnement"]
			if restock then
				note = note .. "Réapprovisionnement : " .. restock .. LF
			end
			
			return note
		end
	},
	["médecin"] = {
		checkIfYes   = true,
		image        = "LivingAnatomy.png",
		description  = "Ce personnage est un médecin.",
		note         = function(args)
			local note
			local services = {}
			if args["restaure la santé"] == OUI then table.insert(services, "Il restaure les points de vie.") end
			if args["retire les radiations"] == OUI then table.insert(services, "Il retire les radiations.") end
			if args["soigne les infirmités"] == OUI then table.insert(services, "Il soigne les infirmités.") end
			if args["soigne les maladies"] == OUI then table.insert(services, "Il soigne les maladies.") end
			if args["soigne les mutations"] == OUI then table.insert(services, "Il soigne les mutations.") end
			if args["reconstruction faciale"] == OUI then table.insert(services, "Il propose une reconstruction faciale.") end
			if #services > 0 then
				res = mw.html.create( 'ul' )
				for i, v in ipairs(services) do
					res	:tag( 'li' ):wikitext( v ):done()
				end
				res	:allDone()
				note = tostring(res)
			end
			return note
		end
	},
	["mort"] = {
		checkIfYes   = true,
		image        = "FO76 vaultboy bloodymess.png",
		description  = "Ce personnage est mort au début du jeu."
	},
	["missions impliquées"] = {
		checkIfYes   = false,
		image        = "Perk empathy synthesizer.png",
		description  = "Ce personnage est impliqué dans des [[Missions de Fallout Tactics|missions]].",
		note         = function(args) return LF .. args["missions impliquées"] .. LF end
	},
	["négrier"] = {
		checkIfYes   = true,
		image        = "Radiated.png",
		description  = "Ce personnage est un négrier. Il vend ou achète des [[Esclavage|esclaves]]."
	},
	["objets modifiés"] = {
		checkIfYes   = false,
		image        = "Hand Loader.png",
		description  = "Ce personnage peut modifier des objets.",
		note         = function(args) return LF .. args["objets modifiés"] .. LF end
	},
	["oreille"] = {
		checkIfYes   = true,
		image        = "Icon severed ear color.png",
		description  = "Ce personnage permet de collecter une [[oreille]] s'il est mort ([[Tueur à gages]])."
	},
	["orientation"] = {
		checkIfYes   = false,
		image        = "FCHAT J'aime.png",
		description  = function(args)
			return "Ce personnage est d'orientation " .. args["orientation"] .. "."
		end
	},
	["quêtes débutées"] = {
		checkIfYes   = false,
		image        = "25 Strictly Business.png",
		description  = "Ce personnage démarre des [[quête]]s.",
		note         = function(args) return LF .. args["quêtes débutées"] .. LF end
	},
	["quêtes impliquées"] = {
		checkIfYes   = false,
		image        = "10 Rescue from Paradise.png",
		description  = "Ce personnage est impliqué dans des [[quête]]s.",
		note         = function(args) return LF .. args["quêtes impliquées"] .. LF end
	},
	["rencontres aléatoires"] = {
		checkIfYes   = false,
		image        = "FO76 ui roleplay team.png",
		description  = "Ce personnage est impliqué dans des [[rencontre aléatoire|rencontres aléatoires]].",
		note         = function(args) return LF .. args["rencontres aléatoires"] .. LF end
	},
	["réparation"] = {
		checkIfYes   = false,
		image        = "Jury Rigger.png",
		description  = function(args)
			return "Ce personnage propose des services de réparation d'équipement. Il répare jusqu'à une condition maximale de "
				.. args["réparation"]
				.. "."
		end
	},
	["romance"] = {
		checkIfYes   = true,
		image        = "Deep Sleep.png",
		description  = "Une romance est possible avec ce personnage."
	},
	["souffre de la peste"] = {
		checkIfYes   = true,
		image        = "Radiated.png",
		description  = "Ce personnage souffre de la [[Nouvelle Peste]]."
	},   
	["tête parlante"] = {
		checkIfYes   = true,
		image        = "OpticsEnhancer.png",
		description  = "Ce personnage possède une [[tête parlante]]."
	}
}

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

function buildRow(args, def)
	local image = mw.html.create( 'div' )
		:addClass( 'avt-interactions-img' )
		:wikitext( '[[Fichier:'..def.image..'|x50px|alt=|link=]]' )
		:done()
	
	local description = def.description
	if type(def.description) == 'function' then
		description = description(args)
	end
	description = mw.html.create( 'p' )
		:wikitext( description )
		:done()
	
	local note = def.note
	if note then
		if type(note) == 'function' then
			note = note(args)
		end
	end
	
	return mw.html.create( 'li' )
		:addClass( 'avt-interactions-row' )
		:node(image)
		:tag( 'div' )
			:addClass( 'avt-interactions-text' )
			:node(description)
			:node(note)
		:done()
end

function p._build(args)
	local res = mw.html.create( 'ul' )
		:addClass( 'avt-interactions' )
	
	-- on trie les arguments par ordre alphabétique
	local keys = {}
	for k, v in pairs(args) do
		table.insert(keys, k)
	end
	table.sort(keys)
	
	local isEmpty = true
	
	for i, key in ipairs(keys) do
		argValue = args[key]
		local def = data[key:lower()]
		if def and (not def.checkIfYes or argValue:lower() == OUI) and argValue ~= '-' then
			isEmpty = false
			res:node(buildRow(args, def))
		end
	end
	
	-- cas particulier le pnj n'a aucune interaction
	if isEmpty then
		res:node(buildRow(args, data.aucune))
	end
	
	res:allDone()
	
	return res
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