Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc/lfun/NewDoor

NewDoor()
*********


FUNKTION
========

   varargs int NewDoor(string|string* cmds, string dest, string|string* ids,
                       mapping|* props);


DEFINIERT IN
============

   /std/room/doors.c


ARGUMENTE
=========

   cmds (string|string*)
        String oder Array von Strings mit den Befehlen, mit denen man
        durch die Tuer geht (in der Regel Richtungen wie "norden").
   dest (string)
        Pfad des Zielraumes, OHNE ".c", sonst wird eine zweiseitige Tuer
        (wie sie ueblich ist) nicht als solche erkannt.
   ids (string|string*)
        String oder Array von Strings mit den Bezeichnern der Tuer. Kann
        auch 0 sein; in diesem Fall laesst sich die Tuer nur als "tuer"
        ansprechen.
   props (mapping|*)
        Die Eigenschaften der Tuer (s.u.).


BESCHREIBUNG
============

   Es wird eine neue Tuer geschaffen. Die Tuer laesst sich, wenn sie
   geoeffnet ist, mit den in  angegebenen Befehlen durchschreiten.
   Man gelangt dann in den Raum .

   Die Kommandos werden bei geoeffneter Tuer in die Liste der sichtbaren
   Ausgaenge eingefuegt.

   In  lassen sich Aussehen und Eigenschaften der Tuer festlegen.
   Historisch ist es ein Array mit Paaren von Schluesseln und Werten, d.h.
   es kommt immer erst ein Element, welches die Eigenschaft bezeichnet und
   dann ein Element mit dem Wert dieser Eigenschaft.
   Moderner ist es, ein Mapping mit den entsprechenden Schluesseln und
   Werten zu uebergeben. Dies ist auch dringend empfohlen.

   In  sind dazu folgende Eigenschaften definiert:
   D_FLAGS
        DOOR_OPEN
             Die Tuer ist beim Erzeugen geoeffnet.
        DOOR_CLOSED
             Die Tuer ist beim Erzeugen geschlossen.
        DOOR_NEEDKEY
             Man benoetigt einen Schluessel zum Oeffnen der Tuer.
        DOOR_CLOSEKEY
             Man benoetigt einen Schluessel zum Schliessen der Tuer.
        DOOR_RESET_CL
             Die Tuer schliesst sich beim Reset.
        DOOR_RESET_OP
             Die Tuer oeffnet sich beim Reset.

   D_LONG
        Die Langbeschreibung der Tuer.
        Hier kann ein Mapping eingetragen werden, das als Keys den Tuer-
        Status hat und die zugehoerige Langbeschreibung dazu. Beispiel:
        ([ D_STATUS_CLOSED : "Die Tuer ist geschlossen.\n",
           D_STATUS_OPEN   : "Die Tuer ist offen.\n" ])

        Default: "Eine Tuer.\n"

   D_SHORT
        Die Kurzbeschreibung der Tuer. Ein "%s" wird durch "geoeffnet"
        bzw. "geschlossen" ersetzt.

        Es werden die Kurzbeschreibungen aller im Raum vorhandenen Tueren
        aneinandergehaengt (es wird jeweils ein Leerzeichen eingeschoben),
        das Ganze mit break_string() umgebrochen und an P_INT_LONG
        angehaengt.

        Default: "Eine %se Tuer."

   D_NAME
        Der Name der Tuer. Dieser Name wird beim Oeffnen und Schliessen
        der Tuer sowie bei Fehlermeldungen ausgegeben. Man kann wie bei
        P_NAME einen String oder ein Array von Strings angeben.

        Default: "Tuer"

   D_GENDER
        Das Geschlecht der Tuer.

        Default: FEMALE

   D_MSGS
        String oder Array von drei Strings. Diese Strings werden beim
        Durchschreiten der Tuer an move() als dir bzw. dir, textout und
        textin uebergeben.

   D_FUNC
        String mit dem Namen einer Funktion, die im Startraum vor dem
        Durchschreiten der Tuer aufgerufen werden soll. Diese Funktion
        kann das Durchschreiten jedoch nicht verhindern!

   D_FUNC2
        String mit dem Namen einer Funktion, die im Zielraum nach dem
        Durchschreiten der Tuer aufgerufen werden soll.

   D_TESTFUNC
        Falls auf den Namen einer Funktion gesetzt, wird diese Funktion
        vor dem Durchschreiten im Startraum aufgerufen. Wenn sie einen
        Wert != 0 zurueckliefert, wird die Tuer NICHT durchschritten.

   D_RESET_MSG
        Meldung, die beim Reset der Tuer ausgegeben wird.

   D_OPEN_WITH_MOVE
        Tuer oeffnet automatisch bei Eingabe des Befehls zum
        Hindurchgehen.


RUECKGABEWERT
=============

   1, wenn die Tuer ordungsgemaess eingebaut werden konnte, sonst 0.


BEMERKUNGEN
===========

   Zwei Tuerseiten gelten als verschiedene Seiten einer Tuer, wenn als
   Ziel in Raum A Raum B und in Raum B Raum A angegeben ist. Der Zustand
   wird abgefragt, wenn der Raum betreten wird (init), wenn die Tuer
   geoeffnet/geschlossen wird, P_INT_LONG oder P_EXITS abgefragt wird
   und beim Reset.

   Es sind auch Tueren moeglich, die nur auf einer Seite existieren, oder
   auch solche, die auf beiden Seiten verschieden aussehen oder gar auf
   einer Seite nur mit einem Schluessel zu oeffnen sind, auf der anderen
   jedoch kein Schluessel noetig ist.

   Wer aus irgendeinem Grund den Zustand einer Tuer selber abfragen oder
   veraendern will, kann dafuer in /obj/doormaster die Funktionen
   QueryDoorStatus(ziel) bzw. SetDoorStatus(ziel,status) aufrufen.

   *** ACHTUNG ***
   Es gibt eine Questbelohnung (Phiole aus der Sternenlicht-Quest von
   Miril), mit der man durch Tueren hindurchschauen kann. Derzeit ist das
   per default fuer alle Tueren erlaubt. Wenn man das nicht moechte,
   oder andere Texte ausgeben, als die Phiole normalerweise erzeugt,
   dann kann man dies durch Nutzung bestimmter Funktionen bzw. Flags
   erreichen. Zur Dokumentation siehe Manpage zu GetPhiolenInfos().


BEISPIELE
=========

   ** Dies ist eine gewoehnliche Tuer ohne Besonderheiten und ohne
      Extra-Beschreibung:

      NewDoor("sueden","/players/rochus/room/test1");

   ** Ein Portal:

      NewDoor("norden","/players/rochus/room/test2",
              "portal",
              ([ D_NAME:   "Portal",
                 D_GENDER: NEUTER,
                 D_SHORT:  "Im Norden siehst Du ein %ses Portal.",
                 D_LONG:   "Das Portal ist einfach nur gigantisch.\n",
               ]) );

      Alternativ mit props in alter Arraynotation:
      NewDoor("norden","/players/rochus/room/test2",
              "portal",
              ({ D_NAME,   "Portal",
                 D_GENDER, NEUTER,
                 D_SHORT,  "Im Norden siehst Du ein %ses Portal.",
                 D_LONG,   "Das Portal ist einfach nur gigantisch.\n"
               }) );



   ** Tueren mit Bewegungsmeldung:

      NewDoor("norden","/room/see2",
              ({"gitter","eisengitter"}),
              ({ D_MSGS,  ({"nach Norden","schwimmt",
                            "schwimmt von Sueden herein"}),
                 D_GENDER, NEUTER}) );

   ** Eine Tuer mit Testfunktion:

      NewDoor("osten","/mein/zielraum",
              ({"tuer"}),
              ({ D_TESTFUNC, "blocker_da" }) );

      Die Funktion blocker_da:

      int blocker_da()      // KEINE protected-Funktion! Sie wird sonst NICHT
      {                     // aufgerufen und ausgewertet!
        if ( present("mein_fieses_mo\nster",this_object()) )
        {
          tell_object(this_player(),
              "Ein fieses Monster stellt sich Dir in den Weg.\n");
          return 1;
        }
        return 0;
      }

   ** Nun noch eine Tuer mit einigen Extras:

      NewDoor("nordwesten","/rooms/kammer",
              ({"tuer","holztuer"}),
              ({
                D_FLAGS, (DOOR_CLOSED|DOOR_RESET_CL),
                D_MSGS,  ({"nach Nordwesten","geht",
                         "kommt durch eine Tuer herein"}),
                D_SHORT, "Im Nordwesten siehst Du eine %se Holztuer.",
                D_LONG,  "Sie trennt den Laden vom dahinterliegenden Raum.\n",
                D_NAME,  "Holztuer",
                D_FUNC,  "view",
                D_FUNC2, "look_up"
              }) );

      Im Startraum:

      void view()
      {
        tell_object(this_player(), break_string("Der Angestellte wirft Dir "
          "einen missbilligenden Blick zu, laesst Dich aber passieren.",78));
      }

      Im Zielraum:

      void look_up()
      {
        tell_object(this_player(), break_string("Ein alter Mann schaut kurz "
          "zu Dir auf und vertieft sich dann wieder in seine Akten.",78));
      }


SIEHE AUCH
==========


QueryDoorKey(), QueryDoorStatus(), SetDoorStatus(), /std/room/doors.c, /obj/doormaster.c, GetPhiolenInfos(), QueryAllDoors()

08.02.2015, Arathorn


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.