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

