
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!

 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.
        Da einige Spezialisten es immer wieder schafften, hier schon die
        Langbeschreibung einzugeben (und somit hinterher die Truhe nicht mehr
        ansprechen konnten), laesst sich die Truhe fuer den
        `beschreibe'-Befehl immer als `truhe' ansprechen. Zum Ansehen, Oeffnen
        etc. muss man allerdings die hier angegebenen IDs verwenden.

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

        Zum guten Schluss kann man auch noch das Material der Truhe aendern.
        Im Hauptmenue kann man eine Materialgruppe waehlen, und dort dann das
        gewuenschte Material.

        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 aus Holz 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.
      ].

      => Bitte das Material der Kiste betimmen:
      ...

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

 LETZTE AeNDERUNG:
    Thu, 25.09.1997, 17:40:30 von Wargon
