**Language / Langue :** **FR** | [[en:yaml:objets|EN]]
====== Objets et inventaire (YAML) ======
Les déclarations dans ''objets:'' définissent les objets et leurs emplacements initiaux dans la salle. Ils utilisent les commandes natives du bot : ''prendre'', ''examiner'' et ''jeter''.
Important : les objets YAML ne possèdent pas de champ ''si:'' ni ''visible-si:''. Pour rendre un objet conditionnel, utilisez plutôt un événement, un choix, un tag, une salle différente, ou un objet avec ''retirer: true''.
===== Exemple complet =====
- id: bibliotheque
texte: |
Une table encombrée occupe la pièce.
Un vieux coffre repose contre le mur.
objets:
- nom: grimoire
endroit: table
desc_meuble: "Une vieille table en bois. Un grimoire poussiéreux y est posé."
description: "Un vieux grimoire aux pages jaunies."
msg_ramassage: "Vous prenez le grimoire sur la table."
reaction_meuble: "Examiner la table"
reaction_prise: "Prendre le grimoire"
reaction_objet: "Examiner le grimoire"
- nom: cle
endroit: invisible
description: "Une petite clé en argent."
msg_ramassage: "Vous ramassez la clé."
- nom: vieillepotion
retirer: true
endroit: invisible
msg_retrait: "La vieille potion disparaît de votre sac."
===== Champs disponibles =====
^ Champ ^ Effet ^
| ''nom:'' | Identifiant de l'objet. Facultatif pour un meuble vide, obligatoire pour un objet ou un retrait. |
| ''nom_affiche:'' | Nom lu et tapé par le joueur ; ne change pas l'identifiant. |
| ''meuble-vide: true'' | Décor accessible uniquement par son meuble. |
| ''endroit:'' | Meuble ou lieu où se trouve l'objet. Défaut : ''invisible''. |
| ''description:'' | Texte affiché quand le joueur examine l'objet. |
| ''desc_meuble:'' | Texte affiché quand le joueur examine le meuble/l'endroit. Si absent, le moteur réutilise ''description:''. |
| ''msg_ramassage:'' | Texte affiché quand l'objet est pris. |
| ''absent: true'' | Déclare un emplacement initialement vide, réactivable. |
| ''retirer: true'' | Retire cet objet à l'entrée dans la salle, équivalent au préfixe ''-nom'' de l'ancienne syntaxe. |
| ''msg_retrait:'' | Texte utilisé lors du retrait si ''retirer: true''. |
| ''reaction_meuble:'' | Bouton affiché pour examiner le meuble. |
| ''reaction_prise:'' | Bouton affiché pour prendre l'objet. |
| ''reaction_objet:'' | Bouton affiché pour examiner l'objet. |
| ''limite-inventaire:'' | Nombre d'exemplaires que le joueur peut porter. Sans limite retenue : un seul. ''0'' : illimité. |
| ''msg_limite-inventaire:'' | Texte facultatif affiché quand la limite est atteinte. |
| ''msg_jeter-absent:'' | Texte facultatif affiché quand le joueur jette un objet qu'il ne porte pas. |
===== Meuble, objet et inventaire =====
''endroit:'' définit le meuble visible. Exemple : avec ''endroit: coffre'', le joueur peut examiner ''coffre''. ''desc_meuble:'' décrit alors le coffre, tandis que ''description:'' décrit l'objet lui-même.
''endroit: invisible'' signifie que l'objet existe dans la salle mais n'est pas listé comme objet visible à prendre directement. C'est utile pour des états internes ou des objets manipulés par événement.
===== Plusieurs exemplaires d'un même objet =====
Déclarer plusieurs fois le même ''nom:'' représente désormais plusieurs **exemplaires réels**, y compris dans des meubles ou des salles différents. En prendre un ne masque plus les autres, qui gardent leur propre description dans le décor.
objets:
- nom: piece
endroit: coffre
description: "Une pièce d'argent usée."
- nom: piece
endroit: bourse
description: "Une pièce encore tiède."
L'inventaire les regroupe sous la forme ''piece × 2''. Jeter, utiliser ou retirer un objet ne consomme qu'une unité, et les conditions historiques ''objet'' / ''-objet'' conservent leur sens.
===== Combien d'exemplaires peut-on porter =====
''limite-inventaire:'' fixe le maximum. Sans limite retenue d'une déclaration précédente, le joueur porte **un** exemplaire. ''0'' signifie illimité.
objets:
- nom: torche
endroit: mur
limite-inventaire: 3
msg_limite-inventaire: "Vous portez déjà trois torches."
Dépasser la limite est une réponse narrative normale, pas une erreur : le moteur indique combien d'exemplaires sont déjà portés et quelle est la limite, puis laisse les commandes disponibles. Les deux messages facultatifs acceptent le traitement de texte habituel, dont ''v_variable_v'' et ''t_variable_t''.
===== Tester un objet en condition =====
Dans les champs ''si:'', un objet se teste avec son nom directement :
si: "cle" # le joueur possède l'objet cle
Ou :
si: "-cle" # le joueur ne possède pas l'objet cle
Les conditions d'objet utilisent l'identifiant ''nom:'', même si un nom affiché est défini.
===== Conditions de quantité =====
Une condition structurée compare le nombre d'exemplaires possédés.
evenements:
- si:
objet: piece
quantite: 3
operateur: ">="
texte: "Vous avez de quoi payer le passeur."
L'éditeur propose ce réglage dans son constructeur de conditions.
===== Ajouter ou retirer un objet via faire: =====
Forme recommandée :
evenements:
- si: ~
faire:
- objet: cle_rouillee
vers: inventaire
description: "Une vieille clé rouillée."
- objet: fausse_cle
vers: inventaire
retirer: true
texte: "Votre trousseau change."
La forme historique reste acceptée :
faire:
- "cle_rouillee&&inventaire&&Une vieille clé rouillée."
- "-fausse_cle&&inventaire&&null"
===== Médias dans les descriptions =====
''description:'' et ''desc_meuble:'' acceptent les mêmes médias que le texte narratif : images ''%%[[url]]%%'', sons ''%%<>%%'' et vidéos ''%%((url))%%''.
objets:
- nom: carte
endroit: table
description: "Une carte du royaume.\n[[https://exemple.com/images/carte.png]]"
msg_ramassage: "Vous prenez la carte."
Cliquer sur un objet dans l'inventaire déclenche automatiquement ''examiner ''.
===== Voir aussi =====
* [[fr:yaml:conditions|Conditions]]
* [[fr:yaml:actions|Actions personnalisées]]
* [[fr:yaml:medias|Sons, images et vidéos]]
===== Nom affiché et identifiant =====
''nom:'' reste l'identifiant stable utilisé dans les conditions, effets et sauvegardes. ''nom_affiche:'' fournit un nom plus lisible au joueur :
objets:
- nom: cle_atelier
nom_affiche: clé de l'atelier
endroit: table
description: Une petite clé en fer.
Le joueur peut taper ''prendre clé de l'atelier'', ''examiner clé de l'atelier'' ou utiliser l'identifiant ''cle_atelier''. Les noms affichés sont reconnus sans distinction de casse, d'accents ou d'espaces doublés. Les commandes, alias, identifiants et cibles explicites d'actions gardent leur priorité ; examiner un meuble ou une variable reste possible même si un objet porte ce nom affiché.
L'inventaire numérote les objets distincts de même nom affiché, par exemple ''boisson 1'' et ''boisson 2'' ; ces libellés peuvent être tapés. Plusieurs exemplaires du même identifiant restent regroupés. Pour les conditions et les effets, toujours utiliser l'identifiant. ''t_action_cible_t'' contient aussi l'identifiant résolu.
Dans l'éditeur, **Nom affiché** se déplie à la demande et reste ouvert si une valeur est renseignée. En anglais : ''display_name:''.
===== Renommer pendant la partie =====
Dans le ''faire:'' d'une interaction :
faire:
- nom_affiche: cle_atelier
valeur: clé identifiée de l'atelier
L'effet change le nom affiché, sans changer l'identifiant ni les quantités. Il est conservé dans les sauvegardes. Une ''valeur: ""'' rétablit l'identifiant ''cle_atelier'', même si la déclaration initiale donnait un autre nom affiché. Cet effet n'est pas autorisé dans les corps de boucle. Dans l'éditeur : effet **Renommer un objet**, avec l'objet et son nouveau nom affiché. En anglais : ''display_name'' et ''value''.
===== Décors et meubles vides =====
''meuble-vide: true'' décrit un meuble sans objet à prendre. Le joueur peut examiner le meuble, mais ne peut ni prendre ni examiner ce décor comme un objet. Son ''nom:'' est facultatif : le moteur crée alors une identité interne. Utilisez ''desc_meuble:'' et, si besoin, ''reaction_meuble:''. Les champs de prise, d'examen d'objet, de nom affiché et de limite d'inventaire ne donnent pas d'interaction d'objet à ce décor.
objets:
- nom: cle_atelier
nom_affiche: clé de l'atelier
endroit: table
desc_meuble: Une clé est posée sur la table.
description: Une petite clé en fer.
- nom: table_vide
meuble-vide: true
endroit: table
desc_meuble: La table est vide.
- nom: statue_decor
meuble-vide: true
endroit: statue
desc_meuble: Une vieille statue de pierre.
reaction_meuble: Examiner la statue
Placer le décor de meuble vide **après** les objets ordinaires de ce meuble. Le premier objet encore présent fournit sa description ; une fois la clé prise, ''examiner table'' affiche «La table est vide.» La statue montre le même usage pour un décor permanent.
''endroit: invisible'' garde les usages historiques d'un objet caché ; ce n'est pas un meuble vide. Si ''retirer: true'' est aussi présent, le retrait prime : un nom d'objet est nécessaire et le linter avertit que ''meuble-vide'' est ignoré. L'éditeur conserve les valeurs des champs masqués et permet de corriger une combinaison contradictoire. La clé ''secret'' est refusée sur les objets par le linter ; les succès secrets gardent leur propre réglage. En anglais : ''empty-furniture: true'', ''location'', ''furniture_description'' et ''furniture_reaction''.
===== Objets réversibles et commandes (4.17) =====
Prendre désactive un exemplaire déclaré dans son meuble. ''mettre'' et ''poser'' le replacent dans un emplacement déclaré pour le même objet. Ces formes sont équivalentes : ''mettre piece dans coffre'', ''poser piece sur coffre'' et ''mettre piece coffre''. Sans meuble, ''mettre piece'' cherche un emplacement disponible. Une action personnalisée du même nom garde la priorité. Un dépôt refusé ne retire rien de l'inventaire.
Plusieurs objets différents peuvent partager un meuble. L'examen du meuble utilise la première déclaration dont l'objet est encore présent. Les prises suivent l'ordre des déclarations ; les dépôts remplissent les emplacements libres dans l'ordre inverse.
titre: 'Wiki 4.17 : piles'
vars:
capacite: 2
salles:
- id: atelier
texte: Un coffre et une table.
objets:
- nom: piece
endroit: coffre
description: Première pièce.
limite-inventaire: v_capacite_v
- nom: piece
endroit: coffre
description: Seconde pièce.
- nom: cle
endroit: coffre
description: Une clé.
- meuble-vide: true
endroit: coffre
desc_meuble: Le coffre est vide.
choix:
- commande: rester
bouton: Rester
vers: atelier
Ici, deux prises de ''piece'' sont possibles. Après un dépôt dans le coffre, c'est la seconde déclaration qui redevient présente en premier. ''examiner_objet_dans coffre'' examine l'objet actuellement en tête de ce meuble ; ''prendre_dans coffre'' le prend. Ces commandes ciblent l'emplacement, même si le même identifiant existe ailleurs. En anglais : ''inspect_from coffre'' et ''take_from coffre''.
===== Déclaration absente, transfert et activation =====
''absent: true'' réserve un emplacement vide au départ. Il peut être rempli après une prise, un transfert ou une activation.
titre: 'Wiki 4.17 : activation'
salles:
- id: atelier
texte: Une table, un coffre et une boîte.
objets:
- nom: cle
endroit: table
- nom: cle
endroit: coffre
absent: true
- nom: bille
endroit: boite
absent: true
actions:
- verbe: ranger
cible: all
bouton: Ranger la clé
faire:
objet: cle
vers: coffre
- verbe: apparition
cible: all
bouton: Faire apparaître la bille
faire:
objet: bille
activer: boite
choix:
- commande: rester
bouton: Rester
vers: atelier
Après ''prendre cle'', l'effet ''{objet: cle, vers: coffre}'' transfère une unité portée dans le coffre. ''{objet: bille, activer: boite}'' active une déclaration absente sans consommer l'inventaire. Un champ ''salle:'' peut préciser une autre salle. Pour tester sa présence : ''si: {objet: bille, dans: boite, quantite: 1, operateur: ">="}''.
===== Règle de limite d'inventaire =====
Pour un objet, la première déclaration active qui précise une limite est retenue dans la salle courante. Si aucune ne la précise, la dernière limite rencontrée est conservée ; sinon le défaut est 1. Une référence comme ''v_capacite_v'' est relue à l'ajout. ''0'' signifie illimité. Abaisser la limite ne retire pas les unités déjà portées.