// Ein Schild mit dem Zeichen Willinas
// Da Willina eine der guten Feen des Wunderlandes ist, muss
// man sich würdig erweisen, um das Schild zücken zu
// dürfen.
inherit "std/armour";
#include <properties.h>
#include <combat.h>
#include <events.h>
// Die Funktion, die vom Event aufgerufen werden soll
void abbrechen(mixed data, string type);
void create()
{
if (!clonep()) return;
::create();
SetProp(P_NAME, "Schild");
SetProp(P_PLURAL, "Schilde");
SetProp(P_LONG,
"Ein Schild. Er traegt das Zeichen der guten Fee Willina.");
SetProp(P_GENDER, MALE);
AddId("schild", "schilde");
SetProp(P_WEIGHT, 1000);
SetProp(P_BULKINESS, 100);
SetProp(P_VALUE, 400);
SetProp(P_ARMOUR_TYPE, AT_SHIELD);
SetProp(P_AC, 28);
AddDetail(({"zeichen", "willina", "fee"}),
"Der Schild traegt das Zeichen Willinas. Du solltest Dich seiner wuerdig "
"erweisen.");
// Wir melden uns beim Eventhandler an.
// Wir lauschen dem Event ET_WIELD, weil Schilde gezückt werden, mit der
// Prioritaet EPRIO_CANCEL, weil wir nur abbrechen wollen. Und geben die
// Funktion abbrechen als aufzurufende Funktion an.
listen_event(ET_WIELD, EPRIO_CANCEL, #'abbrechen);
}
void abbrechen(mixed data, string type)
{
object pl;
// Wenn nicht dieser Schild im Event-Mapping steht, brechen wir ab
if (data[E_WIELD_WEAPON] != this_object()) return;
// Wenn es keinen Akteur gibt, brechen wir auch ab
if (!data[E_ACTOR]) return;
// Wenn die Gesinnung des Akteurs zu schlecht ist, darf er das Schild nicht
// fuehren.
if ((data[E_ACTOR]->QueryProp(P_ALIGN)) < 300)
cancel_event("Die Stimme Willinas ertoent: Du bist nicht "
"wuerdig, diesen Schild zu fuehren!\n");
// Achtung! Wenn beim Abbruch mehr als nur diese eine Textausgabe an den
// Akteur erfolgen soll, muss dem Event noch zusaetzlich mit EPRIO_C_HANDLE
// gelauscht werden, und das dann dort passieren. Siehe dazu auch ruestung3.c
}
|