« Module:Interactions » : différence entre les versions
mAucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 128 : | Ligne 128 : | ||
["joueur de caravan"] = { | ["joueur de caravan"] = { | ||
checkIfYes = true, | checkIfYes = true, | ||
image = " | image = "Caravan Master.png", | ||
description = function(args) | description = function(args) | ||
local description = "Ce personnage est un joueur de [[caravan]]." | local description = "Ce personnage est un joueur de [[caravan]]." | ||
Ligne 243 : | Ligne 243 : | ||
["réparation"] = { | ["réparation"] = { | ||
checkIfYes = false, | checkIfYes = false, | ||
image = " | image = "Jury Rigger.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 propose des services de réparation d'équipement. Il répare jusqu'à une condition maximale de " |
Version du 24 mars 2022 à 19:26
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
},
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 = "Terrifying Presence.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]])."
},
["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