// Fuer Waffen allgemein bitte "man waffen" lesen!
inherit "/std/weapon";

#include __PATH__(1)"defs.h"


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

  SetProp(P_SHORT, "Eine einfache Axt");
  SetProp(P_LONG, BSLF(
    "Eine echte Waffe! Toll! Da Details und Commands wieder genauso "
    "funktionieren wie in NPCs oder Raeumen, sparen wir uns die hier mal.\n"
    "Bedenke bei beidem allerdings, dass der Spieler den Gegenstand mit "
    "sich traegt. Ein Standardverb als Command zu ueberschreiben, kann also "
    "schnell fuer Frust sorgen, wenn sich das angesprochen fuehlt statt dem "
    "Verb im Raum. Ebeneso bei Details, man denke an die Decke, die man als "
    "Questbelohnung von Chilana erhaelt, und die damit jeden Anfaenger in "
    "den Wahnsinn treibt. Weniger kann also auch hier mehr sein."));

  SetProp(P_NAME, "Axt");
  SetProp(P_GENDER, FEMALE);
  AddId(({"axt"}));

  /* Die "Weapon Class" ist der Wumms, den die Waffe hat. Hierfuer unbedingt
     "man grenzwerte" lesen! */
  SetProp(P_WC, 80);
  // Hier "man schadenstypen" konsultieren:
  SetProp(P_WEAPON_TYPE, WT_AXE);
  SetProp(P_DAM_TYPE, DT_SLASH);
  SetProp(P_NR_HANDS, 1);

  SetProp(P_VALUE, 200);
  SetProp(P_WEIGHT, 3250);
  SetProp(P_SIZE, 90);

  // Hierfuer mal "man materialliste" angucken:
  SetProp(P_MATERIAL, ([MAT_STEEL:100]));
}

