Geschrieben um 17:54 am 13.10.2006 | Zitat | Editieren | Löschen | |
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:
|
Geschrieben um 10:05 am 14.10.2006 | Zitat | Editieren | Löschen | |
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
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:
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
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 | |
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:
|