/*
  Eine andere Moeglichkeit, eine Waffe nur fuer einen NPC zur Verfuegung zu
  stellen ist ein wenig frustrierender fuer Spieler. Man sollte Beispiele
  wie dieses nicht ungeprueft uebernehmen. Waffen, die kein Spieler zuecken
  kann, stossen meist nicht auf sehr hohen Enthusiasmus beim Spieler, die
  betreffende Gegend mehrmals zu aufzusuchen.
*/
inherit "/std/weapon";

#include <new_skills.h>
#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"}));

  SetProp(P_WC, 180);
  SetProp(P_WEAPON_TYPE, WT_AXE);
  SetProp(P_DAM_TYPE, DT_SLASH);
  SetProp(P_NR_HANDS, 1);

  SetProp(P_RESTRICTIONS, ([SR_FUN: "wield_check"]));

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

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

public string wield_check(object caster, mapping sinfo) {
  if (interactive(ENV()))
    return BSLF(
      "Dies ist Kawumms persoenliche Axt. Sie ist so dermassen unhandlich, "
      "dass Du sie nicht zuecken kannst.");
  return 0;
}
