Lpc Manpages

FUNKTION:
     void AddExit(mixed cmd, mixed info)

ARGUMENTE:
     cmd
          String oder Stringarray, welches den Ausgang / die Ausgaenge
          bezichnet / bezeichnen die in den Raum eingefuegt werden sollen.

     info
          Ein String oder Mapping mit den Informationen ueber den Ausgang.

BESCHREIBUNG:
     AddExit fuegt einen oder mehrere Ausgaenge in den Raum ein.

     In info werden Informationen ueber Eigenschaften des Ausgangs ueber-
     geben. Wenn info ein String ist, wird ein Standardausgang angelegt.
     Wenn der Ausgang Spezialfunktionen Haben soll, uebergibt man ein
     Mapping als zweiten Parameter. In /sys/room/exits.h sind folgende Keys
     definiert:

     EX_DEST
          Raum in den der Spieler bewegt werden soll.
     EX_MSG
          Meldung fuer die Spieler im Ausgangsraum.
     EX_FUNC
          Funktion die vor dem Durchschreiten aufgerufen wird. Diese kann
          entweder eine Closure sein oder ein String mit dem Namen der
          Funktion. Der Funktion wird als 1. Argument die Richtung (string)
          mitgegeben und als 2. das Objekt (object), dass versucht, den
          Ausgang zu benutzen.
     EX_DIR
          Unabhaengig von der wirklichen Richtung kann man hier eine
          Richtung angeben, die anstelle davon in P_EXIT_LAST_DIRECTION 
          im Spieler erscheinen soll.
     EX_INVIS
          Der Ausgang taucht nicht in der Liste der Ausgaenge auf, die mit
          dem 'aus'-Befehl bzw. in der Langbeschreibung des Raums angezeigt
          wird. Auch Befehls-Ausgaenge werden dort nicht angezeigt!
     EX_GUARD
          Mapping mit Informationen ueber die Bewachung des Ausgangs:
          EXG_ID
               Id des bewachenden Monsters. Ist das Monster im Raum, kann der
               Spieler nicht passieren. Die ID sollte moeglichst einmalig
               sein, also z.B. "EXG_ork" anstelle von "ork". Damit werden
               Verwechlungen vermieden. Das entsprechende ID muss natuerlich
               dem NPC hinzugefuegt werden.
          EXG_PLMSG
               Meldung an den Spieler, wenn er den Ausgang nicht durchschrei-
               ten kann. Hat der String die Form @@text@@ wird die Meldung
               ueber process_string ausgewertet.
          EXG_RMMSG
               Meldung an die Spieler im Raum, wenn der Spieler den Ausgang
               nicht durchschreiten kann. Mit @wer@ @wen@ @wessen@ und @wem@
               kann der Name Spielers im passenden Fall ausgegeben werden.
               Hat der String die Form @@text@@ wird die Meldung ueber
               process_string ausgewertet.
     EX_VERB
          Mapping mit Eintraegen fuer einen Befehls-Ausgang:
          EXV_VERB
               Befehl, um den Ausgang zu nutzen. Hier kann auch ein Array
               stehen mit unterschiedlichen Schreibweisen des Befehls, also
               z.B. ({ "schwimm", "schwimme" }).
               Es sollte auf jeden Fall auch die Property P_EXIT_FAIL_MSGS
               passend gesetzt werden (siehe dort).
          EXV_PLMSG
               Meldung an den Spieler, bevor der Raum verlassen wird.
               Richtung und Ausgang werden automatisch angehaengt,
               die Ausgabe danach noch mit break_string formatiert.
               Aus einer EXV_PLMSG "Du schwimmst" wird fuer den Spieler dann
               "Du schwimmst nach Norden.".
          EXV_RMMSG
               Meldung an den Raum, bevor der Spieler den Raum verlaesst.
               Spieler, Richtung und Ausgang werden automatisch ergaenzt.
               Aus einer EXV_RMMSG "schwimmt" wird fuer die Spieler im Raum
               dann "Mupfel schwimmt nach Norden.".
          EXV_RMMSG2
               Meldung an den Zielraum, wenn der Spieler dort eintrifft.
               Der Spielername wird automatisch vorangestellt.
               Aus einer EXV_RMMSG2 "schwimmt herein" wird fuer die Spieler
               im Zielraum dann "Mupfel schwimmt herein."
          Alle drei Messages sind optional. 
     EX_NO_MNPC
          Der Ausgang soll von MNPCs nicht benutzt werden koennen.

RUECKGABEWERT:
     void

BEMERKUNGEN:
     Es wird in folgender Reihenfolge geprueft:
     1. Ist der Ausgang bewacht
     2. ist eine zusaetzliche Funktion definiert
     3. gibt es ein Ziel

     Der Spieler wird nur zum Ziel bewegt, wenn keine Wache vorhanden ist
     und keine spezielle Funktion definiert ist oder die Funktion nicht Null
     zurueckgibt.

     Ist bei einem Spieler IS_LEARNING gesetzt (Magier!), wird er vom Waechter
     nicht aufgehalten.

     Optionale Argumente:
     - ist kein Ziel definiert, so wird der Spieler nur bewegt, wenn dies
       innerhalb der Funktion (EX_FUNC) vom Magier selber programmiert wird.
     - ist bei einem bewachten Ausgang keine Meldung fuer den Raum definiert,
       wird auch keine ausgegeben.
     - Ist keine Meldung fuer den Spieler definiert, erhaelt dieser eine
       Standardmeldung.

     Diese Version von AddExit() fasst die drei alten Funktionen AddExit(),
     AddSpecialExit() und AddGuardedExit() zusammen.

BEISPIELE:
   + Als 'klassischer' Ausgang in einen Raum, der im selben Verzeichnis liegt:

     AddExit("norden", "filename");

     Hiermit wird der Ausgang in den Raum "filename.c" hergestellt. Das File
     muss in demselben Verzeichnis liegen.

   + Wenn der Raum in einem anderen Verzeichnis liegt:

     AddExit("norden", ROOM "raum1");

     ROOM wird in "../def.h" definiert, das deswegen eingebunden werden sollte.

   - Alternativ moeglich, aber nicht erwuenscht ist:

     AddExit("norden", ([EX_DEST: ROOM "raum1"]));
       Die Mapping-Angabe ist ueberfluessig. Noch schlechter:
     AddExit("norden", ([EX_DEST: "/players/hadra/rooms/raum1"]));
       Der vollstaendige Pfad wird bei Aenderungen im Filesystem mit
       Sicherheit zu Bugs fuehren.

     Erwuenscht ist die 'Mappingschreibweise' allerdings bei Ausgaengen
     mit 'Sonderfunktionen':

   + Mit besonderer Message:

     AddExit("norden", ([EX_DEST: "/players/hadra/rooms/raum1",
                         EX_MSG:  "in den Testraum"]) );

   + Als 'special' Ausgang (ersetzt AddSpecialExit):

     AddExit("norden", ([EX_FUNC: #'my_check_func]) );
       Bei dieser Variante muss die Check-Funktion selbst dafuer sorgen,
       dass der Spieler an den richtigen Ort bewegt wird.

     AddExit("norden", ([EX_DEST: ROOM "raum1",
                         EX_FUNC: #'my_check_func]) );
       Hier wird der Spieler in den Zielraum bewegt, wenn die Check-
       Funktion einen Wert ungleich 0 zurueckgibt.

   + Als 'unsichtbarer' Ausgang (besser als GetExits zu manipulieren):

     AddExit("norden", ([EX_INVIS: 1]) );
     
   + Als Befehlsausgang (ist ebenfalls ein 'unsichtbarer' Ausgang):
     
     AddExit("norden", ([EX_DEST: "/d/inseln/test/test",
                         EX_VERB: ([EXV_VERB: ({"schwimm","schwimme"}),
                                    EXV_PLMSG: "Du schwimmst",
                                    EXV_RMMSG: "schwimmt",
                                    EXV_RMMSG2: "schwimmt herein"
                                  ]) ]) );
     // Besser P_EXIT_FAIL_MSGS zusaetzlich setzen:
     SetProp(P_EXIT_FAIL_MSGS,
             ([({"schwimm","schwimme"}):"Wohin moechtest Du schwimmen?\n"]));
                      
   + Als Ausgang, den MNPCs nicht benutzen koennen:

     AddExit("norden", ([EX_NO_MNPC: 1]) );
       Wichtig, wenn MNPCs einen Ausgang nicht benutzen koennen sollen.

   + Als 'guarded' Ausgang:

     AddExit("norden", ([EX_DEST: "/players/hadra/rooms/raum1",
                        EX_GUARD: ([EXG_ID: "EXG_stopper",
                                    EXG_PLMSG: "Der Stopper lacht Dich aus.\n"
                                  ]) ]) );

   + mit allem drum und dran:

     AddExit("norden", ([EX_DEST: "/players/hadra/rooms/raum1",
                        EX_MSG:  "in den Testraum",
                        EX_FUNC: #'my_check_function,
                        EX_GUARD: ([EXG_ID: "EXG_stopper",
                                  EXG_PLMSG: "Der Stopper lacht Dich aus.\n",
                                  EXG_RMMSG: "Der Stopper lacht @wen@ aus.\n"
                                  ]),
                        EX_INVIS: 1 ]) );

SIEHE AUCH:
     RemoveExit, NewDoor, process_string, closures, move, P_EXIT_FAIL_MSGS