Forum moved to if-forum.org
Autor Nachricht
<  Tarzan, wer ist Jane?
ChristianB
BeitragVerfasst am: Fr, 13 Okt 2006 - 16:54  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

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:
Code:
Class   NPC
  with  name 'person',
        orders [;
          WhatIs:
            "Wenn du ", (den) self, " zu etwas befragen willst,
             benutze bitte die Form ~Frage ", (den) self, " nach
             <etwas>~.";
            ! <<Ask self second>> ???
            ! <<Ask self noun>> ???
        ],
   has  animate;

Verb 'wer' 'was' 'wo'
    * 'ist'/'bist'/'bin'/'sind' topic  -> WhatIs
    ;

[ WhatIsSub;
    "Finde es heraus.";
];

Anstelle der ungelenken Ansage soll der Befehl einfach umgeleitet werden, aber die Übergabe des Topics funktioniert nicht. <<Ask Tarzan 'jane'>> ist erlaubt und funktioniert auch, mit einer Variablen klappt es nicht. Hm, wer weiß, wie’s geht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Sa, 14 Okt 2006 - 9:05  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

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

    if (action == ##Ask or ##Tell or ##Consult) ...

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:

Code:

Class   NPC
  with  name 'person',
        orders [ next;
          WhatIs:
            wn = consult_from;
            next = NextWord();
            <<Ask self next>>;
        ],
   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
Code:

    <<Ask self (NextWord())>>;

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?)
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Sa, 14 Okt 2006 - 15:39  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

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:

Code:
Class NPC
  with  name 'person' 'f.' 'mensch' 'm.',
        changing_gender,
        orders [;
          WhatIs:
            wn = consult_from;
            Descriptors(); ! Artikel und so überlesen...
            <<Ask self NextWord()>>;
        ],
   has  animate;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05