Help ! Checker la présence d'un personnage

Bonjour

Je souhaite pouvoir poser une question à propos d’un objet à un personnage
Sur le code suivant je parviens à contrôler si le Player possède l’objet.

Mais je souhaite rajouter la notion de contrôle de présence du personnage dans une pièce prédéfinie ( par exemple BUREAU)
Malgré mes nombreuses tentatives ( J’ai dû passer deux-trois heures à triturer le code), je n’y parviens pas.

d’ou ma question : Comment modifier ce code en faisant varier la réponse en fonction
1/ que le joueur possède ou non l’objet
2/ Que e personnage (dubonnet) soit ou non dans le BUREAU

si Player possède l’objet et Dubonnet est dans le Bureau = say « Dubonnet vous répond un bel objet en or »
si Player possède l’objet et Dubonnet est n’est pas dans le Bureau = say « Mr Dubonnet n’est pas ici »

si Player ne possède pas l’objet et Dubonnet est dans le Bureau = say « Vous n’avez pas l’objet et Mr Dubonnet n’est pas ici »
si Player ne possède pas l’objet et Dubonnet n’est pas dans le Bureau = say « Vous avez l’objet mais Mr Dubonnet n’est pas ici »

Voici mon code qui ne fonctionne pour l’instant qu’avec le contrôle de possession de l’objet :

Instead of asking Dubonnet about "bijou/pendentif" : If the player is carrying the bijou begin; say "Dubonnet vous répond un bel objet en or."; Otherwise if the player is not carrying the bijou; say "vous n'avez pas l'objet"; end if.

Désolé pour mes nombreuses questions , mais plus l’on utilise I7 plus l’on crée des événements complexes…

Théoriquement si Dubonnet n’est pas présent, on ne peut même pas lui poser une question, non ?

Sinon puisque tu as compris le principe des IF etc, rien ne t’empêche d’empiler les conditions, du genre :

Instead of asking Dubonnet about "bijou/pendentif" : If the player is carrying the bijou and Dubonnet is in Bureau begin; say "Dubonnet vous répond un bel objet en or."; otherwise if the player is carrying the bijou and Dubonnet is not in Bureau; say "Dubonnet n'est pas là"; otherwise if the player is not carrying the bijou and Dubonnet is in Bureau; say "Vous n'avez pas l'objet"; otherwise if the player is not carrying the bijou and Dubonnet is not in Bureau; say "Vous n'avez pas l'objet et Dubonnet n'est pas là"; end if.

Si Dubonnet n’est pas présent, I7 retourne le message standard " Je ne vois rien de tel ici, à moins que…

Qui n’est pas le message que je souhaite faire apparaître.

Je vais essayer avec tes imbrications conditionnelles.

Merci

J’ai essayé avec le code que tu propose.

Si Dubonnet n’est pas dans la pièce ( et que l’on possède ou non le bijou) , on retrouve systématiquement le message
« Vous ne voyez rien de tel, à moins que cela ne soit sans grande importance. »

Alors que d’après le code, il devrait afficher : « Vous n’avez pas l’objet et Dubonnet n’est pas là »

!!? Bizarre…

Non, c’est normal, tu ne peux pas, par défaut, faire une action sur un objet qui n’est pas présent dans la room.

Pour être plus précis, lors de l’analyse de la commande, Inform vérifie si les mots de la commande correspondent à des objets in scope (en gros, les objets visibles). Si c’est le cas, alors l’action a lieu. Sinon, on voit le message « vous ne voyez rien de tel » et l’action ne se lance pas (parce que l’action demande un objet dans sa commande, mais Inform n’en a trouvé aucun).

Donc les instead of asking Dubonnet ne se lancent pas quand il n’est pas là, parce que l’action correspondante n’a jamais eu lieu (en fait, aucune action n’a eu lieu).

Il y a plusieurs solutions à ton problème. Le plus simple est de l’ajouter manuellement au scope (§18.29) :

After deciding the scope of the player when the location is bureau: place Dubonnet in scope.

Le problème, c’est que ça autorisera tout un tas d’autres actions sur Dubonnet, comme examiner. Si ce n’est pas souhaitable, alors il faut peut-être spécifier :

After deciding the scope of the player when asking it about and Dubonnet is in bureau: place Dubonnet in scope.

[Il se peut que ça ne fonctionne toujours pas, parce que l’action de demander nécessite probablement aussi que l’objet soit touchable et pas juste visible. Dans ce cas il faut ajouter une règle reaching inside/outside, j’imagine (§12.18).]

Mais ça risque d’emmêler le joueur. Pourquoi pourrait-on mentionner Dubonnet dans sa commande quand il n’est pas là, mais seulement dans le bureau ? Et seulement quand on demande quelque chose ? Et aussi, il y a de grandes chance qu’un joueur n’essaie de toute façon pas de demander quelque chose à Dubonnet s’il n’est pas là puisqu’il n’est justement pas là, à moins que ton jeu donne une bonne raison à cela.

Si c’est important pour l’histoire de dire qu’il n’est pas là, alors il y a d’autres solutions, comme ajouter une remarque dans la description de l’endroit : « Vous êtes dans le bureau et vous avez l’objet mais, malheureusement, Dubonnet n’est pas là. »

Donc dans ce cas-ci je te déconseillerai de mettre Dubonnet in scope, sauf si tu as une raison particulière.

Oui effectivement, il semble que j’ai cherché une complication inutile.
Je pars du principe que si le personnage n’est pas mentionné dans le lieu, il n’y a aucune raison pour que le joueur lui pose une question !

Merci pour l’explication.

Stéphane

Parfois il est utile qu’un objet qui n’est pas censé être là existe sous une forme visant à répondre au joueur qui aurait une bonne raison d’essayer d’interagir avec.

Exemple :
« Au moment où vous arrivez, une petite souris court se réfugier dans son trou »

Là, il est fréquent que le joueur essaie d’interagir avec la souris, même si elle vient de partir. Dans ce cas de figure il peut être bon de laisser l’objet (ou d’en mettre un autre qui lui ressemble) et d’intercepter toutes les actions concernant la souris pour les rediriger vers un message plus précis que « Vous ne voyez rien de tel ». Par exemple « La souris a maintenant disparu. »