Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/RegisterHelperObject

RegisterHelperObject()
**********************


FUNKTION
========

   int RegisterHelperObject(object helper, int type,
                            string|closure callback);


DEFINIERT IN
============

   /std/living/helpers.c


ARGUMENTE
=========

   object helper
     Das Objekt, das bei einem Lebewesen als Hilfsobjekt registriert
     werden soll. Das Objekt muss sich dazu nicht im Inventar des
     Lebewesens befinden.
   int type
     Helfertyp, einer der in /sys/living/helpers.h definierten Typen:
     - HELPER_TYPE_AERIAL fuer die Flug-/Segelunterstuetzung
     - HELPER_TYPE_AQUATIC fuer Tauchunterstuetzung
   string|closure callback
      Closure oder Funktionsname als String; dies ist die Funktion, die im
      Objekt helper gerufen wird, um abzufragen, ob es sich aktuell fuer
      zustaendig erklaert oder nicht.


BESCHREIBUNG
============

   Das Objekt "helper" wird als Hilfsobjekt fuer bestimmte Aktivitaeten wie
   zum Beispiel Fliegen oder Tauchen registriert.



   Die als Callback uebergebene Funktion wird bei der Abfrage der
   P_*_HELPERS-Properties (siehe unten) aufgerufen und deren
   Rueckgabewert in der Property vermerkt.



   Der Rueckgabewert der Callback-Methode muss im Wertebereich
   0..10000 liegen, wobei ein Wert von 0 bedeutet, dass das Hilfsobjekt
   sich gerade nicht zustaendig fuehlt. Bei den Werten >0 ist es dem
   abfragenden Objekt ueberlassen, wie es diese Daten bewertet.

   Die Funktion muss existieren und public sein, d.h. von aussen gerufen
   werden koennen.



   Die Funktion bekommt das Spielerobjekt und das abfragende Objekt als
   Parameter uebergeben.


HINWEIS
=======

   Es ist ein Unterschied, ob sich ein Objekt via UnregisterHelperObject()
   als Helfer austraegt, oder ob der Aufruf der Callback-Funktion eine
   0 zurueckgibt. Im letzteren Fall ist das Objekt nach wie vor
   registriert und kann trotzdem vom abfragenden Objekt als
   funktionsfaehig angesehen werden.


RUECKGABEWERTE
==============

    1  Objekt wurde erfolgreich registriert (HELPER_SUCCESS)
   -1  angegebenes Hilfsobjekt existiert nicht (HELPER_NO_CALLBACK_OBJECT)
   -2  angegebenes Hilfsobjekt ist bereits fuer diese Art der
       Unterstuetzung registriert (HELPER_ALREADY_LISTED)


BEISPIELE
=========

   a) Eine luftgefuellte Blase will sich als Tauch-Helfer am Spieler
   anmelden und ist zustaendig, solange sich noch Luft in ihr befindet:

   int luft = 5; // globale Variable z.B. fuer Luftinhalt von 5 Atemzuegen

   // Registrierung im Spielerobjekt
   if ( TP->RegisterHelperObject(ME, HELPER_TYPE_AQUATIC,
        "DivingCallback") == HELPER_SUCCESS ) {
     tell_object(TP, "Du kannst jetzt mit Hilfe der Luftblase unter Wasser "
       "atmen.\n");
   }

   // hier koennen natuerlich auch noch komplexere Dinge ablaufen, z.B.
   // wenn ein Wert zurueckgegeben werden soll, der nicht nur 0 oder 1 ist.
   public int DivingCallback(object player, object caller) {
     return (environment(ME)==player && luft>0);
   }

   b) Ein Spieler befindet sich in einem Raum mit einem steilen Abhang, den
   man hinunterspringen kann. Dies geht aber nur dann gefahrlos, wenn es
   Hilfsobjekte gibt, die den (Segel)flug erlauben:

   // cmd_springen() sei die Funktion, die bei der Eingabe des Befehls durch
   // den Spieler aufgerufen wird.
   static int cmd_springen(string str) {
     [...]
     // Property abfragen
     mapping helpers = TP->QueryProp(P_AERIAL_HELPERS);
     // Liste der Werte fuer die einzelnen Unterstuetzungsobjekte ermitteln
     int *values = m_values(helpers,0);
     // Spieler schonmal runterbewegen, die Folgen seines Handelns spuert
     // er dann, wenn er unten angekommen ist.
     TP->move(zielraum, M_GO|M_SILENT);
     // "helpers" ist immer ein Mapping, das pruefen wir nicht extra.
     // Wenn die Liste der Objekte noch mindestens ein Element enthaelt,
     // nachdem alle unzustaendigen Hilfsobjekte (Rueckgabewert der
     // Callback-Funktion == 0) rausgerechnet wurden, existiert mindestens
     // ein geeignetes Hilfsobjekt.
     if ( sizeof(values-({0})) ) {
       tell_object(TP, "Sanft segelst Du den Hang hinab.\n");
     }
     else {
       tell_object(TP, BS("Todesmutig springst Du den Hang hinab und "
         "schlaegst hart unten auf. Du haettest vielleicht daran denken "
         "sollen, Dir geeignete Hilfsmittel fuer so eine Aktion zu "
         "besorgen.");
       TP->Defend(800, ({DT_BLUDGEON}), ([SP_NO_ACTIVE_DEFENSE:1]), ME);
     }
     return 1;
   }


SIEHE AUCH
==========


Funktionen: UnregisterHelperObject(), GetHelperObject() Properties: P_HELPER_OBJECTS, P_AERIAL_HELPERS, P_AQUATIC_HELPERS Sonstiges: /sys/living/helpers.h

05.02.2015 Arathorn


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.