inherit "/std/npc";

#include <new_skills.h>
#include __PATH__(1)"defs.h"


protected void create() {
  if (!clonep()) {
    set_next_reset(-1);
    return;
  }
  ::create();

  create_default_npc(20, 600);

  SetProp(P_SHORT, "Ein spiegelblanker Zwerg");
  SetProp(P_LONG, BSLF(
    "Dieser Zwerg ist (oha!) FRISCHGEWASCHEN!!\n"
    "Er ist so spiegelblank, dass Du Dir tatsaechlich vorstellen kannst, "
    "dass er nicht nur Licht, sondern noch viel mehr reflektiert."));
  SetProp(P_NAME, "Kawumm");
  SetProp(P_ARTICLE, 0);
  SetProp(P_GENDER, MALE);

  AddId(({"zwerg", "kawumm"}));
  SetProp(P_ALIGN, 100);
  SetProp(P_RACE, "Zwerg");
  SetProp(P_SIZE, 102);

  SetProp(P_MURDER_MSG,
    "He! Ich gehoere doch zu Notstroms Magiertutorial, %s.");
  SetProp(P_DIE_MSG, " kippt um wie eine leere Bierflasche.\n");
}

/* Defend() wird aufgerufen, wenn dieses Objekt etwas auf die Omme bekommt -
   oder bekommen soll. Resistenzen erledigt man am besten ueber die Prop aus
   dem vorangegangenen Beispiel, aber manchmal moechte man ja etwas machen,
   was ein wenig lustiger ist. */
public int Defend(int dam, string|string* dam_type, int|mapping spell,
                        object enemy) {
  if (mappingp(spell) && spell[SP_PHYSICAL_ATTACK]) {
    tell_object(enemy, BSLF(
      "Kawumm ist so glaenzend plankpoliert, dass er Deinen Angriff glatt "
      "reflektiert."));
    tell_room(ENV(enemy), BSLF(
      "Kawumm ist so glaenzend plankpoliert, dass er den Angriff von "+
      enemy->name()+"glatt reflektiert."),
      ({enemy}));

    m_add(spell, SP_RECURSIVE, 1);
    enemy->Defend(dam, dam_type, spell, enemy);
    /* Wir geben hier 0 zurueck, sind also vollstaendig immun gegen
       Spells ohne physische Schadenskomponente. Man koennte auch einen
       kleinen Teil des Schadens durchkommen lassen, aber dann haette
       der Zwerg einen anderen Namen: */
    return 0;
  }
  return ::Defend(dam, dam_type, spell, enemy);
}
