Ein Pferd, dem man Äpfel geben kann
![]()
inherit "npc"; #include <properties.h> // allgemeine Makros definieren #include <moving.h> // nun die für das Bewegen #include <events.h> // und die für die Ereignisse #include <living/body.h> // für den Körperbau // Deklaration der Funktionen, die durch listen_event angemeldet // werden. void apfel_bekommen(mapping data, string type, int prio); void irgendwas_bekommen(mapping data, string type, int prio); void create() { if (!clonep()) return; ::create(); create_default_npc(15); SetProp(P_NAME, "Pferd"); SetProp(P_PLURAL, "Pferde"); SetProp(P_LONG, "Ein ganz normales Pferd. Du kannst ihm einen Apfel geben."); SetProp(P_WEIGHT, 11900); SetProp(P_HANDS, ({" mit seinen Hufen", 150})); AddId("pferd", "pferde"); // Wir wollen 2 Sachen machen: // 1. Wenn wir einen Apfel bekommen, "essen" wir ihn. -> Reagieren listen_event(ET_GIVE, EPRIO_REACT, #'apfel_bekommen); // 2. Wenn es kein Apfel ist, wollen wirs net haben. -> Abbruch listen_event(ET_GIVE, EPRIO_CANCEL, #'irgendwas_bekommen); } void apfel_bekommen(mapping data, string type, int prio) { // Erstmal ein paar allgemeine Checks. Gibts das Mapping und existiert // das zu bewegende Objekt (E_MOVE_OBJ)? if (!mappingp(data) || !data[E_MOVE_OBJ]) return; // Bin ich das Ziel? Nein? -> Abbruch if (data[E_MOVE_DEST] != this_object()) return; // Es muß schon ein Apfel sein. Dazu prüfen wir, ob der bewegte Gegenstand // eine Id "apfel" hat. Wenn nicht -> Abbruch if (!(data[E_MOVE_OBJ]->id("apfel"))) return; // Nun sollte alles zu unsrer Zufriedenheit sein. // *mampf* tell_room(environment(), "Das Pferd frisst den Apfel.\n"); // Wenn er gegessen wurde, existiert er nicht mehr. Wir zerstören ihn. data[E_MOVE_OBJ]->remove(1); // Das wars. } void irgendwas_bekommen(mapping data, string type, int prio) { // Auch hier erst ein paar allgemeine Checks. Wir wollen auf das zu // bewegende Objekt (E_MOVE_OBJ) zugreifen und dem agierenden Spieler (E_ACTOR) // einen Text ausgeben. Beide Felder im Mapping brauchen wir also. if (!mappingp(data) || !data[E_MOVE_OBJ] || !data[E_ACTOR]) return; // Sind wir das Ziel? if (data[E_MOVE_DEST] != this_object()) return; // Wenns kein Apfel ist, geben wir eine Meldung an den agierenden Spieler // aus und brechen das ganze mit cancel_event() ab. if (!(data[E_MOVE_OBJ]->id("apfel"))) { tell_object(data[E_ACTOR], "Was soll denn das Pferd mit "+ data[E_MOVE_OBJ]->name(WEM, NAME_DEF)+"?\n"); cancel_event(); } } |
| Start » Magierhandbuch » Dokumentation » Programmierbeispiele » Pferd | |
|
| |