Beispieldateien

Ein Schild mit dem Zeichen Willinas

----------


// 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
}