Beispieldateien

Ein Mädchen mit Bonbons

----------

// Das Mädchen gibt das Bonbon nur raus, wenn man mit "ja" anwortet.

inherit "npc";

#include <properties.h>
#include <events.h>
#include <living/comm.h>
#include <moving.h>

string bonbon_info();
void ich_will(mixed data, string type, int prio);

void create()
{
  if (!clonep()) return;
  ::create();

  create_default_npc(10);

  AddId(({"maedchen", "kind"}), ({"maedchen", "kinder"}));

  SetProp(P_NAME, "Maedchen");
  SetProp(P_PLURAL, "Maedchen");
  SetProp(P_LONG,
    "Das kleine Maedchen hat die Haende voller Bonbons. Ob sie Dir eins "
    "abgibt?");

  AddInfo("bonbon", #'bonbon_info, "blickt Dich fragend an:");

  listen_event(ET_COMM, EPRIO_REACT, #'ich_will);
}

string bonbon_info()
{
  if (this_player())
    this_player()->SetProp("bonbon_gefragt", 1);

  return "Willst Du eins?";
}

void ich_will(mixed data, string type, int prio)
{
  mixed antwort;
  object bonbon;

  if (!data[E_ACTOR]) return;

  // manche Kommunikationsverben verlangen ein "Opfer"
  // wir reagieren nur, wenn entweder keins angegeben wurde, oder wir es sind
  if (data[E_COMM_VICTIM] != this_object()) return;

  // hat derjenige schon gefragt?
  if (!data[E_ACTOR]->QueryProp("bonbon_gefragt")) return;

  // der Antwort-Text sollte "ja" enthalten

  antwort = data[E_COMM_TEXT][C_TEXT_OTHER];

  // kein Antwort-String?
  if (!stringp(antwort)) return;

  // alles in Kleinbuchstaben wandeln
  antwort = lower_case(antwort);

  // Wir zerlegen den Antwort-String in seine Einzelteile
  antwort = efun::explode(antwort, " ");

  // ist "ja" enthalten?
  if (member(antwort, "ja") < 0) return;

  // nun bekommt der Spieler das Bonbon
  bonbon = clone_object("/obj/misc/bonbon");

  if (bonbon->move(data[E_ACTOR], M_GIVE) < MOVE_OK)
  {
    say("Das Maedchen sagt: Du kannst es doch eh nicht mehr tragen.\n");
    bonbon->remove();
    return;
  }
  // Bei Erfolg setzen wir unser Testproperty wieder auf 0

  data[E_ACTOR]->SetProp("bonbon_gefragt", 0);

  write("Das Maedchen gibt Dir ein Bonbon.\n");
  say("Das Maedchen gibt "+data[E_ACTOR]->name(WEM, NAME_DEF)+" ein Bonbon.\n",
    data[E_ACTOR]);
  return;
}