Beispieldateien

Eine quietschende Rüstung

----------


// Eine quietschende Rüstung

// Sie gibt Quietsch-Chats von sich, wenn sie angezogen ist.
// Dazu lauscht sie auf ET_WEAR und ET_UNWEAR

// by Sunrise@Wunderland 2003


#pragma strong_types

inherit "armour";

#include <properties.h>     // die grundlegenden Properties
#include <events.h>         // für Events allgemein
#include <combat.h>         // die Rüstung

// Deklaration der Funktionen
void quietsch_start(mixed data, string type, int prio);
void quietsch_ende(mixed data, string type, int prio);
void quietschen();

void create()
{
  if (!clonep()) return;
  ::create();

  AddAdjective(({"quietschend", "quietschende", "quietschender", 
    "quietschenden"}));
  // Die Id "ruestung" haben alle Objekte, die von /std/armour" erben
  // automagisch. Deswegen brauchen wir das nicht setzen

  SetProp(P_NAME, "Ruestung");
  SetProp(P_PLURAL, "Ruestungen");
  SetProp(P_NAME_ADJ, "quietschend");
  SetProp(P_WEIGHT, 3000);
  SetProp(P_BULKINESS, 500);
  SetProp(P_GENDER, FEMALE);

  SetProp(P_ARMOUR_TYPE, AT_ARMOUR);
  SetProp(P_AC, 30);

  SetProp(P_LONG,
    "Diese Ruestung scheint schon sehr alt zu sein. Ausserdem quietscht sie "
    "sicherlich, wenn man sie traegt.");

  // Wenn die Rüstung angezogen wird, soll sie anfangen zu quietschen
  // Also lauschen wir auf den Anzieh-Event ET_WEAR und Reagieren darauf 
  // (EPRIO_REACT)
  listen_event(ET_WEAR, EPRIO_REACT, #'quietsch_start);
  // Wenn die Rüstung ausgezogen wird, soll das Quietschen natürlich aufhören
  listen_event(ET_UNWEAR, EPRIO_REACT, #'quietsch_ende);
}

void quietsch_start(mixed data, string type, int prio)
{
  // Wenn nicht diese Rüstung angezogen werden soll
  if (data[E_WEAR_ARMOUR] != this_object()) return;
  // Wenn der Anziehende kein Spieler ist
  if (!query_once_interactive(data[E_ACTOR])) return;

  call_out("quietschen", 10);
}


void quietsch_ende(mixed data, string type, int prio)
{
  // Wenn nicht diese Rüstung ausgezogen werden soll
  if (data[E_UNWEAR_ARMOUR] != this_object()) return;
  // Wenn der Ausziehende kein Spieler ist
  if (!query_once_interactive(data[E_ACTOR])) return;

  // Alle callouts fuer die Funktion "quietschen" stoppen.
  while (remove_call_out("quietschen") != -1);
}


void quietschen()
{
  // nochmal eine Sicherheitsabfrage, ob die Rüstung wirklich getragen ist:
  // QueryWornBy() ist dabei das Lebewesen, das die Rüstung traegt

  if (!QueryWornBy()) return;

  tell_room(environment(QueryWornBy()),
    QueryWornBy()->name(WESSEN, NAME_CAP|NAME_DEF)+" Ruestung quietscht.\n",
    ({QueryWornBy()}));

  tell_object(QueryWornBy(), "Deine Ruestung quietscht.\n");

  call_out("quietschen", 120);
}