« Module:Interactions » : différence entre les versions

Kharmitch (discussion | contributions)
mAucun résumé des modifications
Aucun résumé des modifications
 
(15 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 9 : Ligne 9 :


local data = {
local data = {
    -- Interaction spéciale si aucune autre, ne pas toucher --------
["aucune"] = {
["aucune"] = {
image        = "Neutral test color.png",
image        = "Neutral test color.png",
description  = "Ce personnage ne possède pas d'interaction particulière."
description  = "Ce personnage ne possède pas d'interaction particulière."
},
},
["fantôme"] = {
    ----------------------------------------------------------------
["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,
checkIfYes  = true,
image        = "FoS ghost costume.png",
image        = "ChallengePerk.png",
description  = "Ce personnage est un fantôme. Un personnage fantôme ne peut pas être blessé et ignore les combats."
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
},
},
["essentiel"] = {
["compagnon permanent"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "Perk nociception regulator color.png",
image        = "FO76 ui casual team.png",
description  = function(args)
description  = function(args)
local description = "Ce personnage est essentiel. Un personnage essentiel ne peut pas être tué."
local description = "Ce personnage est un [[compagnon]] permanent."
local essentialEnding = args["essentiel jusqu'à"]
local perk = args["aptitude"]
if essentialEnding then
if perk then
description = description .. " Son statut expire lorsque " .. essentialEnding .. '.'
description = description .. " Il procure l'aptitude " .. perk .. '.'
end
end
return description
return description
end
end
},
},
["mort"] = {
["compagnon temporaire"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "FO76 vaultboy bloodymess.png",
image        = "FO76 ui casual team.png",
description  = "Ce personnage est mort au début du jeu."
description  = "Ce personnage est un [[compagnon]] temporaire."
},
["oreille"] = {
checkIfYes  = true,
image        = "FIcon severed ear color.png",
description  = "Ce personnage permet de collecter une [[oreille]] s'il est mort ([[Tueur à gages]])."
},
},
["doigt"] = {
["doigt"] = {
Ligne 45 : Ligne 65 :
description  = "Ce personnage permet de collecter un [[doigt]] s'il est mort ([[Bras de la Loi]])."
description  = "Ce personnage permet de collecter un [[doigt]] s'il est mort ([[Bras de la Loi]])."
},
},
["asservissable"] = {
["emplacements"] = {
checkIfYes  = true,
checkIfYes  = false,
image        = "Mesmetron icon.png",
image        = "FO76 ui exploration team.png",
description  = "Ce personnage peut être asservi à l'aide du [[Médusatron]]."
description  = "Ce personnage apparait aux emplacements suivants.",
note        = function(args) return LF .. args["emplacements"] .. LF end
},
},
["allié"] = {
    ["essentiel"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "FO76 ui extra team.png",
image        = "Perk nociception regulator color.png",
description  = "Ce personnage est un [[Alliés|allié]] du [[CAMP de Fallout 76|CAMP]] des joueurs."
},
["compagnon temporaire"] = {
checkIfYes  = true,
image        = "FO76 ui casual team.png",
description  = "Ce personnage est un [[compagnon]] temporaire."
},
["compagnon permanent"] = {
checkIfYes  = true,
image        = "FO76 ui casual team.png",
description  = function(args)
description  = function(args)
local description = "Ce personnage est un [[compagnon]] permanent."
local description = "Ce personnage est essentiel. Un personnage essentiel ne peut pas être tué."
local perk = args["aptitude"]
local essentialEnding = args["essentiel jusqu'à"]
if perk then
if essentialEnding then
description = description .. " Il procure l'aptitude " .. perk .. '.'
description = description .. " Son statut expire lorsque " .. essentialEnding .. '.'
end
end
return description
return description
end
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"] = {
["fot recrue"] = {
Ligne 86 : Ligne 120 :
image        = "Icon Tour of Duty.png",
image        = "Icon Tour of Duty.png",
description  = "Ce personnage est une recrue du tutoriel de ''[[Fallout Tactics]]''."
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"] = {
["médecin"] = {
Ligne 111 : Ligne 196 :
end
end
},
},
["implant"] = {
["mort"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "Perk logic co processor.png",
image        = "FO76 vaultboy bloodymess.png",
description  = "Ce personnage installe des [[implant]]s."
description  = "Ce personnage est mort au début du jeu."
},
},
["souffre de la peste"] = {
["missions impliquées"] = {
checkIfYes  = true,
checkIfYes  = false,
image        = "Radiated.png",
image        = "Perk empathy synthesizer.png",
description  = "Ce personnage souffre de la [[Nouvelle Peste]]."
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"] = {
["négrier"] = {
Ligne 126 : Ligne 212 :
description  = "Ce personnage est un négrier. Il vend ou achète des [[Esclavage|esclaves]]."
description  = "Ce personnage est un négrier. Il vend ou achète des [[Esclavage|esclaves]]."
},
},
["caravanes"] = {
["objets modifiés"] = {
checkIfYes  = false,
checkIfYes  = false,
image        = "Radiated.png",
image        = "Hand Loader.png",
description  = "Ce personnage est un caravanier. Il offre ses services de protection de caravane.",
description  = "Ce personnage peut modifier des objets.",
note        = function(args) return args["caravanes"] end
note        = function(args) return LF .. args["objets modifiés"] .. LF end
},
},
["joueur de caravan"] = {
["oreille"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "Probability colored.png",
image        = "Icon severed ear color.png",
description  = function(args)
description  = "Ce personnage permet de collecter une [[oreille]] s'il est mort ([[Tueur à gages]])."
local description = "Ce personnage est un joueur de [[caravan]]."
local caps = args["enchère au caravan"]
if perk then
description = description .. " Il peut enchérir de " .. caps .. ' [[capsule]]s.'
end
return description
end
},
},
["réparation"] = {
["orientation"] = {
checkIfYes  = false,
checkIfYes  = false,
image        = "Fullmaintenance.png",
image        = "FCHAT J'aime.png",
description  = function(args)
description  = function(args)
return "Ce personnage propose des services de réparation d'équipement. Il répare jusqu'à une condition maximale de "
return "Ce personnage est d'orientation " .. args["orientation"] .. "."
.. args["réparation"]
.. "."
end
end
},
["armes modifiées"] = {
checkIfYes  = false,
image        = "Hand Loader.png",
description  = "Ce personnage modifie des armes.",
note        = function(args) return LF .. args["armes modifiées"] end
},
["lit"] = {
checkIfYes  = false,
image        = "Deep Sleep.png",
description  = function(args)
return "Ce personnage loue un lit à " .. args["lit"] .. " [[capsule]]s la nuit."
end
},
["romance"] = {
checkIfYes  = true,
image        = "Deep Sleep.png",
description  = "Une romance est possible avec ce personnage."
},
},
["quêtes débutées"] = {
["quêtes débutées"] = {
Ligne 175 : Ligne 234 :
image        = "25 Strictly Business.png",
image        = "25 Strictly Business.png",
description  = "Ce personnage démarre des [[quête]]s.",
description  = "Ce personnage démarre des [[quête]]s.",
note        = function(args) return LF .. args["quêtes débutées"] end
note        = function(args) return LF .. args["quêtes débutées"] .. LF end
},
},
["quêtes impliquées"] = {
["quêtes impliquées"] = {
Ligne 181 : Ligne 240 :
image        = "10 Rescue from Paradise.png",
image        = "10 Rescue from Paradise.png",
description  = "Ce personnage est impliqué dans des [[quête]]s.",
description  = "Ce personnage est impliqué dans des [[quête]]s.",
note        = function(args) return LF .. args["quêtes impliquées"] end
note        = function(args) return LF .. args["quêtes impliquées"] .. LF end
},
["évents 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["évents débutés"] end
},
["évents 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["évents impliqués"] end
},
},
["rencontres aléatoires"] = {
["rencontres aléatoires"] = {
Ligne 199 : Ligne 246 :
image        = "FO76 ui roleplay team.png",
image        = "FO76 ui roleplay team.png",
description  = "Ce personnage est impliqué dans des [[rencontre aléatoire|rencontres aléatoires]].",
description  = "Ce personnage est impliqué dans des [[rencontre aléatoire|rencontres aléatoires]].",
note        = function(args) return LF .. args["rencontres aléatoires"] end
note        = function(args) return LF .. args["rencontres aléatoires"] .. LF end
},
},
["missions impliquées"] = {
["réparation"] = {
checkIfYes  = false,
checkIfYes  = false,
image        = "Perk empathy synthesizer.png",
image        = "Jury Rigger.png",
description  = "Ce personnage est impliqué dans des [[Missions de Fallout Tactics|missions]].",
description  = function(args)
note        = function(args) return LF .. args["missions impliquées"] end
return "Ce personnage propose des services de réparation d'équipement. Il répare jusqu'à une condition maximale de "
.. args["réparation"]
.. "."
end
},
},
["emplacements"] = {
["romance"] = {
checkIfYes  = false,
checkIfYes  = true,
image        = "FO76 ui exploration team.png",
image        = "Deep Sleep.png",
description  = "Ce personnage apparait aux emplacements suivants.",
description  = "Une romance est possible avec ce personnage."
note        = function(args) return LF .. args["emplacements"] 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"] end
},
},
["souffre de la peste"] = {
checkIfYes  = true,
image        = "Radiated.png",
description  = "Ce personnage souffre de la [[Nouvelle Peste]]."
}, 
["tête parlante"] = {
["tête parlante"] = {
checkIfYes  = true,
checkIfYes  = true,
image        = "OpticsEnhancer.png",
image        = "OpticsEnhancer.png",
description  = "Ce personnage possède une [[tête parlante]]."
description  = "Ce personnage possède une [[tête parlante]]."
},
["autre"] = {
checkIfYes  = true,
image        = "ChallengePerk.png",
description  = "Ce personnage offre différents services.",
note        = function(args) return LF .. args["autre"] end
},
["factions"] = {
checkIfYes  = false,
image        = "Terrifying Presence.png",
description  = "Ce personnage est allié avec les factions suivantes.",
note        = function(args) return LF .. args["factions"] end
}
}
}
}
Ligne 261 : Ligne 297 :
end
end
return mw.html.create( 'div' )
return mw.html.create( 'li' )
:addClass( 'avt-interactions-row' )
:addClass( 'avt-interactions-row' )
:node(image)
:node(image)
Ligne 272 : Ligne 308 :


function p._build(args)
function p._build(args)
local res = mw.html.create( 'div' )
local res = mw.html.create( 'ul' )
:addClass( 'avt-interactions' )
:addClass( 'avt-interactions' )
Ligne 287 : Ligne 323 :
argValue = args[key]
argValue = args[key]
local def = data[key:lower()]
local def = data[key:lower()]
if def and (not checkIfYes or argValue:lower() == OUI) and argValue ~= '-' then
if def and (not def.checkIfYes or argValue:lower() == OUI) and argValue ~= '-' then
isEmpty = false
isEmpty = false
res:node(buildRow(args, def))
res:node(buildRow(args, def))
Ligne 309 : Ligne 345 :
for cle, val in pairs(argsParent) do
for cle, val in pairs(argsParent) do
if val then
if val then
args[cle] = mw.text.trim(val)
val = mw.text.trim(val)
if val ~= '' then
args[cle] = mw.text.trim(val)
end
end
end
end
end

Dernière version du 7 septembre 2023 à 16:52

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