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