Query()
*******


FUNKTION
========

   public mixed Query(string name, int Type = F_VALUE);


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

   /std/thing/properties.c


ARGUMENTE
=========

   string name - Property, deren Wert(e) ausgelesen werden
   int type  - Art der gewuenschten Information.


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

   Der Wert einer der inneren Eigenschaften der Property 'name' wird
   zurueckgegeben.  'Type' ist dabei einer der in /sys/thing/properties.h
   und folgend aufgelisteten F_XXX-Werte:

   F_VALUE (==0, Default)
       Unter Umgehung einer eventuell vorhandenen Abfragemethode oder
       _query_'name'() wird der Datenwert der Property 'name'
       zurueckgegeben.
   F_MODE
        Die internen Flags der Property werden zurueckgegeben.Dies koennen
        (logisch mit & verknuepft) sein:
        SAVE  - Property soll bei save_object() gespeichert werden
        PROTECTED - Objekt selbst/EM/Root kann Property manipulieren
        SECURED  - wie PROTECTED, das Flag kann aber nicht
                   zurueckgesetzt werden (immer SECURED)
        NOSETMETHOD - niemand kann Property manipulieren
                      (auch kein F_SET_METHOD oder _set_'name'())
   F_SET_METHOD
        Ein eventuell fuer die Property eingetragene F_SET_METHOD wird
        zurueckgegeben.
        (_set_'name'()-Methoden werden so nicht aufgefuehrt!)
   F_QUERY_METHOD
        Ein eventuell fuer die Property eingetragene F_QUERY_METHOD wird
        zurueckgegeben.
        (_query_'name'()-Methoden werden so nicht aufgefuehrt!)


RUeCKGABEWERT
=============

   Die gewuenschte Eigenschaft, abhaengig von 'Type'.


BEMERKUNGEN
===========

   - Query() sollte nicht zum regulaeren Auslesen des Inhalt einer
     Property verwendet werden, da sowohl F_QUERY_METHOD als auch
     libinterne _query_'name'()-Methoden umgangen werden und das Ergebnis
     fuer so veraenderte Propertys undefiniert ist
   - _set_'name'() und _query_'name'() sind alte Propertymethoden und
     sollten nicht in normalen Objekten benutzt werden ->
     F_SET_METHOD/F_QUERY_METHOD (ggf. mit PROTECTED) nutzen
   - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
     sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
     diese geht nur 'static' (in diesem Fall empfohlen).


BEISPIELE
=========

   // Auslesen des Wertes unter Umgehung einer Abfragemethode
   Query(P_XYZ, F_VALUE);

   // Auslesen der Flags erfaehrt man mit:
   Query(P_XYZ, F_MODE);

   // sauberes Programmieren, wir wollen eine F_QUERY_METHOD setzen,
   // pruefen vorher auf Existenz:
   if(this_player()->Query(P_FROG, F_QUERY_METHOD) {
    write(break_string(
     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
     "Der Magier winkt ab: ", 78));
    say(break_string(
     "Ich kann dich nicht weiter vor Froschsein schuetzen!",
     "Der Magier sagt zu "+this_player()->name(WEM)+": ", 78));
   } else {
    this_player()->Set(P_FROG, #'query_protect_frog, F_QUERY_METHOD);
    ...
   }


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

   Aehnliches: SetProp(L), QueryProp(L), Set(L)
   Generell:  SetProperties(L), QueryProperties(L)
   Konzept:  properties, /std/thing/properties.c
   Sonstiges:  P_AUTOLOADOBJ

28.03.2008, Zesstra
