Autor |
Nachricht |
< Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen |
|
Verfasst am:
Sa, 5 Aug 2006 - 5:58
|
|
|
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. |
|
|
|
|
|
Verfasst am:
So, 6 Aug 2006 - 17:20
|
|
|
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 |
|
|
|
|
|
Verfasst am:
Mo, 7 Aug 2006 - 0:52
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Lol, danke ChristianB!
Muss mich mit den Schleifen mal naeher beschaeftigen... |
|
|
|
|
|
Verfasst am:
So, 20 Aug 2006 - 5:08
|
|
|
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. |
|
|
|
|
|
Verfasst am:
So, 20 Aug 2006 - 22:25
|
|
|
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. |
|
|
|
|
|
Verfasst am:
Mo, 21 Aug 2006 - 9:14
|
|
|
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. |
|
|
|
|
|
Verfasst am:
Mo, 21 Aug 2006 - 9:47
|
|
|
Experte
Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Jawoll. Das ist natürlich sehr viel windschnittiger. Haha. |
|
|
|
|
|
Verfasst am:
Mo, 21 Aug 2006 - 13:04
|
|
|
Wasserträger
Anmeldungsdatum: 16.07.2006
Beiträge: 28
Wohnort: Japan
|
|
Jau, Martin, das ist ne gute Loesung. Danke.
ChristianB, dir auch vielen Dank! |
|
|
|
|
|