Autor |
Nachricht |
< implizite Aktionen nicht ausgeben |
|
Verfasst am:
Mi, 16 März 2011 - 10:59
|
|
|
Wasserträger

Anmeldungsdatum: 01.02.2011
Beiträge: 81
Wohnort: Leipzig
|
|
Hallo,
hier ein weiteres Problem, das ich nicht durch die Dokumentation lösen konnte:
Wie kann man in Ausgaben der Art
> iss apfel
(dazu hebst du den Apfel erst auf)
Mjamm, der schmeckt lecker!
die Meldungen in Klammern unterdrücken? Ich habe festgestellt, dass dies selten wirklich hilfreich ist, den technischen Charakter des Spiels betont und sogar leicht zu Fehlern führen kann. Hätte ich im obigen Beispiel den printed name als "Baum" definiert und als Vokabular Apfel, Baum, Jonagold, Elstar etc., wäre
> iss apfel
(dazu hebst du den Baum erst auf)
nicht sehr schön. Natürlich wäre es hier besser, Baum und Apfel als getrennte Objekte anzulegen, aber in kleinerem Maß können sich immer Fälle ergeben, wo die Ausgabe nicht so gut zum eingegebenen Wort passt. Da verzichte ich lieber auf die eingeklammerte Meldung. Auch unmögliche Aktionen können ins Absurde gezogen werden:
> schwimme
(in den dunklen Tannen)
Du kannst hier nicht schwimmen.
Auch wenn obige Ausgabe sich natürlich durch bessere Programmierung vermeiden ließe (siehe meine nächste Frage), würde es mir *als Anfänger* sicher helfen, - zumindest im fertigen Spiel - derartige Ausgaben gar nicht erst drin zu haben.
Vielen Dank
Frank _________________ www.text-abenteuer.de |
|
|
|
 |
|
Verfasst am:
Mi, 16 März 2011 - 12:24
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Die englische Doku beschreibt, was Du brauchst in Kapitel 17.32:
Rule for implicitly taking something (called target) while eating something:
--> if the target is edible, try silently taking the target; otherwise continue the activity. _________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Di, 4 Okt 2011 - 4:28
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Moin Leute,
ich hab schon wieder ne Frage, wo ich nicht weiter komme.
ich häng die hier einfach mal dran, weil sie zum Thema dazu passt, würd ich sagen.
Folgendes Prob: ich möchte gern SÄMTLICHE automatische Meldungen in Klammern aus dem Spiel schmeißen - samt der daran hängenden Aktionen.
Oder anders: ich will KEINE automatische Türöffnung, kein automatisches nehmen und vor allem: keine automatische Objektauswahl, wenn mehrere unter dem Synonym zur Auswahl stehen.
Implicite Sachen kann ich sicher mit dem Hinweis auf Kapitel 17 regeln, wenn ich mich da durchkaue, aber grad beim letzten: - automatische Objektauswahl - ich habe keine Ahnung, welche Rule oder Activitie das regelt. (Und es nervt tierisch *g*).
Gruß
Bushin |
|
|
|
 |
|
Verfasst am:
Di, 4 Okt 2011 - 10:24
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Bushin hat folgendes geschrieben: | ... und vor allem: keine automatische Objektauswahl, wenn mehrere unter dem Synonym zur Auswahl stehen. |
Bei gleichberechtigten Objekten wird standardmäßig nachgefragt:
Mein Testspiel hat folgendes geschrieben: | Hundesalon
Du siehst hier einen Pudel, eine Pudelfigur und einen Kamm.
>u pudel
Was meinst du, den Pudel oder die Pudelfigur? |
Die Disambiguierung in Inform ist weitegehend hard-coded. Mit "Does the player mean ..." und "Rule for deciding whether all includes ..." kann man da für bestimmte Aktionen und Objekte eingreifen, aber wie man den Vorgang komplett aushebeln kann, weiß ich nicht. (In der I6-Routine Adjudicate(), die dem Parser als Entscheidunghilfe dient, passiert eine ganze Menge; Adjudicate durch einen Dummy, der immer false zurückgibt, zu ersetzen führt zu Fehlern.)
Vielleicht könntest Du ja mal ein konkretes Beispiel angeben, wo in Deinem Spiel nicht disambiguiert werden soll.
Grüße,
Christian |
|
|
|
 |
|
Verfasst am:
Mi, 5 Okt 2011 - 1:33
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Grüß Dich.
Die Nachfrage seitens des Parsers ist ja in Ordnung. Könnte mir auch nicht vorstellen im Augenblick, dass man bei einem größerem Spiel ohne Nachfragen auskommt.
Ich beschreib mal das konkrete Problem, wo mir das aufgefallen ist: Meine Vorstellung war, ein "Knowledgesystem" zu entwickeln. Der Spieler hat dabei die Möglichkeit, seine Spielfigur über einige Themen auszufragen.
Beim ersten Rumspielen kam dabei das raus:
Zitat: | A thing have some text called knowledge. The Knowledge is usually "[one of]Dazu weiß ich im Augenblick nichts zu sagen, was Dir weiterhelfen kann.[or]Hmmm...dazu fällt mir im Augenblick nichts Wichtiges ein.[or]...[or]...[or]....[at random]".
Declaring is an action applying to one visible thing. Understand "erklaer [any thing]", "erklaer mir [any thing]", "erzaehl ueber [any thing]", "erzaehl mir ueber [any thing]" as declaring.
Report declaring:
say "[knowledge of the noun]".
The Symbol is a neuter thing. Printed Name is "Symbol". Understand "Symbol" as symbol. The Knowledge of the symbol is "Symbole bla blub schwall..."
Mathe is a female thing. Printed Name is "Mathematik". Understand "Mathe", "Mathematik" as mathe. The Knowledge of mathe is "Mathematik...ah ich habe es sowas von dick gehabt in der Schule."
[...usw.] |
Sodale. Man wirds nicht glauben, aber das hat ziemlich gut funktioniert: Die Nachfrage auf Mathe ("Erzähl mir über Mathe") ergab zum Beispiel 1 a Auskunft.
Problem waren allerdings die Symbole. Weil: es gibt in einigen Räumen des Spiels andere Objekte, die auch "symbole" als Synonym hinterlegt hatten.
Was macht der Parser? Statt in diesem Fall den Spieler vor die Wahl zu stellen - a) Zitat: | "Was meinst Du, die Symbole oder die Wand mit den Symbolen" | - passiert b):
Zitat: | >Erklär mir symbole
(die Symbole an der Wand)
Dazu weiß ich im Augenblick nichts zu sagen, was Dir weiterhelfen kann. |
Und das ist einfach mies :-)
Verantwortlich dafür scheint die Activity "clarifying the parser´s choice of something" zu sein. Soviel hab ich schon mal rausbekommen. Aus irgend einem Grund springt diese Regel offensichtlich an Stelle der "Does the player mean" - Activity ein.
Warum ist mir schleiherhaft, aber scheinbar haut das nicht richtig mit der "any thing" Lösung aus obigem Probier - Code hin.
Eine wirkliche Lösung wäre für mich:
- entweder die Clarifying - Regel ausknipsen (die braucht eh kein Mensch *g* zumindest ich nicht) oder
- es hinbekommen, dass der parser eben NICHT selbst wählt, was gemeint ist sondern stattdessen nachfragt
(als dritte Möglichkeit wäre für mich vorstellbar: die Claryfyingregel so modifizieren, dass der Text - "(die Symbole an der Wand)" - wenigstens in einem anderem (nämlich meinem eigenen) Schriftbild ausgegeben wird. So als grundsätzliche Möglichkeit. Hat aber jetzt nichts mit dem speziellen Problem hier zu tun sondern eher allgemein.)
Die "one visible thing / [any thing]" - methode hab ich inzwischen wieder gestrichen und eine einfachere Lösung geschrieben. Diese bedingt, dass das Objekt im Raum ist, aber damit ist natürlich das Erzählen über Objekte, die eigentlich nichtphysisch sind - mathe oder Physik zum Beispiel - erst mal vom Tisch. Und insgesamt ist das nur eine Halblösung.
Naja, mal sehen ob damit was anzufangen ist.
Gruß
Frank |
|
|
|
 |
|
Verfasst am:
Mi, 5 Okt 2011 - 8:47
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Bushin hat folgendes geschrieben: | Die Nachfrage seitens des Parsers ist ja in Ordnung. Könnte mir auch nicht vorstellen im Augenblick, dass man bei einem größerem Spiel ohne Nachfragen auskommt. |
Schöner wär's natürlich, wenn der Autor von vornherein versucht, Mehrdeutigkeiten zu vermeiden. Das ist bei der Verwendung von [any thing] natürlich schwierig, lässt sich für Dinge, die "in scope" sind, aber mittels der "Does the player mean ..."-Regeln ganz gut in den Griff bekommen: In vielen Zusammenhängen ist durch Weltwissen dem Spieler klar, was gemeint ist (dem Spiel muss man da etwas auf die Sprünge helfen). Dass an einem Souvenirstand vor dem Eiffelturm der Spieler den kleinen Messing-Eiffelturm und nicht das Riesending hinter dem Stand kaufen will, ist klar; da käme eine Nachfrage à la "Was willst du kaufen, den kleinen Eiffelturm aus Messing oder den riesigen Eiffelturm?" ziemlich seltsam (es sei denn, der Spieler ist ein Multimilliardär mit einer Sammelleidenschaft für Original-Wahrzeichen aus aller Welt).
Vielleicht ist ja die folgende Erweiterung für Deine Zwecke geeignet:
http://inform7.com/extensions/Jon%20Ingold/Disambiguation%20Control/index.html
Damit bekommt der Autor etwas mehr Kontrolle über die Disambiguierung. Es soll weniger geraten und mehr nachgefragt werden.
Edit: Die Erweiterung "Disambiguation Control" ist leider noch nicht kompatibel mit der deutschen Übersetzung, da Teile des Parsers, die in GerX verändert werden, von DC erneut verändert werden. Da müsste eine komplette Anpassung an GerX erfolgen.
Es gibt übrigens auch eine Erweiterung fürs Wetter:
http://inform7.com/extensions/Ish%20McGravin/Weather/index.html
(die ist möglicherweise nicht mehr ganz aktuell) |
|
|
|
 |
|
Verfasst am:
Fr, 7 Okt 2011 - 6:41
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Servus Christian,
*g* mit dem Eifelturm hast Du natürlich recht.
Das mit "Any Thing" hab ich inzwischen erst mal gestrichen, weil es doch mehr Probleme macht als sinnvolles zu bewirken. Vielleicht ne gute Lösung für speziellere Knackpunkte aber so als Allgemeinlösung empfind ich das inzwischen als doch recht ungünstig.
"Mein" Wetter läuft inzwischen übrigens hervorragend :) Komplett mit Zufallsberechnung, Anpassung der Backdrop Descriptions, Textausgaben etc.
(Nicht dass das nen alten Hasen vom Hocker reißen wird mich als Anfänger stolzt das schon a bißerle ;) )
Gruß und schönen Tag
Frank |
|
|
|
 |
|
Verfasst am:
Sa, 8 Okt 2011 - 15:40
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Der Riese I7 steht leider auf den tönernen Füßen des I6-Parsers. Das Token [any thing] wird in I6 nach dem Schema scope=Routine abgebildet:
Code: | [ ExplainScope x;
switch (scope_stage) {
1: rfalse;
2: objectloop (x has explicable) PlaceInScope(x);
rtrue;
3: "Dafür gibt es keine Erklärung.";
}
];
[ mir;
if (NextWord() ~= 'mir') wn--;
return GPR_PREPOSITION;
];
Extend 'erzaehl' 'erklaer'
* mir scope=ExplainScope -> Explain
* mir 'ueber' scope=ExplainScope -> Explain
;
|
In Stufe 2 der Routine werden Objekte "in Scope" gebracht. Nur diese Objekte werden untersucht. Durch den Rückgabewert wird festgelegt, ob ausschließlich die dort in den Scope verschobenen Objekte berücksichtigt werden (true) oder ob diese Objekte zusätzlich zum regulären Scope, d.h. zu den im Moment sichtbare Objekten, untersucht werden sollen (false).
In Stufe 3 wird eine maßgeschneiderte Fehlermeldung ausgegeben, wenn kein Objekt gefunden wurde. Diese Meldung ist analog zur vagen Fehlermeldung "Du siehst so etwas hier nicht", die bei Standardaktionen ausgegeben wird. Diese Meldung muss vage sein, weil ja kein Objekt gefunden wurde, also auch kein Objektname ausgegeben werden kann. (Das stört manchen, ist aber mit dem Inform-Parser ohne größere Eingriffe nicht anders möglich.)
Wenn die Eingabe auf mehrere Dinge im Scope passt, wird wie üblich nachgefragt.
Ich habe einmal versucht, das Ganze in I7 abzubilden: (Das heißt, der I6-Code oben ist eigentlich nach dem I7-Code unten entstanden)
Section - Explaining
A thing can be explicable or inexplicable.
A thing has some text called explanation.
Explaining is an action applying to one visible thing. Understand "erklaer [any explicable thing]", "erklaer mir [any explicable thing]", "erzaehl ueber [any explicable thing]", "erzaehl mir ueber [any explicable thing]" as explaining.
Report explaining: say "[Explanation of noun][line break]"
Ignoring is an action applying to one topic. Understand "erklaer [text]", "erklaer mir [text]", "erzaehl ueber [text]", "erzaehl mir ueber [text]" as ignoring.
Report ignoring: say "Dafür gibt es keine Erklärung."
Weil ich keinen Weg gefunden habe, die Fehlermeldung zu beeinflussen, habe ich eine zusätzliche Aktion 'ignoring' eingeführt, die mit einem Topic-Token nicht verstandene Eingaben für 'explaining' abfängt. (Wenn ich diese Pseudo-Aktion herausnehme kommt beim Erklären von nicht erklärbaren Objekten die Meldung "Dieses Hauptwort macht in diesem Zusammenhang keinen Sinn", was tatsächlich etwas verwirrend ist - welches Hauptwort denn?)
Das System funktioniert ganz gut. Man kann mit einem Attribut steuern, wozu es eine Erklärung geben soll und wozu nicht. Mit "Does the player mean" kann man auch Objekte bevorzugen. Wenn sich allerdings die Eingabe auf mehrere erklärbare Objekte bezieht, von denen eins sichtbar ist und die anderen nicht, wird automatisch das sichtbare Objekt bevorzugt, selbst wenn man alle erklärbaren Objekte mit "Does the player mean" gleich bevorzugt. (Ich nehme an, dass die normalen Regeln den besonderen nachgeschaltet werden, wenn diese nicht eindeutig ein Objekt finden können. Wenn ich aber in der Definition von explaining "applying to one visible thing" in "applying to one thing" abändere, bekomme ich Probleme.)
Mein Testbeispiel:
Section - The Burial Chamber
The junction is a room. The printed name is "Gabelung". The description is "Du stehst an einer Kreuzung im Grabmal Konstantins des Kosmischen. Zwei Gänge führen nach Norden und Osten. Der Eingang im Südwesten ist verschüttet."
Instead of going southwest in the junction, say "Der Eingang ist verschüttet."
The sun chamber is north of the junction. The printed name is "Raum der Sonne". The description is "Der Raum öffnet sich nach Norden hin zu einer Wand, auf der ein Sonnensymbol zu sehen ist. Der einzige Ausgang führt zurück nach Süden."
The sun symbol is neuter scenery in the sun chamber. The printed name is "Sonnensymbol". The description is "Eine fast zwei Meter große Sonne mit vielen spitzen Strahlen ist auf die Wand gemalt." The explanation is "Die Sonne war im Reich Konstantins des Kosmischen das Symbol für Größe, Wärme und Herrlichkeit." Understand "Sonne", "Symbol", "Wand", "Strahlen", "spitz", "gemalt" as sun symbol.
After going to the sun chamber: Now the sun symbol is explicable; continue the action.
The serpent chamber is east of the junction. The printed name is "Raum der Schlange". The description is "Der Raum öffnet sich nach Osten hin zu einer Wand, auf der das Symbol einer Schlange zu sehen ist. Der einzige Ausgang führt zurück nach Westen."
The serpent symbol is neuter scenery in the serpent chamber. The printed name is "Schlangensymbol". The explanation is "Die Schlange war im Reich Konstantins des Kosmischen das Symbol für Gemeinheit und Verspätungen im öffentlichen Personennahverkehr." The description is "Eine große, grüne Schlange ziert die Wand." Understand "Schlange", "Symbol", "Wand", "gross", "gruen", "gemalt" as serpent symbol.
After going to the serpent chamber: Now the serpent symbol is explicable; continue the action.
The diary is a neuter thing in the serpent chamber. "In einer Ecke des Raums liegt ein altes Büchlein." The printed name is "Tagebuch". The description is "Dieses alte Büchlein ist das Tagebuch von Professor Nofret! Das meiste ist durch Feuchtigkeit unleserlich geworden, aber auf der vorletzten Seite schreibt er: 'Ich hebe heute den Thronsaal Konstantins gefunden. In der langen Halle war das Symbol der Feder überall zu finden.'" Understand "nass", "feucht", "unleserlich", "buch", "buechlein", "tagebuch", "aufzeichnungen" as diary.
The quill symbol is neuter scenery. The printed name is "Federsymbol". The explanation is "Die Feder ist ein Symbol für das Schrifttum und das Beamtenwesen." Understand "Feder", "Symbol" as quill symbol.
After examining the diary: Now the quill symbol is explicable.
Konstantin is an explicable man. The printed name is "Kaiser Konstantin". Understand "Kaiser", "Konstantin", "der", "Kosmische" as Konstantin. The explanation is "Kaiser Konstantin, genannt der Kosmische, wurde im Jahr 596 der astralen Zeitrechnung geboren. er regierte von 632 AZ bis zu seinem Tod, der ihn 666 AZ ('das verflixte Jahr') auf einer Reise ereilte. Er hinterließ sieben Frauen, neun Nebenfrauen, 53 Kinder und 729 sogenannte 'erklärbare Symbole'."
Section - Testing
Test me with "erkläre symbol / o / erkläre symbol / lies buch / erkläre symbol / w / erkläre symbol / feder / erklär mir kaiser".
_________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Mo, 10 Okt 2011 - 7:55
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Wie cool is das denn ^^ danke!
Ich werd als nächstes mal ausprobieren, Tabellen zu benutzen für die "Erklär mir" - Nachfragen. Ich stell mir das etwa so vor, dass damit einfach Text-Strings (ala "Physik") angelegt werden.
Bei ">Erklär mir Physik" wird dann der entsprechende zugeordnete Text in der Tabelle ausgeschrieben. Das wird ja irgendwie machbar sein. Zumindest hab ich dergleichen bei Emily Short gesehen.
Noch geschickter wär natürlich, statt "Physik" ein Token "[physik]" zu schreiben und das mit "Understand "diverse denkbare Synonyme" as "[physik]" zu definieren. Die Texte für das Token sollten dann über eine Tabelle abrufbar sein (hoffe ich doch). Aber das sind nur theoretische Ansätze, da muss ich erst mit rumspielen, hoffe aber, dass das funktioniert.
Schönen Tag
Frank |
|
|
|
 |
|
Verfasst am:
Mo, 10 Okt 2011 - 11:00
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Sehr schönes Beispiel von Martin.
Martin hat folgendes geschrieben: | Weil ich keinen Weg gefunden habe, die Fehlermeldung zu beeinflussen, habe ich eine zusätzliche Aktion 'ignoring' eingeführt, die mit einem Topic-Token nicht verstandene Eingaben für 'explaining' abfängt. |
Wenn man sich die Hilfsaktion Ignoring sparen möchte, die lediglich eine Fehlermeldung ausgibt, kann man auch Folgendes schreiben:
Understand "erklaer [text]", "erklaer mir [text]", "erzaehl ueber [text]", "erzaehl mir ueber [text]" as a mistake ("Dafür gibt es keine Erklärung.") |
|
|
|
 |
|
Verfasst am:
Mo, 10 Okt 2011 - 17:33
|
|
|
Experte

Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
CristianB hat folgendes geschrieben: | Wenn man sich die Hilfsaktion Ignoring sparen möchte, die lediglich eine Fehlermeldung ausgibt, kann man auch Folgendes schreiben: ... |
Das ist ja elegant! Und wenn man unter Zeitdruck etwas nicht Erklärbares erklärt haben will, spart es auch noch einen Spielzug.
Bushin hat folgendes geschrieben: | Ich werd als nächstes mal ausprobieren, Tabellen zu benutzen für die "Erklär mir" - Nachfragen. Ich stell mir das etwa so vor, dass damit einfach Text-Strings (ala "Physik") angelegt werden. |
Grundsätzlich kann man die Erklärungen als Texte von Objekten oder in einer Tabelle, in der dann Objekten Texte zugeordnet werden, definieren, je nachdem ob man die Texte lieber kompakt auf einen Blick gebündelt oder beim jeweiligen Objekt stehen haben will.
Tabellen werden in I7 auch oft zur Konversation verwendet: Einem NPC wird eine Tabelle zugeordnet, in der dann zu jedem Thema eine Antwort steht. Bei zwei Objekten (Gesprächsparter und -thema) ist das gewiss praktisch. Man spart sich viele "Instead of asking the Oracle about the temple, say ..."-Phrasen.
Allerdings wird in I7 statt Objekten eher ein "Topic", also ein beliebiger [text] verwendet. Das hat den Vorteil, dass man sich nicht um den Scope kümmern muss. Außerdem kann man so beliebige Themen zulassen, auch extrem unisinnige. Ein Nachteil, den ich in Deinem Fall sehe, ist, dass die Vokabeln redundant sind. Wenn sagen wir mal die Understand-Phrasen der Sonne nicht mit den Topics der Sonne in der Tabelle exakt übereinstimmen, kann es zu inkonsistentem Parserverhalten kommen. Wenn beim Erklären "Sonne" nicht verstanden wird, weil in der Tabelle nur "Sonnensymbol" steht, denkt der Spieler, dass es dazu keine Erklärung gibt. Natürlich kann man beides abgleichen, aber man denkt man daran, die Tabelle zu aktualisieren, wenn man im Betatest schell ein Synonym fü das Objekt Sonne nachzieht?
Nicht umsonst heißt ein guter Grundsatz beim Programmieren DRY - Don't Repeat Yourself. Deshalb habe ich im Beispiel oben Objekte, keine "Topics" gewählt. Damit nicht alle Objekte als Thema taugen, habe ich die möglichen Objekte über das Attribut explicable eingeschränkt. Man könnte vermutlich auch nur die Objekte aus einer bestimmten Tabelle hernehmen. _________________ Every silver lining has a cloud. |
|
|
|
 |
|
Verfasst am:
Do, 13 Okt 2011 - 14:50
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Einige entnervte Tage später *g*:
die Lösung Topics über Tabellen zu definieren und die Texte auf diese Art übersichtlich zu ordnen hat mir extrem gefallen.
*ggg* nur....
Für "Erklär mir..." hat das super funktioniert. Den selben Spaß wollte ich mir gönnen für die Texte von Buchkapiteln: Ein Kapitel als Token definieren und den entsprechenden Text dazu schreiben. Ist ja auch explizit so vorgesehen: Short und auch Aikin beschreiben die Technik.
Die Tabelle und der gesamte Code wurden ordentlich compiliert. Nach Start und dem befehl ">lies Kapitel"
produzierte Inform mir dazu "Run Time Errors", die mit Tokens zusammenhingen. Ich hab stundenlang daran rum gebastelt, alles mögliche ausprobiert - keine Änderung.
Ich hab das aufgegeben und die Buchkapitel als Objekte hinterlegt. Damit klappt es super. Aber ärgerlich ist das schon *grmpf*
Gruß aus München
Frank |
|
|
|
 |
|
Verfasst am:
Do, 13 Okt 2011 - 15:15
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Der Murks kann sich überall verbergen. Hast Du ein Beispiel zum Reproduzieren der Runtime-Fehler, das Du hier posten magst?
Es könnte sein, dass Du die Grammatik für "lies/les" erst komplett löschen musst, da das Verb schon in anderen (komplexen) Satzmustern benutzt wird (z.B. für consulting it about). Und da wir dem Parser noch nicht sagen können, welche Satzmuster er bevorzugen soll, könnte das zu Problemen führen.
Understand the command "lies" as something new. Understand the command "les" as something new.
Und dann Deine neuen Definitionen für die Verben "lies" und "les". |
|
|
|
 |
|
Verfasst am:
Sa, 15 Okt 2011 - 14:26
|
|
|
Wasserträger

Anmeldungsdatum: 21.09.2011
Beiträge: 48
Wohnort: München
|
|
Hallo Christian,
also ich hab das jetz noch mal zamgebaut:
Zitat: | "Buchtest IV" by Frank
include german by team gerx.
The Konverenzraum is a room.
Table of book
Topic Eintrag
"Element 1" "Feuer"
"Element 2" "Luft"
"Element 3" "Wasser"
"Element 4" "Erde"
"Element 5" "Geist"
"Inhalt" "Element 1[line break]Element 2[line break]Element 3[line break]Element 4[line break]Element 5"
The Book is a neuter thing. The description is "Da steht ein Haufen Zeug drin. Es gibt ein Inhaltsverzeichnis". The printed name is "Buch". Player is carrying the book. Understand "Buch" as the book.
Instead of consulting the book about a topic listed in the Table of book, say "[eintrag entry]". |
Das hier ergibt der Testdurchlauf:
Zitat: |
Buchtest IV
Konverenzraum
>schau inhalt nach
(in dem Buch)
Element 1
Element 2
Element 3
Element 4
Element 5
>lies element 1 nach
(in dem Buch)
Feuer
>lies über element 1 nach
(in dem Buch)
Feuer
>lies über element 1 im buch nach
Feuer
>lies im buch über element 1 nach
** Library error 13 (0,0) **
** A 'topic' token can only be followed by a preposition **
*** Run-time problem P37: Low level error.
In dem Buch findest du nichts Interessantes darüber. |
Das ist Informs Komentar zu dem Fehler:
Zitat: | P37 - Low level error
Most problems are detected when Inform translates the source text, but this is one of the exceptions, a "run-time problem" which emerges only during play.
This indicates that some low-level error has occurred in the template layer, a body of Inform 6 code used to provide run-time support for Inform 7 story files. Errors like this really shouldn't happen, but might occur if you are hacking with the template layer, or if there is a bug in Inform. If you don't seem to be doing anything you shouldn't, please report this to the authors of Inform as a possible bug. |
Ich musste da jetzt erst mal ne Zeit lang rumprobieren, bis der Fehler überhaupt wieder aufgetreten ist, dachte schon ich hab Hallus *kopfschüttel*, weil erst mal alles tadellos funktioniert hat.
Inzwischen glaub ich hab ichs: die Crux scheint in der Formulierung ">lies im Buch über Element 1 nach" zu liegen. Alles andere funktioniert ja scheinbar.
Ein weiteres Prob mit Tokens in dem Zusammenhang scheint zu sein:
Zitat: | Buchtest IV
Konverenzraum
>schau im buch über element 1 nach
Feuer
>schau element 1 im buch
So etwas kannst du hier nicht sehen.
>schau im buch element 1
So etwas kannst du hier nicht sehen. |
Das kann ich natürlich auch nicht so lassen. Aber da examining nicht mit Tokens zusammenpaßt, bleibt da wahrscheinlich nur, die lesbaren Einträge als "Thing" zu markieren, vielleicht in einer weiteren Column, die dann mit dem jeweiligen Eintrag korrespondieren. Mal sehen.
Viele Grüße
Frank
P.s. hm...je nach dem wie die Gepflogenheiten hier sind, aber aus Gründen der Übersichtlichkeit rechtfertigt das fast ein separates Thema, ne? Mea Culpa, fürcht ich... |
|
|
|
 |
|
Verfasst am:
Sa, 15 Okt 2011 - 17:11
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Der Tracer mit Level 2 hat folgendes geschrieben: | [line 8 * Routine(23495) 'in' Routine(23501) noun 'ueber' topic Routine(23444) -> Consult]
[line 8 token 1 word 2 : Routine(23495)]
[line 8 token 2 word 2 : 'in']
[line 8 token 3 word 3 : Routine(23501)]
[line 8 token 4 word 3 : noun]
[line 8 token 5 word 5 : 'ueber']
[line 8 token 6 word 6 : topic]
** Library error 13 (0,0) **
** A 'topic' token can only be followed by a preposition **
*** Run-time problem P37: Low level error.
[line 8 token 7 word 9 : Routine(23444)]
[line 8 token 8 word 9 : END]
[Line successfully parsed]
In dem Buch findest du nichts Interessantes darüber. |
Das könnte ein Fehler in GerX sein. Wir haben Definitionen von Satzmustern in denen auf ein [topic]-Token ein [nach]-Token folgt, was eine GPR ist, die ein optionales 'nach' ermöglicht. Offenbar darf nach einem Topic aber nur 'nach' stehen und keine GPR, was mir nicht bekannt war. Muss ich aber erstmal genauer testen, ob die Standarddefinitionen mit [text] [nach] geändert werden müssen.
Edit: Probier doch mal bitte folgende Testversion aus, in der ich die betreffenden zwei Zeilen geändert habe. Danke!
http://dl.dropbox.com/u/2691966/German_3-111015--TEST.i7x.zip |
|
|
|
 |
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
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.
|
|