Module:Interactions

Documentation du module

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

Usage modifier

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

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

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