IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen
AntwortenNeues ThemaNeue Umfrage

Inhalt von Behaeltern NICHT in Raumbeschreibung anzeigen

Geschrieben um 06:58 am 05.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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.

Geschrieben um 18:20 am 06.08.2006 | Zitat | Editieren | Löschen
ChristianB
Avatar
Mitglied
Prof Gumby
Beiträge: 569
<td valign="top"><div class="post"><p>Mut zum Mogeln! Zum Beispiel so:</p> <p>&#8220;`Raum    Wohnzimmer</p> <p>Name    &#8216;Wohnzimmer&#8217;</p> <p>Besch   &#8216;Deine Möbel sind schon alle abtransportiert</p> <p>        worden und die Wände sind kahl.&#8217;</p> <p> </p> <p>       </p> <p>/*  Das Attribut kein_Inhalt kann transparenten oder</p> <p>    auch nicht-transparenten Behältern</p> <p>    gegeben werden, deren Inhalt in der Raumbeschreibung</p> <p>    nicht angezeigt werden soll.</p> <p>*/</p> <p>ObjAttr kein_Inhalt</p> <p>! Zwei Hilfs-Attribute</p> <p>ObjAttr offenflag</p> <p>ObjAttr transpflag</p> <p>Obj     Vase</p> <p>Name    &#8216;Blumenvase&#8217; f</p> <p>Vor     &#8216;blumen&#8217;</p> <p>Subst   &#8216;vase&#8217; f</p> <p>Attr    kein_Inhalt Behälter transparent</p> <p>Zust    offen</p> <p>Vol     10</p> <p>Ort     Wohnzimmer</p> <p>Obj     Fliege</p> <p>Name    &#8216;tot^ Fliege&#8217; f</p> <p>Adj     &#8216;tot&#8217;</p> <p>Subst   &#8216;fliege&#8217; f  &#8216;insekt&#8217; n</p> <p>Ort     in Vase</p> <p>/*  Der Standard-Befehl lage wird um einen VorAusf-Block erweitert,</p> <p>    in denen die Objekte, die das Attribut kein_Inhalt</p> <p>    besitzen, für einen Zug lang geschlossen</p> <p>    und ggf. undurchsichtig gemacht werden.</p> <p>   </p> <p>    Nach Ausführung von lage werden die kein_Inhalt-Objekte</p> <p>    in ihren Urzustand zurückversetzt.</p> <p>*/</p> <p>Bef     lage</p> <p>VorAusf</p> <p>    lokale ObjVar xObj</p> <p>   </p> <p>    Schleife xObj &#40;xObj kein_Inhalt&#41; und &#40;xObj hier&#41;</p> <p>        Wenn &#40;xObj offen&#41; dann</p> <p>            ObjZust xObj geschlossen</p> <p>            AttrHin xObj offenflag</p> <p>        Ende</p> <p>        Wenn &#40;xObj transparent&#41; dann</p> <p>            AttrWeg xObj transparent</p> <p>            AttrHin xObj transpflag</p> <p>        Ende</p> <p>    Ende</p> <p>EndeAusf</p> <p>NachAusf</p> <p>    lokale ObjVar xObj</p> <p>    Schleife xObj &#40;xObj kein_Inhalt&#41; und &#40;xObj hier&#41;</p> <p>        Wenn &#40;xObj offenflag&#41; dann</p> <p>            ObjZust xObj offen</p> <p>            AttrWeg xObj offenflag</p> <p>        Ende</p> <p>        Wenn &#40;xObj transpflag&#41; dann</p> <p>            AttrHin xObj transparent</p> <p>            AttrWeg xObj transpflag</p> <p>        Ende</p> <p>    Ende</p> <p>EndeAusf&#8220;`</p> <p>[Edit: Nicht die Fliege, sondern die Vase sollte in dem Beispiel transparent sein; ist oben geändert.]</p> </div></td>
Geschrieben um 01:52 am 07.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

Lol, danke ChristianB!

Muss mich mit den Schleifen mal naeher beschaeftigen…

Geschrieben um 06:08 am 20.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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.

Geschrieben um 23:25 am 20.08.2006 | Zitat | Editieren | Löschen
ChristianB
Avatar
Mitglied
Prof Gumby
Beiträge: 569

RobinOsaka:

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.

Geschrieben um 10:14 am 21.08.2006 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Retired Gumby
Beiträge: 707
<td valign="top"><div class="post"><p>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.</p> <p>So kannst du dann die Inhaltsliste nur dann ausgeben lassen, wenn der momentane Befehl nicht Lage, also nicht das Anzeigen der Raumbeschreibung ist.</p> <p>&#8220;`</p> <p>Obj Tasse</p> <p>Name &#8216;Tasse&#8217; f</p> <p>Subst &#8216;tasse&#8217; f</p> <p>Attr Behälter</p> <p>Ort Garten</p> <p>Besch &#8216;Eine Sammeltasse. Mit Blümchen.&#8217;</p> <p>Darin Ausf</p> <p>        wenn /&#40;aBef = Lage&#41; Text &#8216;In der Tasse &#91;ist 0&#93; &#91;liste 0&#93;.&#8217;</p> <p>    EndeAusf</p> <p>Obj Kaffe</p> <p>Name &#8216;Kaffee&#8217; m %etwas</p> <p>Subst &#8216;kaffee&#8217; m</p> <p>Ort in Tasse</p> <p>Attr immobil</p> <p>&#8220;`</p> </div></td>
Geschrieben um 10:47 am 21.08.2006 | Zitat | Editieren | Löschen
ChristianB
Avatar
Mitglied
Prof Gumby
Beiträge: 569

Jawoll. Das ist natürlich sehr viel windschnittiger. Haha.

Geschrieben um 14:04 am 21.08.2006 | Zitat | Editieren | Löschen
RobinOsaka
Mitglied
Student Gumby
Beiträge: 28

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

ChristianB, dir auch vielen Dank!

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz