Forum moved to if-forum.org
Autor Nachricht
<  Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen
RobinOsaka
BeitragVerfasst am: Sa, 5 Aug 2006 - 5:58  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan

Hatten wir das schon einmal? Ich habe das Forum durchsucht, aber nichts gefunden.

Ich moechte den Inhalt eines offenen Behaelters nicht in der Raumbeschreibung sehen. Zum Beispiel das Wasser in einer Blumenvase oder ein Portmonee in einer Hosentasche.

Man kann die Anzeige des Inhalts unterdruecken, in dem man den Behaelter schliesst - macht bei einer Vase oder Hosentasche aber keinen Sinn.
Man kann den Inhalt eines geschlossenen Behaelters anzeigen, indem man ihn 'transparent' macht - hier brauche ich aber das Gegenteil.

Der Inhalt soll nur in der Beschreibung des Behaelters auftauchen. Und er muss natuerlich "tatsaechlich" drin sein, damit Befehle wie 'ausschuetten' etc funktionieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: So, 6 Aug 2006 - 17:20  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Mut zum Mogeln! Zum Beispiel so:

Code:
Raum    Wohnzimmer
Name    'Wohnzimmer'
Besch   'Deine Möbel sind schon alle abtransportiert
        worden und die Wände sind kahl.'
 
       
/*  Das Attribut kein_Inhalt kann transparenten oder
    auch nicht-transparenten Behältern
    gegeben werden, deren Inhalt in der Raumbeschreibung
    nicht angezeigt werden soll.
*/
ObjAttr kein_Inhalt


! Zwei Hilfs-Attribute
ObjAttr offenflag
ObjAttr transpflag

Obj     Vase
Name    'Blumenvase' f
Vor     'blumen'
Subst   'vase' f
Attr    kein_Inhalt Behälter transparent
Zust    offen
Vol     10
Ort     Wohnzimmer

Obj     Fliege
Name    'tot^ Fliege' f
Adj     'tot'
Subst   'fliege' f  'insekt' n
Ort     in Vase


/*  Der Standard-Befehl lage wird um einen VorAusf-Block erweitert,
    in denen die Objekte, die das Attribut kein_Inhalt
    besitzen, für einen Zug lang geschlossen
    und ggf. undurchsichtig gemacht werden.
   
    Nach Ausführung von lage werden die kein_Inhalt-Objekte
    in ihren Urzustand zurückversetzt.
*/

Bef     lage
VorAusf
    lokale ObjVar xObj
   
    Schleife xObj (xObj kein_Inhalt) und (xObj hier)
        Wenn (xObj offen) dann
            ObjZust xObj geschlossen
            AttrHin xObj offenflag
        Ende
        Wenn (xObj transparent) dann
            AttrWeg xObj transparent
            AttrHin xObj transpflag
        Ende
    Ende
EndeAusf
NachAusf
    lokale ObjVar xObj

    Schleife xObj (xObj kein_Inhalt) und (xObj hier)
        Wenn (xObj offenflag) dann
            ObjZust xObj offen
            AttrWeg xObj offenflag
        Ende
        Wenn (xObj transpflag) dann
            AttrHin xObj transparent
            AttrWeg xObj transpflag
        Ende
    Ende
EndeAusf


[Edit: Nicht die Fliege, sondern die Vase sollte in dem Beispiel transparent sein; ist oben geändert.]


Zuletzt bearbeitet von ChristianB am Mo, 7 Aug 2006 - 1:49, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RobinOsaka
BeitragVerfasst am: Mo, 7 Aug 2006 - 0:52  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan

Lol, danke ChristianB!

Muss mich mit den Schleifen mal naeher beschaeftigen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RobinOsaka
BeitragVerfasst am: So, 20 Aug 2006 - 5:08  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan

Ja, das funktioniert. Es gibt aber zwei Probleme.

Mit dem Zustand offen macht man die Vase zu einem Objekt, dass geoeffnet und geschlossen werden kann. Um Meldungen wie "Die Vase ist nun geschlossen" zu vermeiden, muss man den schliessen-Befehl bei der Vase abfangen. Etwas Arbeit.

Objekte koennen nur einen Zustand haben. Wenn man bereits einen Zustand hat (ich habe zum Beispiel leer und voll als Zustaende fuer manche Behaelter), geht deine Loesung nicht mehr.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: So, 20 Aug 2006 - 22:25  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

RobinOsaka hat folgendes geschrieben:
Objekte koennen nur einen Zustand haben. Wenn man bereits einen Zustand hat (ich habe zum Beispiel leer und voll als Zustaende fuer manche Behaelter), geht deine Loesung nicht mehr.

Stimmt. Okay, im ersten Vorschlag wurde die Verdunkelungstaktik angewendet, um die Anzeige des Inhalts zu unterdrücken. Also Schotten dicht und Vorhänge zu. Nachteil: Man ist eben nicht mehr so flexibel mit den Zuständen.

Eine weitere Methode, um keinen Inhalt angezeigt zu bekommen ist, wenn es im Moment der Anzeige gar keinen Inhalt gibt. Eher die Alle-Mann-mal-kurz-ab-in-den-Keller-Taktik. Siehe das Beispiel, das ich HIER hinterlegt habe.

Dort werden vor Ausführung des Befehls lage die anwesenden Objekte, die das Attribut [kein_Inhalt] besitzen bei Bedarf geleert und ihr Inhalt in den Limbo verschoben. Im Datenfeld Limbus werden die ursprünglichen Zugehörigkeiten der Objekte hinterlegt, und nach Ausführung von lage wird die alte Ordnung wieder hergestellt (hoffentlich).

Bei dieser Methode sind die Zustände irrelevant. Das sieht alles ein wenig abenteuerlich aus, nur um an bestimmten Stellen eine Auflistung zu unterdrücken, aber es funktioniert.

Vielleicht kannst du ja was damit anfangen. Viele Grüße, CB.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 21 Aug 2006 - 9:14  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Du kannst für manche Objekt- und Raumtexte auch Ausführungsblöcke angeben, insbesondere für Name, Erst, Plural und Besch. Und für Darin, der Eigenschaft, mit der man den Text beim Aufzählen für jedes Objekt angeben kann.

So kannst du dann die Inhaltsliste nur dann ausgeben lassen, wenn der momentane Befehl nicht Lage, also nicht das Anzeigen der Raumbeschreibung ist.

Code:

Obj Tasse
Name 'Tasse' f
Subst 'tasse' f
Attr Behälter
Ort Garten
Besch 'Eine Sammeltasse. Mit Blümchen.'
Darin Ausf
        wenn /(aBef = Lage) Text 'In der Tasse [ist 0] [liste 0].'
    EndeAusf

Obj Kaffe
Name 'Kaffee' m %etwas
Subst 'kaffee' m
Ort in Tasse
Attr immobil

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mo, 21 Aug 2006 - 9:47  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Jawoll. Das ist natürlich sehr viel windschnittiger. Haha.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RobinOsaka
BeitragVerfasst am: Mo, 21 Aug 2006 - 13:04  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan

Jau, Martin, das ist ne gute Loesung. Danke.

ChristianB, dir auch vielen Dank!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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  >  T.A.G.

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