AddResistanceModifier()
***********************


FUNKTION
========

   varargs int AddResistanceModifier(mapping mod, string add)


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

   /std/living/combat.c


ARGUMENTE
=========

   mapping mod:
    Mapping mit Schadensarten und ihrem Resistenzmodifikator (der im Bereich
    von -1.0 bis +x liegen kann), z.B. ([DT_FIRE:-1.0]) (Totalresistenz).
   string add:
    Ein Identifikator fuer _diesen_ Eintrag des setzenden Objektes.


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

   Es werden Resistenzen in dem Objekt gesetzt, die solange bestehen, wie
   das setzende Objekt existiert, oder nicht RemoveResistanceModifier
   (mit eventuellem Schluessel add) aufgerufen wird. Zusaetzliche Resistenzen
   werden eingerechnet.


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

   Fuer Ruestungen kann und sollte man P_RESISTANCE_STRENGTHS verwenden.


BEISPIELE
=========

   // Oel mit vervierfachtem Feuerschaden
   int add_action() {
    ...
    write(break_string("Du schuettest das Oel ueber "+
                       npc->name(WEN)+".",78));
    ...
    npc->AddResistanceModifier(([DT_FIRE:3.0]), "oel");
    SetProp(P_INVIS,1);
    SetProp(P_EXTRA_LOOK, "Ueberall tropft Oel herunter.\n");
    move(npc,M_NOCHECK);
    ...
   }


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

   1 fuer Erfolg


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

   Modifikatoren:     RemoveResistanceModifier(), P_RESISTANCE_MODIFIER
   simple Resistenz:  P_RESISTANCE, P_VULNERABILITY
   Hauptmapping:      P_RESISTANCE_STRENGTHS
   Berechnung:        CheckResistance(), UpdateResistanceStrengths()
   anderes:           balance, /std/armour/combat.c, /std/living/combat.c

29.Apr 2002, Gloinson@MG
