Dokumentation zu: move(L)

HR Image


FUNKTION:
        #include <moving.h>

        varargs int move(mixed dest, int method, string dir, string* msgs)
        int move(mixed dest, int method); //bei !livings

        Veraltet (NICHT MEHR VERWENDEN!):
        varargs int move(mixed dest, int meth, string dir, string out,
        string in);

ARGUMENTE:
        dest:   Wohin soll das Objekt (String oder Objekt)
        method: Wie soll das Objekt bewegt werden
        dir:    String oder 0 der die Bewegungsrichtung enthaelt
        msgs:   Hier koennen Meldungen bei Betreten und Verlassen des
                Raumes gesetzt werden, wenn man nicht die vom Spieler
                gesetzten verwenden moechte

BESCHREIBUNG:
        Move bewegt das Objekt nach "dest". Beim Bewegen des Objektes
        werden einige Tests durchgefuehrt, die unterschiedliche Werte
        zurueckliefern. Die Fehler koennen dadurch gezielt ausgewertet
        werden. (In aller Regel wird ein Event erzeugt nach Art der Move-
        methode: ET_GO, ET_TPORT, ET_GET, ET_PUT, ET_GIVE, ET_DROP.)

        "method" kann aus den unten aufgefuehrten Makros zusammengesetzt
        werden. Irgendein Wert ist auf jeden Fall zu benutzen! Die einzelnen
        Werte verknuepft man mit 'logisch-oder' (|).

        Bei Livings MUSS M_GO oder M_TPORT angegeben werden, damit ein
        Event erzeugt wird, es sei denn das Living ist ein nehmbarer
        NPC. Fuer nehmbare NPCs sind auch die anderen Methoden erlaubt;
        ist eins von M_GET, M_DROP, M_GIVE, M_PUT gesetzt, so wird
        M_SILENT automatisch mitgesetzt; ist keine Methode gesetzt,
        so wird mit M_TPORT bewegt.
        Bei !Livings MUSS M_GET, M_PUT, M_GIVE oder M_DROP angegeben
        werden, damit ein Event erzeugt wird. Der Event kann dennoch
        unterdrueckt werden mit zusaetzlicher Methode M_NOEVENT.
        M_NOCHECK unterdrueckt den Event ebenfalls. Es ist aber
        nach aller Moeglichkeit IMMER ein Event zu senden, damit andere
        Objekte die Moeglichkeit haben, darauf zu reagieren. M_NOEVENT
        und M_NOCHECK sollten deshalb im wesentlichen der Mudlib vorbe-
        halten sein. Verwendung bitte mit einem Region/Erzmagier absprechen!

        Ist "msgs" Null, so werden die (moeglichen) Bewegungsmeldungen
        vom Lebewesen selbst erzeugt. Dazu wird P_MMSGIN usw benutzt.
        Moechte man andere Ausgaben erzeugen, so ist "msgs" zu setzen
        in der Art ({ Meldung an Lebewesen selbst, Meldung an verlassenen
        Raum, Meldung an betretenen Raum }). Dabei werden in den Strings
        "&Name" und "&name" durch den Namen des Lebewesens ersetzt.
        Sind einzelne Elemente Null, so werden diese automatisch er-
        zeugt, sind sie "", also leere Strings, so werden sie unter-
        drueckt. Alle Texte werden bei der Ausgabe umgebrochen.

        Hat man jedoch ein Lebewesen, welches auf jeden Fall mit den
        eigenen Meldungen bewegt werden soll, so ist in diesem die
        Eigenschaft P_MSG_FORCE zu setzen. Eventuell angegebene "msgs"
        werden dann ignoriert.

        Soll in den ganz wenigen verbliebenen Ausnahmefaellen auch solch
        ein Lebewesen mit den beim move() uebergebenen Meldungen bewegt
        werden, so ist M_MY_MSG bei method mitanzugeben.

        Herrscht in einem der Raeume Dunkelheit so wird die entsprechende
        Meldung nicht ausgegeben. Ebenso wenn ein unsichtbarer Magier
        bewegt wird. Ausnahme hiervon Bewegungen mit M_MY_MSG, wo die
        Verantwortung der Ausgaben vollstaendig beim aufrufenden Objekt
        liegt.

        Zum Bewegen gibt es verschiedene Methoden:

        FUER LIVINGS:

        M_GO :          wie normales Gehen
        M_TPORT :       Teleporting (magische Bewegung)
        M_SILENT :      ohne Mitteilung an den Raum
        M_NO_SHOW :     Zeigt nicht die Raumbeschreibung beim Ankommen
        M_NO_ATTACK :   Es wird kein Begruessungsschlag ausgefuehrt
        M_MY_MSG :      Es werden auf jeden Fall die angegeben Meldungen
                        verwendet, auch wenn im Lebewesen P_MSG_FORCE

        FUER OBJEKTE:

        M_GET :   z.B. vom Raum zum Living
        M_PUT :   z.B. vom Living in einen Behaelter oder auf einen Tray
                       (im Sinn von Ablegen, Reinstecken)
        M_GIVE :  z.B. von Living zu Living
        M_DROP :  z.B. vom Living zum Raum (im Sinn von Fallenlassen)

        FUER UNITS:

        M_MOVE_ALL:     bewegt ein komlettes Unitobjekt
        M_FORCE_SPLIT:  bewegt Teile davon
        M_NO_JOIN:      verhindert das automatische 'Vereinigen' von Units

        FUER ALLE: (Benutzung bitte mit Regions/Erzmagier absprechen!!!)

        M_NOCHECK:      es werden keinerlei Tests durchgefuert und es wird
                        KEIN EVENT erzeugt. ( Units werden aber vereinigt! )
        M_NOEVENT       es wird kein Event erzeugt.

        Haeufig wir M_NOCHECK benutzt, wenn ein Objekt in einen Raum bewegt
        wird, weil es so schoen einfach ist. Da Raeume aber keine Pruefungen
        auf Gewicht/Bulkiness/etc. unternehmen (sollten), ist dies ueber-
        ssig! Das Moven wird am Raum nicht scheitern und wenn einen vernuenf-
        tige Move-Methode benutzt wird, haben Event-Lauscher Gelegenheit,
        darauf zu reagieren. Objekte in ein Living zu moven ohne Methode
        und mit M_NOCHECK oder M_NOEVENT ist ebenfalls ein schlechter Stil.
        Damit wird die Bulkiness/Gewichtskontrolle bei Livings voellig aus-
        gehebelt!

RÜCKGABEWERT:
        Erfolgsmeldung:
          MOVE_OK (1)                : Bewegung durchgefuehrt
          MOVE_OK_SILENT (2)         : Bewegung still durchgefuehrt
        Misserfolg:
          ME_PLAYER (-1)             : ist ein Living
          ME_TOO_HEAVY (-2)          : Objekt ist zu schwer
          ME_CANT_TPORT_IN (-3)      : es kann nicht hineintelepotiert werden
          ME_CANT_TPORT_OUT (-4)     : hier darf nicht telepotiert werden
          ME_CANT_BE_DROPPED (-5)    : Objekt kann nicht abgelegt werden
          ME_CANT_BE_TAKEN (-6)      : Objekt kann nicht genommen werden
          ME_CANT_BE_INSERTED (-7)   : Behaelter verhindert das Reinlegen
          ME_TOO_BULKY (-8)          : Objekt ist zu sperrig
          ME_WORN (-9)               : Ruestung ist noch angezogen
          ME_WIELDED (-10)           : Waffe ist noch gezueckt
          MOVE_EVENT_CANCELLED (-11) : Das Bewegen wurde abgebrochen, ohne
                                       dass ein Grund angegeben wurde. Eine
                                       Begruendung muss idr der Abbrecher
                                       ausgeben.
          ME_DESTRUCTED (-12)        : Das Objekt wurde bei der Bewegung
                                       zerstoert.

BEMERKUNGEN:
        Die Methoden/Events kann man nochmal in /sys/moving.h nachlesen.

BEISPIELE:
        Das Beispiel teleportiert den Spieler mit Event in den Wohnwagen:
        Bitte 'result' auswerten, wenn es sehr wichtig ist!

        result = spieler->move("/room/wohnwagen", M_TPORT,
            "in den Wohnwagen", ({"Du fliegst in den Wohnwagen.",
            "&Name fliegt in den Wohnwagen.", "&Name kommt angeflogen."}) );

        Naechstes Beispiel bewegt die Fackel mit Event in den Spieler:
        Bitte 'result' IMMER AUSWERTEN!!!

        result = fackel->move(spieler, M_GET);
        if (result < MOVE_OK)
        {
          // Fehlerbehandlung
          write("Du kannst die Fackel nicht mehr tragen.\n");
          ...
        }
        else
        {
          // Erfolgsbehandlung
          write("Du nimmst die Fackel.\n");
          ...
        }

        Folgendes Beispiel ist ein Notfall-Teleport fuer diverse Tools. Es
        ist hier nicht erwuenscht, dass irgendwer das verhindert:

        spieler->move("/room/void", M_TPORT|M_NOCHECK);

SIEHE AUCH:
        moving(C), move_object(E), events(WL), ET_GO(WL), ET_TPORT(WL),
        ET_GET(WL), ET_PUT(WL), ET_DROP(WL), ET_GIVE(WL)


Start » Magierhandbuch » Docu » Lfun » Move Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!