-------- 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)
|