
Set()
*****


FUNKTION
========

   public varargs mixed Set(string name, mixed Value, int Type, int extern);


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

   /std/thing/properties.c
   /sys/thing/properties.h (Prototyp)


ARGUMENTE
=========

    name - Property, die manipuliert werden soll
    Value - der zu setzende/aendernde Wert
    Type - die Eigenschaft der Property, die manipuliert werden soll
    extern - Interne Verwendung:
   Wurde Set ueber SetProp von aussen gerufen.


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

   Eine der inneren Eigenschaften der Property 'name' wird veraendert.
   'Type' ist dabei einer der in /sys/thing/properties.h definierten
   F_XXX - Werte:

   F_VALUE (==0, default)
     Setzt den Inhalt der Property auf 'Value'. Aehnlich "SetProp",
     umgeht jedoch eine etwaige F_SET_METHOD oder _set_'name'()-Methode.
   F_MODE
   F_MODE_AS
   F_MODE_AD
     Aendert eines der internen Flags der Property. F_MODE negiert den
     vorherigen Wert vom Flag 'Value', F_MODE_AS setzt und F_MODE_AD
     loescht ihn.
     Verfuegbare interne Flags:

       SAVE

         Property wird bei save_object() gespeichert

       PROTECTED

         Flag setzbar durch:   beliebiges Objekt
         Flag loeschbar durch: this_object(), ROOT, EM+
         Inhalt der Property veraendern sowie Set- und Query-Methoden
         setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+
         WARNUNG: Dieses Flag nicht leichtfertig bei Spielern setzen!

       SECURED

         Flag setzbar durch:   this_object(), ROOT, EM+
         Flag loeschbar durch: Niemanden!
         Inhalt der Property veraendern sowie Set- und Query-Methoden
         setzen oder loeschen duerfen nur noch this_object(), ROOT, EM+

       NOSETMETHOD

         Property nicht mehr ueber SetProp() aenderbar
         (damit entfallen auch SET_METHOD, _set_'name')

       SETMAPPED

         Die Set-Methode speichert den Werte nicht selber, sondern gibt
         ihn zurueck, das Property-System speichert ihn dann.
         WARNUNG: Dieses Flag nicht per Hand manipulieren.
  
   F_SET_METHOD
     Aendert den Eintrag fuer eine SetMethod - eine Closure, die anstatt
     des Setzens der Property beim Aufruf von SetProp mit 'Value'
     aufgerufen wird.
   F_SET_MAPPER
     Setzt wie F_SET_METHOD eine Set-Methode (Closure), welche aber den Wert
     der Property beim Aufruf nicht selber (durch Aufruf von Set()) setzt,
     sondern den Wert zurueckgeben muss, der gesetzt werden soll.
     Bsp. #'copy um vor dem Speichern eine Kopie zu erstellen
   F_QUERY_METHOD
     Aendert den Eintrag fuer eine QueryMethod - eine Closure, die anstatt
     des Lesens der Property beim Aufruf von QueryProp aufgerufen wird.
     Diese bekommt den gespeicherten Wert der Property uebergeben und muss
     den an den Aufrufer von QueryProp() zurueckzugebenden Wert
     zurueckgeben.
     Bsp: #'copy, um eine Kopie des gespeicherten Wertes zurueckzugeben

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

   Das Ergebnis der Manipulation bzw. einer der definierten
   Fehlercodes.


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

    - Set() sollte nicht zum regulaeren Manipulieren des Inhalts einer
      Property verwendet werden, da sowohl F_SET_METHOD als auch libinterne
      _set_'name'()-Methoden umgangen werden und das Ergebnis fuer so
      veraenderte Properties undefiniert ist.
    - eine gesetzte F_SET/F_QUERY_METHOD hat bei SetProp/QueryProp Vorrang
      vor einer _set/_query_method
      -> _set/_query wird nach erfolgreichem Ruf von F_XXX_METHOD ignoriert
    - F_SET/F_QUERY_METHOD sollte normalerweise Vorzug vor einer
      _set_/_query_* gegeben werden.

   SetMethods/QueryMethods:
    - falls ihr Query/SetMethods an oeffentlichen Properties setzen
      wollt, prueft bitte vorher, ob dort nicht schon eine (fremde) gesetzt
      ist und brecht ggf. euer Set() ab, um nicht die Arbeit anderer
      Mitmagier zu sabotieren (z.B. P_HANDS)
    - Properties sollten mit Query- oder SetMethoden nur so lange wie
      noetig belegt werden
      -> manche Properties sollte man als Wert setzen, _auch wenn_ die
         Spieler sie zuruecksetzen koennten (zB P_MSGIN/P_MSGOUT)
    - auf keinen Fall den Wert speichern, ueberschreiben, rueckschreiben,
      das fuehrt fast immer zu Problemen.
    - Set/QueryMethoden sollten nicht als Trigger/Listener fuer ein
      Ereignis (z.B. P_DIE_MSG fuer das Ereignis "Tod des Spielers")
      missbraucht werden
      -> es gibt sichere und saubere Moeglichkeiten (NotifyPlayerDeath),
         und wenn nicht, wendet euch an den EM eures Vertrauens
    - F_SET/F_QUERY_METHODs koennen 'protected' (empfohlen) oder 'static'
      sein. _set_/_query_ duerfen momentan _nicht_ 'protected' sein, fuer
      geht nur 'static' (in diesem Fall empfohlen).


BEISPIELE
=========

   ### Aendern von Eigenschaften einer Property ###
   // Setzen des SAVE-Flags (bei save_object() mitzuspeichern)
   Set(P_XYZ, SAVE, F_MODE_AS);

   // Loeschen des SAVE-Flags
   Set(P_XYZ, SAVE, F_MODE_AD);

   // Negieren (Umschalten) des bisherigen SAVE-Flags
   Set(P_XYZ, SAVE, F_MODE);
   // Hinweis: das Setzen des Flags funktioniert mittels F_MODE nur dann,
   // wenn sichergestellt ist, dass es vorher nicht gesetzt war. Die
   // sichere Variante ist daher, F_MODE_AS zu verwenden.

   // Sperren des SetProp/SET_METHOD-Zugriffs:
   Set(P_XYZ, NOSETMETHOD, F_MODE_AS);

   // Vorlaeufiger Zugriffsschutz fuer eine Property:
   Set(P_XYZ, PROTECTED, F_MODE_AS);

   // Permanenter Zugriffsschutz fuer eine Property:
   Set(P_XYZ, SECURED, F_MODE_AS);

   ### Setzen einer SetMethod/QueryMethod ###
   // Setzen einer internen SetMethod
   mixed foo(mixed val);
   ...
   Set(P_XYZ, #'foo, F_SET_METHOD);
   ...

   // Setzen einer QueryMethod bei einem anderen Objekt
   mixed bar();
   ...
   other->Set(P_XYZ, #'bar, F_QUERY_METHOD);
   ...

   // Setzen/Nutzen eines Mappers (F_SET_MAPPER) zum Skalieren
   int scale(int val) {return val * 100;}
   Set(P_XYZ, #'scale, F_SET_MAPPER);
   int unscale(int val) {return val / 100;}
   Set(P_XYZ, #'unscale, F_QUERY_METHOD);

   // Der Vollstaendigkeit halber sei das Aendern einer Property unter
   // Umgehung von Set-Methoden angegeben. Es ist aber aus o.g. Gruenden
   // zu empfehlen, diese Variante nicht zu verwenden.
   Set(P_XYZ, "bla", F_VALUE);


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

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

6. Jan 2008 Arathorn
