
beschreibe
----------

 SEHERHAUSKOMMANDO:
    beschreibe <haus> lang
    beschreibe <haus> kurz
    beschreibe detail <det>
    beschreibe lesbares detail <det>
    beschreibe befehl <bef> - Siehe befehl!
    beschreibe haustuer
    beschreibe tuerzustand
    beschreibe <truhe>

 ARGUMENTE:

     <haus>
        eine gueltige Bezeichnung des Hauses. Gueltige Bezeichnungen sind
        innerhalb des Hauses "haus" und "raum", ausserhalb des Hauses die
        Begriffe, mit denen sich das Haus ansprechen laesst.
     <det>
        Liste der zu beschreibenden (lesbaren) Details. Bei mehreren Details
        muessen diese durch Kommata voneinander getrennt sein!
     <truhe>
        ein gueltiger Begriff, mit dem sich die Truhe ansprechen laesst.

 BESCHREIBUNG:
    Dieses Kommando dient zur allgemeinen Beschreibung des Hauses. Von den
    moeglichen Anwendungen ist beschreibe haustuer nur draussen erlaubt.
    beschreibe <haus> lang ist sowohl innen als auch aussen benutzbar; alle
    anderen Anwendungen gelten nur innerhalb des Hauses.

    Nach Eingabe des Kommandos befindet man sich bei den meisten Arten in dem
    selben Editor, wie man ihn auch von der Post oder der Zeitung gewohnt ist.
    Man hat also auch hier die Moeglichkeit, sich mit "~h" eine Hilfeseite des
    Editors mit allen moeglichen Kommandos anzeigen zu lassen.

    Falls es vorkommen sollte, dass waehrend der Beschreibung die Verbindung
    zum MUD zusammenbricht, sperrt der Editor! In diesem Fall kann man mit
    "~r" die unterbrochene Beschreibung wieder aufnehmen. (Das ~r muss als
    Befehl im Haus angegeben werden!)

    Hier nun die Moeglichkeiten zur Beschreibung:

     beschreibe <haus> lang
        Hiermit wird die Langbeschreibung des Hauses begonnen. Es gibt zwei
        Faelle: Befindet man sich innerhalb des Hauses, so gibt man jetzt den
        Text ein, den man beim Betreten des Hauses (bei eingeschaltetem
        Lang-Modus) und bei einem schau im Haus bekommt. Befindet man sich
        ausserhalb des Hauses, so gibt man jetzt den Text ein, den man beim
        Untersuchen des Hauses bekommt. An den Text fuer die
        Aussenbeschreibung wird immer eine Zeile mit dem aktuellen Zustand der
        Haustuer angehaengt.

     beschreibe <haus> kurz
        Beginnt die Eingabe der Kurzbeschreibung des Hauses. Dies ist der
        Text, den man mit eingeschaltetem Kurz-Modus beim Betreten des Hauses
        bekommt.

        Die Kurzbeschreibung kann nur im Inneren des Hauses geaendert werden.
        Sie darf nicht laenger sein als eine Zeile!

        Wenn Dein Haus auch von aussen anders aussehen soll, wende Dich bitte
        an Wargon.

     beschreibe detail <det>
        Beginnt die Beschreibung des Details <det>. Als Details sollten
        moeglichst alle Substantive beschrieben werden, die in der
        Langbeschreibung des Hausinneren und in den anderen Details vorkommen
        (natuerlich nur, soweit das sinnvoll ist). Den Text der Details
        bekommt man bei dem Kommando "untersuche <det>" ausgegeben.

     beschreibe lesbares detail <det>
        Beginnt die Beschreibung eines lesbaren Details. Der Text wird bei dem
        Kommando "lies <det>" ausgegeben.

     beschreibe befehl <bef>
        Da dies mittlerweile recht komplex geworden ist, gibt es eine
        Extrahilfeseite. Du erreichst sie mit "hilfe befehl".

     beschreibe haustuer
        Erlaubt die Beschreibung der Haustuer. Hier ist nur eine Zeile
        erlaubt. Diese Zeile wird an die Langbeschreibung des Hauses von
        aussen angehaengt. Wenn dort keine Haustuer erscheinen soll (was zB.
        bei einem See oder einer Hoehle wenig Sinn macht), kann man hier mit
        einem Leerstring (direkt <RETURN> druecken) die Tuer unsichtbar
        machen.

        Mit dem Platzhalter %s wird der aktuelle Zustand der Haustuer in die
        Beschreibung eingebaut (in der Form "geoeffnet", "geschlossen" oder
        "abgeschlossen").

     beschreibe tuerzustand
        Auch den Zustand der Haustuer (geoeffnet, geschlossen, abgeschlossen)
        kann man in eigene Worte fassen.

        Die Zustaende muessen in der oben angegebenen Reihenfolge eingegeben
        werden, und zwar in EINER Zeile, durch Kommata getrennt!
        Es muessen immer ALLE drei Zustaende angegeben werden!
        Man sollte nach Moeglichkeit nur ein Wort pro Zustand verwenden!

     beschreibe <truhe>
        Beginnt die Beschreibung der Truhe. Im Gegensatz zu den anderen
        Beschreibungen erfolgt die Beschreibung der Truhe in mehreren
        Schritten. Will man die jeweiligen Vorgaben nicht aendern, so genuegt
        es, <RETURN> zu druecken.

        Zuerst wird man nach dem Geschlecht der Truhe gefragt. Hier muss man
        den passenden Buchstaben angeben (m fuer maennlich, w fuer weiblich
        oder s fuer saechlich).

        Nun wirst Du nach dem Namen gefragt, der zum Beispiel beim Oeffnen
        oder Schliessen der Truhe ausgegeben wird. Falls der Name
        unregelmaessig dekliniert wird, muessen alle vier Faelle in der
        Reihenfolge Nominativ, Genitiv, Dativ, Akkusativ, durch Kommata
        getrennt, eingegeben werden.

        Schliesslich kannst Du noch Adjektive angeben, die zusammen mit dem
        Namen ausgegeben werden.

        Aus den bisher eingegebenen Daten wird nun die Kurzbeschreibung der
        Truhe erstellt. Entspricht sie nicht Deinen Vorstellungen, gelangst Du
        wieder in die Geschlechtsabfrage.

        Ansonsten wird nun nach den IDs gefragt, mit denen sich die Truhe
        ansprechen lassen soll. Mehrere IDs muessen mit Kommata voneinander
        getrennt werden. Es koennen auch IDs verwendet werden, die aus
        mehreren Wortern bestehen. Die Vorgaben koennen wieder mit <RETURN>
        uebernommen werden.

        Zum guten Schluss erfolgt die Langbeschreibung der Truhe. Bei dieser
        steht wieder der Editor zur Verfuegung. Bei Abbruch oder einem
        Leerstring wird die alte Langbeschreibung nicht geaendert.

        Die Beschreibung der Truhe kann natuerlich nur geaendert werden, wenn
        man im gleichen Raum steht wie die Truhe. ;-)

 BEISPIELE:
    Ein lesbares Detail wird beschrieben:

      beschreibe lesbares detail zettel, notiz
      => Bitte Beschreibung fuer 'zettel, notiz' eingeben.
      ]Bin gerade metzeln. Blutsaugerschwerter bitte an der Pforte
      ]abgeben.
      ].

    Die Truhe soll in eine kleine Kiste umgewandelt werden:

      beschreibe truhe
      => Beschreibung der Truhe
      => Wenn die Vorgaben nicht geaendert werden sollen, einfach weiter
      => mit <RETURN>.

      =>Geschlecht (m, w, s): [w]
      ]w
      => Das Geschlecht ist jetzt weiblich.
      => Nun musst Du den Namen eingeben. ...
      => Name: [Truhe]
      ]Kiste, Kiste, Kiste, Kiste
      => Der Name ist jetzt 'Kiste, Kiste, Kiste, Kiste'
      => Du kannst jetzt noch Namensadjektive angeben. ...
      => Namensadjektive: []
      ]klein
      => Namensadjektive lauten klein.
      => Die Kurzbeschreibung lautet damit:
      => Eine kleine Kiste (geschlossen).
      => Falls das Ergebnis nicht Deinen ...
      => Stimmt die Kurzbeschreibung so? (j/n)
      ]j

      =>IDs (durch Kommata getrennt):
      =>[truhe,holztruhe]
      ]kiste
      => OK, IDs lauten 'kiste'

      => Bitte Langbeschreibung angeben...
      ]In dieser Kiste lagert Wargon wichtige Dinge.
      ].

 SIEHE AUCH:
    editor,
    aendere, befehl, loesche, kopiere, meldungen, uebersicht, notiz, licht

 LETZTE AeNDERUNG:
    Thu, 24.07.1997, 09:00:00 von Wargon
