Autor |
Nachricht |
< Kleine Fragen für zwischendurch ... |
|
Verfasst am:
Sa, 23 Aug 2003 - 8:56
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
Ich habe ein Problem mit einer Tür - und zwar lässt sie sich aufschließen und öffnen wunderbar, wenn ich sie abschließen möchte macht sie mir allerdings Probleme (Meldung: 'Die Tür scheint nicht ins Schloss zu passen').
So sieht's aus:
Code: | Object tuer "Tür"
with name 'tuer',
short_name "Tür",
description [;
if (location == raum)
"Eine stinknormale Tür, die vermutlich in den Flur des Hauses führt.";
else "Eine stinknormale Tür, die in einen Raum führt."; ],
before [ ks;
open:
if (self hasnt locked || schluessel notin player)
return false;
ks = keep_silent; keep_silent = true;
<unlock self schluessel>; keep_silent = ks;
return true;
lock:
if (self hasnt open) return false;
print "(Du machst zunächst die Tür zu.)^";
ks = keep_silent; keep_silent = true;
<close self>; keep_silent = ks;
return false; ],
after [ ks;
unlock:
if (self has locked) return false;
print "Du schließt die Tür auf und öffnest sie.^";
ks = keep_silent; keep_silent = true;
<open self>; keep_silent = ks;
return true; ],
found_in raum flur,
door_dir [;
if (location == raum) return s_to;
else return n_to; ],
door_to [;
if (location == raum) return flur;
else return raum; ],
with_key schluessel
has female scenery door openable lockable locked;
Object schluessel "Schlüssel" raum
with name 'schluessel' 'tuerschluessel',
dekl 1,
description "Das scheint der Schlüssel für die Tür zu sein.",
has male; |
Wer kann helfen? _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Sa, 23 Aug 2003 - 9:38
|
|
|
Wasserträger
Anmeldungsdatum: 29.08.2002
Beiträge: 60
|
|
Hm, der Fehler erscheint nur, wenn der Schlüssel nicht namentlich erwähnt wird. "schliesse tuer mit schluessel ab" funktioniert ja.
Also kann der Fehler auch auf diese Weise behoben werden:
Code: |
Object tuer "Tür"
with ...
before [ks;
open: ...
lock:
if (second == nothing) {
if (schluessel in player) second = schluessel;
else "Du hast nichts, womit du die Tür abschließen könntest."; }
...
],
has ...;
|
Bei Bedarf muss dann die else-Meldung noch angepasst werden (falls sie nur ausgegeben werden soll, wenn die Tür nicht schon abgeschlossen ist etc.). |
|
|
|
|
|
Verfasst am:
Sa, 23 Aug 2003 - 13:31
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
|
|
|
|
|
Verfasst am:
Mo, 1 Sep 2003 - 10:06
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
Folgendes:
Code: | Object massen "Menschenmassen"
with short_name "Menschenmassen",
name 'menschen' 'massen' 'menschenmassen',
description
"xxx.",
before [;
talk:
"Man schenkt dir keine Beachtung."; ],
found_in irgendwo,
has animate pluralname female;
.
.
.
[ talkSub;
if (noun == player)
"Darüber wolltest du schon immer mal mit dir gesprochen haben.";
"Dir fällt im Moment kein passendes Gesprächsthema ein."; ];
extend 'red'
* 'mit'/'zu' creature -> talk
* creature -> talk;
|
Wenn ich jetzt im Spiel 'red mit massen' eingebe, erscheint immer nur: 'Du wolltest vermutlich folgendes: "red mit die massen über..." - aber was, wie, womit?'
Leider finde ich den Fehler nicht - ist wahrscheinlich was vollkommen banales ... :roll: _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Mo, 1 Sep 2003 - 10:45
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Hi!
Ich kenne die Inform-Lib nicht so genau, aber ich vermute, dass es bei 'red' irgendwo eine Zeile gibt, die etwa so aussieht:
Code: |
Verb 'red'
* 'mit' creature 'ueber' noun -> tell
* ...;
|
Diese Zeile wird natürlich zuerst überprüft, und dann fehlt dem Parser das Gesprächsthema. Du musst Deine Ergänzungen also an den Anfang der Verbdefinition stellen. Das geht mit first:
Code: |
Extend 'red' first
* 'mit'/'zu' creature -> talk
* creature -> talk;
|
(Die zweite Ergänzung ist für Scott-Adam-Fans, oder?) _________________ Every silver lining has a cloud. |
|
|
|
|
|
Verfasst am:
Mo, 1 Sep 2003 - 11:12
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
|
|
|
|
|
Verfasst am:
Di, 16 Sep 2003 - 17:56
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
Code: |
after [ ;
wear:
"Du kletterst in den Anzug, ...";
take:
"Du nimmst den Anzug ..."; ], |
Wenn ich den Anzug anziehen will, ohne ihn vorher genommen zu haben, wird der Anzug ja automatisch genommen. Allerdings wird hier bei 'zieh anzug an' der Anzug nur genommen aber nicht angezogen. Was muss abgeändert werden, damit die Folge von 'zieh anzug an' 'Du nimmst den Anzug ... Du kletterst in den Anzug, ...' ist? _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Di, 16 Sep 2003 - 19:26
|
|
|
Abenteurer
Anmeldungsdatum: 25.08.2002
Beiträge: 298
|
|
der.Grob hat folgendes geschrieben: | Code: |
after [ ;
wear:
"Du kletterst in den Anzug, ...";
take:
"Du nimmst den Anzug ..."; ], |
|
Ich vermute mal, dass du hier die Standardreaktion überschreibst, da die Print-Anweisung ja mit einem "return true" abschließt. Vielleicht hilft das?:
Code: |
...
take: print "Du nimmst den Anzug ..."; return false; |
oder du machst alles selbst:
Code: |
take: give self worn; "Du nimmst den Anzug und kletterst hinein.";
|
Zwei improvisierte Vorschläge, die ich nicht ausprobiert habe. Also selbst versuchen! |
|
|
|
|
|
Verfasst am:
Di, 16 Sep 2003 - 19:30
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
|
|
|
|
|
Verfasst am:
Di, 16 Sep 2003 - 20:37
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
So sollte es funktionieren:
Code: |
after [ ;
wear:
"Du kletterst in den Anzug, ...";
take:
if (onotheld_mode==0) "Du nimmst den Anzug...";] |
|
|
|
|
|
|
Verfasst am:
Mi, 17 Sep 2003 - 9:13
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
kairo hat folgendes geschrieben: | Code: |
...
take: print "Du nimmst den Anzug ..."; return false; |
|
Da hatte ich wohl falsch vermutet - denn damit klappt es. Danke.
@ChrW - Deinen Code habe ich auch mal eingefügt, allerdings ohne den gewünschten Erfolg. :roll: _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Mi, 17 Sep 2003 - 9:45
|
|
|
Abenteurer
Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig
|
|
der.Grob hat folgendes geschrieben: | Da hatte ich wohl falsch vermutet... |
Hast du nicht (falls sich deine Version der Inform-Library nicht gänzlich anders verhält als meine). Der Code führt zu:
>nimm anzug
Du nimmst den Anzug ...Du trägst den Anzug jetzt bei dir.
Das ist deine Meldung + der Standardmeldung, oder?
Zitat: | @ChrW - Deinen Code habe ich auch mal eingefügt, allerdings ohne den gewünschten Erfolg. |
Nanu? Bei mir funktioniert er. Was stimmt daran nicht?
>nimm anzug
Du nimmst den Anzug...
>leg anzug weg
Fallengelassen.
>zieh anzug an
(Dazu nimmst du zuerst den Anzug)
Du kletterst in den Anzug, ...
Wenn du wirklich "Du nimmst den Anzug ... Du kletterst in den Anzug, ..." haben willst:
Code: | take:
print "Du nimmst den Anzug...";
if (onotheld_mode==0) return true; |
Das Ergebnis wäre:
>zieh anzug an
(Dazu nimmst du zuerst den Anzug)
Du nimmst den Anzug...Du kletterst in den Anzug, ...
Wozu du den Spieler doppelt darauf hinweisen willst, dass er den Anzug nimmt, ist mir zwar schleierhaft, aber du wirst schon deine Gründe haben. |
|
|
|
|
|
Verfasst am:
Mi, 17 Sep 2003 - 18:56
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
ChrW hat folgendes geschrieben: | >nimm anzug
Du nimmst den Anzug ...Du trägst den Anzug jetzt bei dir.
Das ist deine Meldung + der Standardmeldung, oder?
|
Jo, hast Recht - auf die Schnelle hatte ich nur 'zieh anzug an' getestet. Da kam dann das, was ich sehen wollte. Bei 'nimm anzug' ist das natürlich doppelt-gemoppelt. :roll:
edit: Mit dem 'if (onotheld_mode==0)' klappt das jetzt so, wie ich mir das vorstelle. Thx. Und ich habe tatsächlich meine Gründe, es so zu machen, wie ich es mache - hehe. 8) _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Sa, 20 Sep 2003 - 18:51
|
|
|
Wasserträger
Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town
|
|
Heute mal ein Problem mit GInfoG.h:
Code: |
...
life [;
Ask, tell: switch (second) {
Tvater:
"~Er war der beste Raumpilot in der ganzen Galaxis. Und listenreich im
Krieg.~";
default: "Dazu kann der gute Rassel O'Hara nichts sagen."; }; ],
...
Topic Tvater Topics
with short_name "Vater",
name 'vater' 'raumpilot',
has male; |
Anstatt meiner default-Meldung kommt nur: '[Dieses Thema überfordert mich.]'
Habe ich irgendwas übersehen? Wenn ja, was? :roll: _________________ http://www.interactive-fiction.de.vu/
http://www.pro-board.de/ |
|
|
|
|
|
Verfasst am:
Mo, 22 Sep 2003 - 9:01
|
|
|
Experte
Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München
|
|
Hmm, ich gebe einfach mal ein paar meiner Gedanken wieder, die hoffentlich weiterhelfen. Kommentare von erfahrenen Informern, die trittsicher in der deutschen Lib sind, erwünscht.
Wenn Du die normale Definition der Library benutzt, in der 'fragen' mit dem Token topic definiert wird, enthält second kein Objekt, sondern das erste Wort des Gesprächsthemas, das kein Artikel ist. (Zumindest ist dies in der englischen Lib so, die mir aber sehr nahe am Original scheint.) Also wäre Dein Code (vgl. DM4, Seite 135):
Code: |
life [;
Ask, tell: switch (second) {
'vater', 'raumpilot':
"~Er war der beste Raumpilot in der ganzen Galaxis.
Und listenreich im Krieg.~";
default: "Dazu kann der gute Rassel O'Hara nichts
sagen."; };
],
|
Die Definition des Objekts Tvater entfällt dann.
Das erklärt aber nur, warum der Vater als Gesprächsthema nicht gefunden wurde. Wieso nicht die Default-Meldung, sondern eine ganz andere Meldung kommt, bleibt ungeklärt.
Zitat: | Anstatt meiner default-Meldung kommt nur: '[Dieses Thema überfordert mich.]' |
Diese Meldung kann ich in meiner Lib (15.08.2002) nicht finden. Mir scheint, Du hast hier einen Code wie den für Fragen wie "Was ist ein Graus?" verwendet (DM4, Seite 233), der eine ähnliche Antwort bringt. Hast Du vielleicht das Verb 'frage' geändert, so dass es nicht auf Ask verweist? _________________ Every silver lining has a cloud. |
|
|
|
|
|