// 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;
}
|