Forum moved to if-forum.org
Autor Nachricht
<  Kleine Fragen für zwischendurch ...
der.Grob
BeitragVerfasst am: Sa, 23 Aug 2003 - 8:56  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Clive
BeitragVerfasst am: Sa, 23 Aug 2003 - 9:38  Antworten mit Zitat
Wasserträger
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.).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
der.Grob
BeitragVerfasst am: Sa, 23 Aug 2003 - 13:31  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town

Jo, danke - so klappt's.
_________________
http://www.interactive-fiction.de.vu/
http://www.pro-board.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Mo, 1 Sep 2003 - 10:06  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 1 Sep 2003 - 10:45  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Mo, 1 Sep 2003 - 11:12  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town

Ich sach's ja - was ganz banales. Danke.

Martin hat folgendes geschrieben:
Die zweite Ergänzung ist für Scott-Adam-Fans, oder?


:wink:
_________________
http://www.interactive-fiction.de.vu/
http://www.pro-board.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Di, 16 Sep 2003 - 17:56  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kairo
BeitragVerfasst am: Di, 16 Sep 2003 - 19:26  Antworten mit Zitat
Abenteurer
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!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
der.Grob
BeitragVerfasst am: Di, 16 Sep 2003 - 19:30  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 19.08.2003
Beiträge: 34
Wohnort: Lev-Town

Okay, probier ich mal aus - obwohl ich beim ersten Vorschlag vermute, dass wenn ich nur den Anzug nehmen möchte (ohne anziehen), dann 'meine' Meldung + die Standard-Meldung kommt. Teste ich gleich mal ...
_________________
http://www.interactive-fiction.de.vu/
http://www.pro-board.de/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Di, 16 Sep 2003 - 20:37  Antworten mit Zitat
Abenteurer
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...";]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Mi, 17 Sep 2003 - 9:13  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Mi, 17 Sep 2003 - 9:45  Antworten mit Zitat
Abenteurer
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Mi, 17 Sep 2003 - 18:56  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
der.Grob
BeitragVerfasst am: Sa, 20 Sep 2003 - 18:51  Antworten mit Zitat
Wasserträger
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/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 22 Sep 2003 - 9:01  Antworten mit Zitat
Experte
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 2
Gehe zu Seite 1, 2  Weiter
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