« Module:Interactions » : différence entre les versions
Ajout des interactions. Faire le reste des tests. Voir pour les notes |
(Aucune différence)
|
Version du 27 juin 2021 à 00:24
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'
------------------------------------------------
----- 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]]''."
},
["docteur"] = {
checkIfYes = true,
image = "LivingAnatomy.png",
description = "Ce personnage est un docteur.",
note = function(args)
local note
local services = {}
if args["restaure les points de vie"] == OUI then table.insert(services, "Restaure les points de vie") end
if args["retire les radiations"] == OUI then table.insert(services, "Retire les radiations") end
if args["soigne les infirmités"] == OUI then table.insert(services, "Soigne les infirmités") end
if args["soigne les maladies"] == OUI then table.insert(services, "Soigne les maladies") end
if args["soigne les mutations"] == OUI then table.insert(services, "Soigne les mutations") end
if args["reconstruction faciale"] == OUI then table.insert(services, "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 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 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 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 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 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 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 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 args["emplacements"] end
},
["bonus"] = {
checkIfYes = false,
image = "Adrenaline.Rush color.png",
description = "Ce personnage apporte un bonus au personnage joueur.",
note = function(args) return 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 args["autre"] end
},
["factions"] = {
checkIfYes = false,
image = "Terrifying Presence.png",
description = "Ce personnage est allié avec les factions suivantes.",
note = function(args) return 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' )
:addClass( 'avt-interactions-desc' )
:wikitext( description )
:done()
local note = def.note
if note then
if type(note) == 'function' then
note = note(args)
end
note = mw.html.create( 'p' )
:addClass( 'avt-interactions-note' )
:wikitext( note )
:done()
end
return mw.html.create( 'li' )
:addClass( 'avt-interactions-row' )
:node(image)
: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
local def = data[key:lower()]
if not checkIfYes or args.key:lower() == OUI 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