IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Tarzan, wer ist Jane?
AntwortenNeues ThemaNeue Umfrage

Tarzan, wer ist Jane?

Geschrieben um 17:54 am 13.10.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Eigentlich eine ganz einfache Sache, die ich da vorhabe, aber irgendwas übersehe ich wohl: Ich möchte, dass Fragen an NPCs, die in der Form PERSON, WER IST <TOPIC> gestellt werden, nach FRAGE PERSON NACH <TOPIC> umgewandelt werden.

Mein bisheriger Versuch:



  with  name 'person',

        orders &#91;;

          WhatIs&#58;

            "Wenn du ", &#40;den&#41; self, " zu etwas befragen willst,

             benutze bitte die Form ~Frage ", &#40;den&#41; self, " nach

             &lt;etwas>~.";

            ! &lt;&lt;Ask self second>> ???

            ! &lt;&lt;Ask self noun>> ???

        &#93;,

   has  animate;

Verb 'wer' 'was' 'wo'

    * 'ist'/'bist'/'bin'/'sind' topic  -> WhatIs

    ;

&#91; WhatIsSub;

    "Finde es heraus.";

&#93;;```

Anstelle der ungelenken Ansage soll der Befehl einfach umgeleitet werden, aber die Übergabe des Topics funktioniert nicht. &lt;&lt;Ask Tarzan 'jane'>> ist erlaubt und funktioniert auch, mit einer Variablen klappt es nicht. Hm, wer weiß, wie’s geht?
Geschrieben um 10:05 am 14.10.2006 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Das [topic]-Token verhält sich anders als andere "Ergebnistokens". Während [noun], [held], [multiexcept] usw. auf den Variablen noun und second abgelegt werden, werden bei [topic] nur die Variablen consult_from und consult_words gesetzt. Bei Ask und Tell wird noun bzw. second auf das erste Wort gesetzt, wenn es erkannt wird, ansonsten nicht. Der Priester-Code im DM4 benutzt nur die zweite Methode, er schaut nur auf second.

Dummerweise wird nicht bei jedem [topic] second oder noun auf das erste Wort gesetzt. Die Library enthält solch krude Zeilen wie


    if &#40;action == ##Ask or ##Tell or ##Consult&#41; ...

was das [topic]-Token etwas unintuitiv macht, da es sich bei allen anderen Aktionen nicht so verhält wie im DM4 in den Abschnitten §17 und §18 beschrieben.

Mein (nicht getesteter) Tip ist daher:


Class   NPC

  with  name 'person',

        orders &#91; next;

          WhatIs&#58;

            wn = consult_from;

            next = NextWord&#40;&#41;;

            &lt;&lt;Ask self next>>;

        &#93;,

   has  animate;

Den Wortmarker wn nach dem Parsen zu verbiegen scheint mir legal. Man könnte, glaube ich, das NextWord() auch in die doppelten spitzen Klammern setzen und sich so eine lokale Variable sparen, indem man den gesamten Unterausdruck in Klammern setzt, also


    &lt;&lt;Ask self &#40;NextWord&#40;&#41;&#41;>>;

aber das habe ich nur im FAQ gelesen und nicht getestet.

Wenn man statt [topic] die [scope=WhatIsScope]-Variante wählt, bei der nicht alles beliebige, sondern nur gültige Objektnamen geparst werden, sollte das Umlenken aber funktionieren. (Ich finde diese Methode ja eleganter. Wieso sollte man beim Fragen über bestimmte Objekte eine andere Syntax zulassen als bei jeder anderen Interaktion?)

Geschrieben um 16:39 am 14.10.2006 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Danke, Martin, so funtioniert es -- auch mit NextWord() in den spitzen Klammern. Und wieder was gelernt.

Edit: Und es geht sogar, ohne dass der zweite Ausdruck in Klammern gesetzt werden muss, also <<Ask self NextWord()>>.

Edit 2: Und es geht noch ein Tickelchen besser:



  with  name 'person' 'f.' 'mensch' 'm.',

        changing_gender,

        orders &#91;;

          WhatIs&#58;

            wn = consult_from;

            Descriptors&#40;&#41;; ! Artikel und so überlesen...

            &lt;&lt;Ask self NextWord&#40;&#41;>>;

        &#93;,

   has  animate;```
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz