Je pense que tu peux le faire avec Extend sur le verbe mettre.
Un truc du style :
[code]Extend « mettre » first
noun ‹ dans › container → Mettre;[/code]
Et un MettreSub qui effectue le travail voulu.
[ MettreSub;
move noun to second;
print "Vous déplacez ", (the) noun, " dans ", (the) second, ".";
rtrue;
];
Bon bien sur faut développer un peu sinon tous les objets pourront aller dans un container.
Tu peux par exemple rajouter if (noun ofclass deplacable), ou un truc du style.
oui cela parait bien comme ça.
Pour ne pas avoir de problème avec les autres objets, tu peux ajouter un attribut « transferable » ou « versable » ce qui te permettra par exemple de verser les corn flakes dans le bol, et ce type d’objets uniquement, sans que le joueur ait à les manipuler.
Pour les smileys, j’en avais fait avec une petite tête de grenouille, c’est un peu petit, mais au moins ça change.
Je vais effectivement rajouter un test sur les attributs, sinon je risque d’avoir des surprises.
Euhhh… Comment on rajoute un attribut ? Merci.
Tant que j’y suis, je souhaite dans un bout de code faire en sorte de déplacer un objet dans le lieu où se trouve déjà un objet. J’ai tenté :
move biduleadeplacer to machin.found_in ;
Mais ça n’a pas l’air de marcher… j’ai fait afficher directement machin.found_in, il me renvoie 0…
J’avais essayé avec machin.location mais ce ne doit pas être la bonne propriété… si je ne me trompe pas, location est bien l’endroit où est le joueur ?
Avec la commande tree en mode debug, les lieux (et les objets) sont suivis d’un numéro. Dois-je utiliser cela alors ? Apparemment, tout est stocké sous forme numérique…
désolé, j’avais pas les réponses sous la main quand j’ai vu ton message l’autre fois (mes connaissances en inform6 sont un peu rouillées), et j’avais oublié le message ensuite.
Je ne sais pas s’il existe un moyen simple de connaître le lieu dans lequel est un objet, notamment parce qu’un objet peut être à plusieurs endroits à la fois avec found_in. J’espère que tu ne déplaces pas d’objets vers des objets présents simultanément en plusieurs endroits sinon ça risque de compliquer pas mal les choses.
Ce que je ferais c’est partir du modèle objet, et chercher l’objet qui contient l’objet cible (ça peut être un lieu s’il y est directement, mais aussi un conteneur). Il existe sûrement une fonction pour obtenir le parent direct d’un objet, sinon il faut boucler sur tous les objets de type lieu, identifiés par une classe Lieu par exemple, avec objectloop(x ofclass Lieu) et tester s’ils contiennent directement ou indirectement la cible (soit avec « in », qui n’est pas récursif, soit avec IndirectlyContains qui est récursif, fonctionne donc même s’il y a imbrication)
Par contre, le coup des objets m’a l’air religieusement compliqué. Je vais faire autrement et tenter de contourner le problème.
Pour cela, j’ai juste besoin d’une précision : les conditions ifs prennent-t’elle en compte les parenthèses ? J’ai bien parcouru le DM4, mais je n’ai pas obtenu de réponse claire…
L’action à intercepter sur l’échelle n’est pas GoUp mais Enter (un coup d’oeil sur la définition du verbe en question dans FrenchG.h le montre).
GoUp c’est si on tape « monter » seul, sans objet.
Pour ajouter des synonymes à un verbe je ne sais pas si c’est facilement réalisable. Le plus simple est peut-être de définir le nouveau verbe avec la même grammaire que son synonyme (grammaire à copier depuis renchG.h)
ah oui effectivement. Il faudrait presque tester si le parent est un container, si c’est le cas, on prend son parent, etc.
C’est plus simple dans inform 7 → move player to the location of trucmuche.
Bon ça avance mais j’ai encore des problèmes… (pensez à faire des sauvegardes d’ailleurs quand vous codez !!)
Je cherche à modifier le message qui s’affiche lorsque le joueur gagne ou pert le jeu. J’ai ajouté la sub suivante, mais elle ne marche pas… (« Expected routine name but found DeathMessage »). Je l’ai prise dans le DM4.
[ DeathMessage;
if (deadflag == 1)
print "You have been captured";
];
Existe-il une limitation au niveau de la longueur maximale (en caractères) d’une ligne de code I6 ? J’ai en effet une ligne un peu longue qu’Inform ne veut pas compiler. Il me renvoie une erreur du type « Bare property. self.prop intented ? »… C’est juste une ligne de la forme :
print « blabla […] fin de blabla »;
Je vais tout de même revérifier les lignes d’avant, on ne sait jamais…