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

De Les Archives de Vault-Tec
Kharmitch (discussion | contributions)
mAucun résumé des modifications
Kharmitch (discussion | contributions)
mAucun résumé des modifications
Ligne 274 : Ligne 274 :
local res = mw.html.create( 'ul' )
local res = mw.html.create( 'ul' )
:addClass( 'avt-interactions' )
:addClass( 'avt-interactions' )
-- on trie les arguments par ordre alphabétique
-- on trie les arguments par ordre alphabétique
local keys = {}
local keys = {}
Ligne 285 : Ligne 285 :
for i, key in ipairs(keys) do
for i, key in ipairs(keys) do
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 checkIfYes or argValue:lower() == OUI) and argValue ~= '-' then

Version du 4 juillet 2021 à 18:49

Documentation du module

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

Usage

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

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

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 = {
	["aucune"] = {
		image        = "Neutral test color.png",
		description  = "Ce personnage ne possède pas d'interaction particulière."
	},
	["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."
	},
	["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
	},
	["mort"] = {
		checkIfYes   = true,
		image        = "FO76 vaultboy bloodymess.png",
		description  = "Ce personnage est mort au début du jeu."
	},
	["oreille"] = {
		checkIfYes   = true,
		image        = "FIcon severed ear color.png",
		description  = "Ce personnage permet de collecter une [[oreille]] s'il est mort ([[Tueur à gages]])."
	},
	["doigt"] = {
		checkIfYes   = true,
		image        = "Severed.finger colored.png",
		description  = "Ce personnage permet de collecter un [[doigt]] s'il est mort ([[Bras de la Loi]])."
	},
	["asservissable"] = {
		checkIfYes   = true,
		image        = "Mesmetron icon.png",
		description  = "Ce personnage peut être asservi à l'aide du [[Médusatron]]."
	},
	["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."
	},
	["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)
			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
	},
	["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]]''."
	},
	["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
	},
	["implant"] = {
		checkIfYes   = true,
		image        = "Perk logic co processor.png",
		description  = "Ce personnage installe des [[implant]]s."
	},
	["souffre de la peste"] = {
		checkIfYes   = true,
		image        = "Radiated.png",
		description  = "Ce personnage souffre de la [[Nouvelle Peste]]."
	},
	["négrier"] = {
		checkIfYes   = true,
		image        = "Radiated.png",
		description  = "Ce personnage est un négrier. Il vend ou achète des [[Esclavage|esclaves]]."
	},
	["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
	},
	["joueur de caravan"] = {
		checkIfYes   = true,
		image        = "Probability colored.png",
		description  = function(args)
			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"] = {
		checkIfYes   = false,
		image        = "Fullmaintenance.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
	},
	["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"] = {
		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"] 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"] 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"] = {
		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"] end
	},
	["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"] end
	},
	["emplacements"] = {
		checkIfYes   = false,
		image        = "FO76 ui exploration team.png",
		description  = "Ce personnage apparait aux emplacements suivants.",
		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
	},
	["tête parlante"] = {
		checkIfYes   = true,
		image        = "OpticsEnhancer.png",
		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
	}
}

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

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 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
			args[cle] = mw.text.trim(val)
		end
	end
	
	return p._build(args)
end

return p