Forum moved to if-forum.org
Autor Nachricht
<  Container
Flo05
BeitragVerfasst am: Do, 6 Dez 2007 - 11:14  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo,

ich habe mal ein paar Fragen zu Containern in Inform 6. Wie bekomme ich es weg, dass in der Raumbeschreibung der Inhalt von Containern angezeigt wird? Z.Zt. sieht es so aus:

<Raumbeschreibung>....

Du siehst hier ein altes Auto und einen Werkzeugkasten (darin einen Hammer,
einen Schraubenschlüssel und eine Zange).

Besser wäre es, wenn da nur Werkzeugkasten stehen würde.

Meine nächste Frage ist, wie bekomme ich es hin, dass wenn man einen Container anschaut, dessen Inhalt mit aufgelistet bekomme? Momentan sehe ich den Inhalt nur, wenn man den Container im Inventar hat:

Du hast Folgendes:
einen Werkzeugkasten
einen Ledergurt
einen Hammer
einen Schraubenschlüssel
eine Zange

Hier ist auch gleich das nächste Problem: der Ledergurt im Kasten hat die Eigenschaft "scenery" und sollte eigentlich nicht in der Liste da stehen, wie kann ich das ändern?

Hier nochmal der aktuelle Code des Kastens und dessen Inhalt

Code:

Object -> ToolBox
    with dekl 1,
         short_name "Werkzeugkasten",
         name "Werkzeugkasten" "Kasten",
         description "Der Werkzeugkasten ist ein kleiner Kasten aus Holz und einem
                      Ledergurt zum Tragen.",
         before [;
             take: if(AttemptToTakeObject(noun) == false)
                   {
                       print_ret "Du nimmst den Werkzeugkasten und hängst ihn
                                  dir über die Schulter.";
                   }
                   else
                       print_ret "";
         ],
    has male container open;

Object -> -> ToolBox_Strap
    with dekl 1,
         short_name "Ledergurt",
         name "Ledergurt" "Gurt",
         description "Der Ledergurt ist braun und ca. 6 cm breit. Mit seiner
                      Hilfe kann man den Werkzeugkasten bequem tragen.",
    has male scenery;

Object -> -> ToolBox_Hammer
    with dekl 2,
         short_name "Hammer",
         name "Hammer",
         description "Das ist ein ca. 200g schwerer Schlosserhammer mit einem Stiel aus Holz.",
    has male;

Object -> -> ToolBox_Wrench
    with dekl 2,
         short_name "Schraubenschlüssel",
         parse_name [n;
             while (WordMatch("schraubenschluessel")
                ||  WordMatch("ring-maulschluessel")
                ||  WordMatch("ringschluessel")
                ||  WordMatch("maulschluessel")
                ||  WordInProperty(NextWord(),
                   self, name)) n++;
             return n;
         ],
         description "Das ist ein Ring-Maulschlüssel, eine Seite Maulschlüssel mit Grösse 13 und
                      die andere Seite Ringschlüssel Grösse 10.",
    has male;

Object -> -> ToolBox_Claw
    with dekl 7,
         short_name "Zange",
         name "Zange" "Spitzzange",
         description "Das ist eine Spitzzange, mit der man Dinge greifen und schneiden kann.
                      Ihre Griffe sind mit rotem Kunststoff überzogen.",
    has female;


Vielleicht kann mir ja jemand dabei helfen.

Schönen Gruss, Flo05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Do, 6 Dez 2007 - 16:48  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Hallo Flo,

Flo05 hat folgendes geschrieben:
Besser wäre es, wenn da nur Werkzeugkasten stehen würde.

hier ein Vorschlag, der vielleicht nicht die Eleganz in Reinkultur darstellt, aber funktioniert:

Code:
Object -> ToolBox
    with
       ...
       
         react_before [;
            Look: give self ~container;
         ],
         react_after [;
            Look: give self container;
         ],
     has male container open;


Damit unterdrückst du allerdings auch die Ausgabe von "(der geschlossen ist)", wenn der Container geschlossen ist.

Flo05 hat folgendes geschrieben:
[...] wie bekomme ich es hin, dass wenn man einen Container anschaut, dessen Inhalt mit aufgelistet bekomme?

Zum Beispiel so:

Code:
Object -> ToolBox
    with
       ...
        description [;
            print "Der Werkzeugkasten ist ein kleiner
                Kasten aus Holz und einem
                Ledergurt zum Tragen. ";
            <<Search self>>;
         ],
         ...
     has male container open;


Flo05 hat folgendes geschrieben:
[...] der Ledergurt im Kasten hat die Eigenschaft "scenery" und sollte eigentlich nicht in der Liste da stehen, wie kann ich das ändern?

Du kannst die property add_to_scope benutzen und sie zum Kasten-Objekt hinzufügen. Dort kannst du Objekte eintragen, die NICHT Kinder des Kastens sind, aber immer in Sichtweite sein sollen, wenn auch der Kasten in Sichtweite ist. Der Gurt muss allerdings Kind eines Objekts sein. Hat er kein Mutterobjekt, kommt es (zumindest mit deform) zu einem Programmierfehler. Hier mein Vorschlag:

Code:
Object Limbo "Limbus" has light;

Object ToolBox_Strap Limbo
    with dekl 1,
         short_name "Ledergurt",
         name "Ledergurt" "Gurt",
         description "Der Ledergurt ist braun und ca.
            6 cm breit. Mit seiner
            Hilfe kann man den Werkzeugkasten
            bequem tragen.",
    has male scenery;

   ! ... und dann später im Text:

Object -> ToolBox
    with ...
         add_to_scope ToolBox_Strap,
         ...       
    has male container open;

Wenn du (wie ich) dazu neigst, auch Details untersuchbar zu implementieren, dann ist vielleicht die Erweiterung scenic.h etwas für dich. Damit musst du nicht für jedes Detail ein Objekt definieren; allerdings muss die Erweiterung etwas ans Deutsche angepasst werden.

Viele Grüße, CB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo05
BeitragVerfasst am: Fr, 7 Dez 2007 - 11:11  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo,

vielen Dank für deine Hilfe, das klappt alles prima. Jetzt sieht das alles viel besser aus. Die "scenic.h" werde ich mir mal anschauen, weil ich immer versuche jedes Detail einzubauen, so dass man es zumindest ansehen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo05
BeitragVerfasst am: Fr, 7 Dez 2007 - 13:48  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo nochmal,

nun habe ich noch ein ähnliches Problem, mit einer Theke auf der Dinge stehen. Hier mal der Code:

Code:

Object -> BigCity_Mission_DH_Bar
    with dekl 7,
         short_name "Theke",
         name "Theke",
         description [;
             print "Auf der hölzernen Theke stehen die Speisen die hier verkauf werden.
                    Darüber hängt an der Wand eine Preisliste und ein Geldkartenlesegerät. ";
              <<Search self>>;
         ],
         before [;
             letgo:  if(noun has forsale)
                         if(noun.sold == 0)
                             print_ret (GDer)noun," kann nur käuflich erworben werden.";
         ],
         react_before [;
             look: give self ~supporter;
         ],
         react_after [;
             look: give self supporter;
         ],
    has female supporter static;


In der Raumbeschreibung sieht es leider so aus:

Du siehst hier eine Theke (darauf ein Brathähnchen, ein Schnitzel, einen Salat
und ein Mineralwasser).

Wieso klappt das hier nicht mit dem react_before / react_after? Ist zwar irgendwie logisch, dass man Dinge auf der Theke auch sieht, aber ich finde es schöner, wenn man die Dinge nur sieht wenn man die Theke anschaut.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Fr, 7 Dez 2007 - 22:33  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Seltsam. Bei mir macht dein Code genau das, was du erreichen möchtest: Der Inhalt des Supporters wird während der Aktion ##Look erfolgreich unterdrückt.

Mein Testspiel hat folgendes geschrieben:
Spielwiese
Dies ist eine Testzone.

Du siehst hier eine Theke.

>u theke
Auf der hölzernen Theke stehen die Speisen die hier verkauf werden. Darüber hängt an der Wand eine Preisliste und ein Geldkartenlesegerät. Auf der Theke siehst du einen Werkzeugkasten, einen Hammer, einen Schraubenschlüssel und eine Zange.

Dass der Inhalt der Theke bei dir immer noch angezeigt wird, muss andere Gründe haben. Welche Library-Version benutzt du? Ich teste dein Beispiel mit deform (Release 6/11 2007-07-11).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo05
BeitragVerfasst am: Fr, 7 Dez 2007 - 23:37  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hatte laut der Datei deform.hst eine Version vom 29.09.2005. Habe nun mal die Version vom 11.07.2007 installiert (Danke an Martin Oehm, dass er an deform noch arbeitet, auch ein Dank an dir ChristianB für den Hinweis auf eine neue Version). Also wenn man den Raum betritt, sehe ich folgendes:

Du siehst hier eine Theke (darauf ein Brathähnchen, ein Schnitzel, einen Salat
und ein Mineralwasser).

Wenn ich aber im Raum nochmal die Raumbeschreibung aufrufe, sehe ich das hier:

Du siehst hier eine Theke.

Der Code ist wie oben beschrieben, ausser den Lebensmitteln die ich mir hier gespart habe. Woran kann das liegen, dass es bei dir funktioniert und bei mir nicht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Sa, 8 Dez 2007 - 1:20  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Ahh, knifflig. Wenn ich das Spiel neu starte und sich die Theke im Startraum befindet, dann klappt alles. Wenn ich aber den Raum, in dem die Theke steht, betrete, dann funktioniert es nicht mehr. Das Phänomen, das du beschreibst konnte ich hier reproduzieren:

Mein Testspiel hat folgendes geschrieben:
Spielwiese
Dies ist eine Testzone.

Du kannst nach Westen gehen.

>w

Spielwiese (der uncoole westliche Teil)
Dies ist der westliche Teil der Spielwiese. Da ist normalerweise nichts los, da hängen höchstens mal die Typen ab, die nicht auf die coolen Partys eingeladen werden. Bill Gates und Howard Sherman waren früher oft hier.

Du kannst in Richtung Osten gehen.

Du siehst hier eine Theke (darauf einen Werkzeugkasten (der leer ist), einen Hammer, einen Schraubenschlüssel und eine Zange).

Ok. Das liegt daran, dass nach dem Befehl GEHE NACH WESTEN die aktuelle Action nicht ##Look ist, sondern ##Go. Ich schlage Folgendens vor (recht dreckig):

Code:
Object -> BigCity_Mission_DH_Bar
         ...
         react_after [;
             Go: give self ~supporter; ! NEU !
             look: give self supporter;
         ],
    has female supporter static;

Das müsste vorerst funktionieren. Nach ##Go folgt ##Look, deshalb bekommt die Bar ihr Attribut supporter am Ende zurück.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo05
BeitragVerfasst am: Sa, 8 Dez 2007 - 1:48  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo,

du bist ein Genie. Das funktioniert. Vielen vielen Dank. Habe auch gleich mal meinen Werkzeugkasten angepasst. Dann kann ich meine Geschichte nun weiter schreiben, und dank dir sieht es auch noch schön aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: Sa, 8 Dez 2007 - 22:50  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Flo05 hat folgendes geschrieben:
[...] sieht es auch noch schön aus

... aber das ganze Geben und Nehmen von Attributen in react_before und react_after ist nicht so schön. Es geht natürlich hübscher, nämlich mit der Property describe; wenn die true zurückgibt, dann wird die Ausgabe als vollendet angesehen und die Kinder des Objekts nicht mehr mit angegeben.

Code:
Object -> BigCity_Mission_DH_Bar
    with
         ...
         describe [;
            "^In der Mitte des Raums steht eine Theke.";
         ],
         
    has female supporter static;


Viele Grüße, CB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo05
BeitragVerfasst am: So, 9 Dez 2007 - 13:31  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo,

habe es mal so eingebaut. Bei der Theke, die fest im Raum steht, sieht das recht gut aus. Aber bei tragbaren Gegenständen wie dem Werkzeugkasten gefällt mir das nicht so, dass der Kasten in einer extra Zeile im Raum erwähnt wird. Was gibt es denn für Nachteile, wenn ich die Version mit react_before und react_after drin lasse?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: So, 9 Dez 2007 - 14:22  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Flo05 hat folgendes geschrieben:
Was gibt es denn für Nachteile, wenn ich die Version mit react_before und react_after drin lasse?

Solange es funktioniert, keine (außer stilistischen). Ich kann mir aber vorstellen, dass die Mogelei mit den Attributen in komplexeren Zusammenhängen zu Fehlern führen könnte, z.B. dass ein weggenommenes Attribut nach der Raumbeschreibung nicht wieder zurückgegeben wird.

[Edit:]Wenn du es aber als natürlich empfindest, dass der Inhalt von Supportern und Containern in der Raumbeschreibung erscheint und dir lediglich die Ausgabe in Klammern nach dem Objekt-Short-Name nicht gefällt, kannst du die Konstante NO_NESTED_LISTS definieren (eine hübsche deform-Besonderheit) -- der Inhalt der Objekte wird dann in einem eigenen Absatz aufgelistet.

[Edit2]Mir kam das Thema gleich so bekannt vor; wir haben das schon mal für T.A.G. diskutiert. In T.A.G. gibt es eine Darin-Property, mit der man die Ausgabe des Objektinhalts ganz einfach steuern kann. Gibt es vielleicht ein Pendant in Inform?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: So, 9 Dez 2007 - 18:24  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

So. Neuer Post. Manchmal kommt die Erkenntnis nur sehr langsam... Ich habe jetzt die Alternative zu der Methode mit react_before und react_after und der Attribut-Klauerei gefunden, die mir im Hinterkopf rumschwirrte: Füge den Objekten (container oder supporter), bei denen die Ausgabe des Inhalts unterdrückt werden soll folgende Property hinzu:

Code:

invent [;
    if (inventory_stage == 2 && action ~= ##Inv) rtrue;
]

Das sollte in der Raumbeschreibung verhindern, dass der Inhalt angezeigt wird (auch mit NO_NESTED_LISTS). Im Inventar bleibt alles wie gehabt. Ich meine, dass diese Variante weniger fehleranfällig ist.

Grüße, CB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Flo05
BeitragVerfasst am: So, 9 Dez 2007 - 21:56  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 22.08.2007
Beiträge: 12
Wohnort: Hannover

Hallo,

noch einmal vielen vielen Dank. Danke für diese grossartige Hilfe. Habe das nun so eingebaut, es es funktioniert ebenfalls wunderbar. Dann lasse ich es mal so, wenn das die eleganteste Lösung ist.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick34
BeitragVerfasst am: So, 5 Jul 2009 - 11:27  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 04.07.2009
Beiträge: 3
Wohnort: France

Nur zur Info für euch
Falls jemand OLE Containers benutzen will sollte er mit Dekomprimierungs-Probleme bei Windows vista rechnen.
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