inherit "/std/npc";

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

#define MYPROP "notstrom_tutorial2018_beispiel1"

private string look();
private int hauen();

private mapping hauer = ([]);

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

  create_default_npc(20, 600);

  SetProp(P_SHORT, "Ein Zwerg");
  Set(P_LONG, #'look, F_QUERY_METHOD);
  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);

  AddCmd("hau|haue&@ID", #'hauen,
    "Wen willst Du hauen?");
}

void reset() {
  ::reset();

  if (sizeof(hauer)) {
    tell_room(ENV(), BSLF(
      "Kawumm vergisst, von wem er schon alles gehauen wurde. Seine "
      "Blessuren verschwinden wie von Magierhand."));
    hauer = ([]);
  }
}

private string look() {
  string msg = "Dies ist Kawumm, der Zwerg. ";
  if (!sizeof(hauer)) {
    msg += "Niemand hat ihm bisher eins auf die Omme gehauen, obwohl er so "
      "verfuehrerisch herumsteht.\n";
  } else {
    msg += "Er hat schon durchaus was auf die Omme bekommen, und zwar von "+
      CountUp(m_indices(hauer))+".\n";
  }
  msg += "Wenn Du ihm was draufsemmeln willst, dann versuche einfach:\n"
    "  haue kawumm";
  return BSLF(msg);
}

private int hauen() {
  if (TP->QueryProp(MYPROP)) {
    tell_object(TP, BSLF(
      "Aber nicht doch. Du hast Kawumm bereits gehauen."));
  } else {
    tell_object(TP, BSLF(
      "Gut, Du haust also Kawumm welche auf die Omme. Kawumm zuckt kurz, "
      "steht dann aber unbewegt weiter rum. Er hat sich das aber bestimmt "
      "gemerkt ..."));
    tell_room(ENV(), BSLF(
      TPN+" haut Kawumm eins auf die Omme. Dem scheint das aber nicht viel "
      "auszumachen. Typisch Zwerg, solange er Alk kriegt, ist er zufrieden."),
      ({TP}));
    TP->SetProp(MYPROP, 1);
    m_add(hauer, capitalize(TP->query_real_name()), 1);
  }
  return 1;
}

public string get_gehauen() {
  if (!sizeof(hauer)) return 0;
  return CountUp(m_indices(hauer));
}
