inherit "/std/npc";

#include __PATH__(1)"defs.h"


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

  /* Diese Func der Mudlib sollte man benutzen, um die meisten Werte passend
     voreinzustellen: */
  create_default_npc(20, 300);

  SetProp(P_SHORT, "Ein langweiliger Zwerg");
  SetProp(P_LONG, BSLF(
    "Dieser Zwerg ist ziemlich langweilig, denn er kann nur rumstehen. Das "
    "dafuer aber ganz exzellent. Er hat ja nichtmal Details."));
  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);

  // Diese drei Props behandeln das Ableben:
  SetProp(P_MURDER_MSG,
    "He! Ich gehoere doch zu Notstroms Magiertutorial, %s.");
  /* P_FORCE_MURDER_MSG bitte nur in Ausnahmefaellen verwenden. Die ist
     hier gesetzt, damit man die Moerdermeldung besser testen kann. */
  SetProp(P_FORCE_MURDER_MSG, 1);
  SetProp(P_DIE_MSG, " kippt um wie eine leere Bierflasche.\n");

  SetProp(P_MSGIN,
    "schleicht sich heimlich rein");


  // Details funktionieren genau wie die von Raeumen:
  AddDetail("details", BSLF(
    "Ok ok, ich hab gelogen. Verklag mich doch!"));


  // Natuerlich kann man NPCs auch befragen:
  AddInfo(DEFAULT_INFO,
    "kann nur dusslig rumstehen, echt.\n");

  AddInfo("details",
    "Die kann man untersuchen, nicht erfragen.",
    "nickt: ");

  /* Und auch Commands funktionieren wie in Raeumen. Spannend ist @ID, damit
     kann man einen NPC mit allen seinen IDs (s.a. AddId()) ansprechen. */
  AddCmd("verklag|verklage&@ID&\n\bimpossible", 0,
    "Wen willst Du verklagen?|"
    "Nein, das klappt nicht. Aber dafuer kannst Du ihn verkloppen, das macht "
    "doch auch Spass?^"
    "@WER1 versucht den Rechtsweg, scheitert aber an Notstroms "
    "Magierwillkuer (woran sonst).^");
}

