P_ATTRIBUTES_MODIFIER
*********************


NAME
====

   P_ATTRIBUTES_MODIFIER         "attributes_modifier"


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

   /sys/living/attributes.h


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

   In dieser Property werden Attribut-Modifikatoren gespeichert, die
   laengere Zeit wirksam sein sollen, tlw. auch ueber einen Reboot
   hinweg.
   Intern werden die Modifikatoren in einem Mapping der Form

       ([ Setzer-Key : ([ A_xy : Wert, ... ]) , ... ])

   gespeichert. Das Setzen folg hingegen in der Form

       spieler->SetProp(P_ATTRIBUTES_MODIFIER, ([ A_xy : Wert, ... ]));
   oder
       spieler->SetProp(P_ATTRIBUTES_MODIFIER, ({ Setzer-Key, ([ ... ]) }));

   Bei der ersten Variante wird hierbei der Filename des setzenden Objektes
   als Setzer-Key genommen.
   Es koennen also durchaus von mehreren Objekten Modifier gesetzt werden.
   Bekannte Modifier sind:

       #death      Attribut-Abzug durch Todesfolgen      (Mudlib)
       #drain      Statabzug durch NPCs                  (Paracelsus)
       #frosch     Staerken-Abzug bei Froeschen          (Mudlib)


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

   Keine echte Property, _query_attributes_modifier() und
   _set_attributes_modifier() sind in /std/living/attributes.c
   implementiert
   - SetProp/QueryProp nutzen!
   - Wenn ein Modifier nicht mehr gebracht wird, nicht die Attributswerte auf
     0 setzen, sondern den ganzen Eintrag! also:
     SetProp(P_ATTRIBUTES_MODIFIER, ([]) );
     oder: SetProp(P_ATTRIBUTES_MODIFIER, 0 );
     aber nicht: SetProp(P_ATTRIBUTES_MODIFIER, ([A_STR:0]));


BEISPIELE
=========

   // ein Bonus ... 'ende'-fest (muss also per uid gesichert werden)
   player->SetProp(P_ATTRIBUTES_MODIFIER,
                   ({"g_klerus_segen", ([A_CON:5, A_INT:5])}));
   ...
   player->SetProp(P_ATTRIBUTES_MODIFIER, ({"g_klerus_segen", 0}));


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

   QueryAttribute(), QueryRealAttribute(), QueryAttributeOffset(),
   SetAttribute(), SetRealAttribute(), UpdateAttributes(),
   SetTimedAttrModifier(), QueryTimedAttrModifier(),
   DeleteTimedAttrModifier(),
   P_ATTRIBUTES, P_ATTRIBUTES_OFFSETS, P_TIMED_ATTR_MOD,
   P_X_ATTR_MOD, P_M_ATTR_MOD, /std/living/attributes.c

Last modified: Tue Jul 27 20:00:20 2004 by Muadib
