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(
      "Krawumm vergisst, von wem er schon alles gehauen wurde. Seine "
      "Blessuren verschwinden wie von Magierhand."));
    hauer = ([]);
  }
}

private string look() {
  string msg = "Dies ist Krawumm, 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 krawumm";
  return BSLF(msg);
}

private int hauen() {
  if (TP->QueryProp(MYPROP)) {
    tell_object(TP, BSLF(
      "Aber nicht doch. Du hast Krawumm bereits gehauen."));
  } else {
    tell_object(TP, BSLF(
      "Gut, Du haust also Krawumm welche auf die Omme. Krawumm zuckt kurz, "
      "steht dann aber unbewegt weiter rum. Er hat sich das aber bestimmt "
      "gemerkt ..."));
    tell_room(ENV(), BSLF(
      TPN+" haut Krawumm 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));
}
