Help ! Checker la présence d'un personnage

Pour discuter des langages que nous utilisons pour réaliser nos jeux : problèmes, solutions, suggestions...

Modérateurs: Stormi, Otto Grimwald

Help ! Checker la présence d'un personnage

Messagepar swiart2 le Mar Mai 14, 2019 10:25 am

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 :

Code: Tout sélectionner
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...
Blog : http://www.inkypinky.blog/
Mes jeux en téléchargement, des articles sur le FI et l'écriture
swiart2
Celui qui attend à l'affût
 
Messages: 131
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Help ! Checker la présence d'un personnage

Messagepar StephaneF le Mar Mai 14, 2019 4:11 pm

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 :

Code: Tout sélectionner
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.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 536
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Help ! Checker la présence d'un personnage

Messagepar swiart2 le Mar Mai 14, 2019 8:28 pm

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
Blog : http://www.inkypinky.blog/
Mes jeux en téléchargement, des articles sur le FI et l'écriture
swiart2
Celui qui attend à l'affût
 
Messages: 131
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Help ! Checker la présence d'un personnage

Messagepar swiart2 le Mar Mai 14, 2019 8:37 pm

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..
Blog : http://www.inkypinky.blog/
Mes jeux en téléchargement, des articles sur le FI et l'écriture
swiart2
Celui qui attend à l'affût
 
Messages: 131
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Help ! Checker la présence d'un personnage

Messagepar StephaneF le Mar Mai 14, 2019 9:51 pm

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.
Avatar de l’utilisateur
StephaneF
Grand Ancien
 
Messages: 536
Inscription: Jeu Déc 27, 2007 3:53 pm
Localisation: Moselle

Re: Help ! Checker la présence d'un personnage

Messagepar Natrium le Mer Mai 15, 2019 7:38 pm

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) :

Code: Tout sélectionner
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 :

Code: Tout sélectionner
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.
Avatar de l’utilisateur
Natrium
Grand Ancien
 
Messages: 1147
Inscription: Mar Oct 04, 2011 11:18 pm

Re: Help ! Checker la présence d'un personnage

Messagepar swiart2 le Jeu Mai 16, 2019 2:42 pm

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
Blog : http://www.inkypinky.blog/
Mes jeux en téléchargement, des articles sur le FI et l'écriture
swiart2
Celui qui attend à l'affût
 
Messages: 131
Inscription: Ven Juil 02, 2010 10:06 pm
Localisation: Rennes

Re: Help ! Checker la présence d'un personnage

Messagepar Stormi le Ven Mai 17, 2019 10:25 am

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."
Samuel V.
Avatar de l’utilisateur
Stormi
Grand Ancien
 
Messages: 1205
Inscription: Dim Avr 16, 2006 8:07 pm
Localisation: Lyon


Retourner vers Questions techniques et aide pour votre code

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron