Dokumentation zu: ET_WEAR(WL)

HR Image


-------- PROVISORIUM -------

EVENT-TYPEN
        ET_WEAR    - der 'Anzieh'-Event fuer Ruestungen.
        ET_UNWEAR  - der 'Auszieh'-Event fuer Ruestungen.

BEDEUTUNG
        Wenn ein Lebewesen eine Ruestung an- oder auszieht, werden
        diese Events ausgeloest. Auf diese Ereignisse kann dann
        reagiert werden.
        Obwohl Schilde Ruestungen sind, wird fuer sie ET_WIELD gesendet,
        wenn sie gezueckt werden; siehe dort.
        Auf Grund der Aehnlichkeit von ET_WEAR und ET_UNWEAR steht
        diese Manpage fuer beide Events.

DEFAULT HANDLER
        /global/handler/armour.c

EVENT DEFINES
        /sys/events.h
        /sys/combat.h

EVENT DATEN
        Das Event-Mapping enthaelt folgende Daten:

        Key            | Inhalt
        ---------------+----------------------------------------------------
        Eintraege, die automatisch gesetzt werden (NICHT VERAENDERN!)
        E_SENDER       | (object) Event-Erzeuger. (Meist das Lebewesen)
        E_DESTINATIONS | (array) Objekte, an die der Event gesandt wird. (Im
                       | Normalfall der Start- und Zielraum)
        E_COMMAND      | (string) Das eingegebene Kommando. (Der Ausgang)
                       | Kann auch 0 sein! (siehe Manpage zu query_command()
        E_USE_NFAIL    | (int) 0 oder 1. Ist es 1 soll zum Setzen der
                       | Cancel-Message notify_fail() benutzt werden, an-
                       | sonsten tell_object()

        Daten, die veraendert werden duerfen:
        E_WEAR_ARMOUR  | (object) Die Ruestung, die angezogen werden
                       | soll. (nur ET_WEAR!)
        E_UNWEAR_ARMOUR| (object) Die Ruestung, die ausgezogen werden
                       | soll. (nur ET_UNWEAR!)
        E_ACTOR        | Das agierende Lebewesen.
        E_WEAR_FLAGS   | Flags ueber die Handhabung des Ereignisses
                       | (sowohl fuer ET_WEAR als auch ET_UNWEAR) s. u.

        Nach oder waehrend der Abarbeitung EVENTUELL enthalten:
        E_HANDLED      | (int) Wenn gesetzt, wurde der Event ausgefuehrt.
        E_HANDLER      | (object) Der ausfuehrende Handler.
        E_CANCELLED    | (mixed) Wenn gesetzt, wurde der Event abgebrochen.
                       | Der Inhalt sollte immer 1 sein.
        E_CANCELLER    | (object) Das abbrechende Object.

EVENT-LAUSCHER
        Siehe allgemeine Syntaxen in event_listeners(WL).

EVENT-SENDER
        Siehe allgemeine Syntaxen in event_senders(WL). Gesendet werden
        muessen mindestens:
        E_WEAR_ARMOUR bzw. E_UNWEAR_ARMOUR, E_ACTOR

        Automatisch werden immer gesetzt:
        E_SENDER, E_DESTINATION und E_COMMAND.

        Ziel des Events sollte immer die Umgebung des Agierenden sein,
        bzw. dessen aeusserstes Environment, falls sich ein Raum in einem
        anderen Raum befindet. (all_environment(raum)[<1])

BESCHREIBUNG
        Der ET_WEAR oder ET_UNWEAR Event wird erzeugt, wenn die Ruestung
        NICHT mit E_SILENT an- bzw. ausgezogen wurde.

        Der Event geht mit Prioritaet EPRIO_DEF_HANDLE (0) an den Default-
        Handler (siehe oben).

        ACHTUNG! Abbruchmeldungen MUESSEN als string oder closure im
        cancel_event() angegeben werden!

        Der Event kann mit 2 Moeglichen Flags gesendet werden, die im
        Datenfeld E_WEAR_FLAGS uebergeben werden:

            WEAR_SILENT   |  Es soll keine Meldung an Spieler/Umstehende
                          |  erfolgen.
            WEAR_NOFORCE  |  Es sollen keine Ruestungen ausgezogen werden (nur
                          |  bei ET_WEAR)

BEISPIELE:

        1) Eine Ruestung, die bei jedem Anziehen ein bisschen mehr
           kaputt geht:

        #include <combath.h>
        #include <events.h>

        void wear_event(mapping data, string type); //Deklaration

        void create()
        {
          ...
          // Anmelden zum Lauschen auf den WEAR-Event
          listen_event(ET_WEAR, EPRIO_REACT, #'wear_event);
        }

        void wear_event(mapping data, string type)
        {
          int lifetime;
          if (data[E_WEAR_ARMOUR] != ME) return;
          if (data[E_ACTOR] != QueryProp(P_WORN)) return;
          lifetime = QueryProp(P_LIFETIME);
          lifetime = lifetime/20;
          SetProp(P_LIFETIME, lifetime);
          tell_object(data[E_ACTOR], break_string(
            "Huch! Du solltest beim Anziehen der Ruestung vorsichtiger "
            "sein. Da hat gerade eben etwas ganz komisch geknackst. Das "
            "tat der Ruestung sicherlich gar nicht gut."));
        }

        2) Ein Raum, in dem man Ruestungen weder an- noch ausziehen
           kann. (Z.B. weil man an einem Seil haengt)

        #include <combath.h>
        #include <events.h>

        void nix_da(mapping data, string type); //Deklaration

        void create()
        {
          ...
          // Anmelden zum Lauschen auf den WEAR-Event
          listen_event(ET_WEAR,   EPRIO_CANCEL, #'nix_da);
          listen_event(ET_UNWEAR, EPRIO_CANCEL, #'nix_da);
        }

        void nix_da(mapping data, string type)
        {
          if (environment(data[E_ACTOR]) != ME) return;
          cancel_event(break_string(
            "Du haeltst Dich gerade am Seil fest, dazu brauchst Du "
            "all Deine Haende."));
          // Der String wird _nicht_ automatisch umgebrochen!
        }

SIEHE AUCH
        events(WL), event_types(WL), event_prioritaeten(WL),
        listen_event(S)


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