/*
  Manchmal moechte man ja einem NPC eine ordentliche Waffe geben, die dann
  aber fuer Spieler nicht so geeignet oder schlicht zu gut waere. In diesem
  Fall ist eine Moeglichkeit, die Waffenwerte abhaengig von demjenigen zu
  setzen, der sie gerade dabeihat.
*/
inherit "/std/weapon";

#include __PATH__(1)"defs.h"


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

  SetProp(P_SHORT, "Eine besondere Axt");
  SetProp(P_LONG, BSLF(
    "Dies ist die Axt von Kawumm, dem Zwerg. Niemand kann so damit zuhauen "
    "wie er."));

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

  /* Dies ist Kawumms persoenliche Axt, und mit der macht er mehr Schaden als
     jeder andere. Gleichzeitig ist dies ein Beispiel dafuer, wie man eine
     Prop mit einer Closure setzt. Da F_QUERY_METHOD angegeben ist, wird die
     eingebundene Inline-Function jedesmal ausgefuehrt, wenn der Wert von P_WC
     abgefragt wird, also z.B. auch bei jedem Attack().
     Der umgekehrte Fall waere, wenn wir F_SET_METHOD verwenden, dann wuerde
     die Inline-Function ausgefuehrt, wenn jemand SetProp(P_WC) aufruft. */
  Set(P_WC, function int() {
    if (load_name(ENV()) == __PATH__(1)"npc/zwerg5")
      return 180;
    return 100;
  }, F_QUERY_METHOD);

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

  SetProp(P_MATERIAL, ([MAT_STEEL:100]));
}

