Lpc Manpages

NAME:
     P_RESISTANCE                      "resistance"

DEFINIERT IN:
     /sys/living/combat.h

BESCHREIBUNG:

   * LEBEWESEN
     ---------
     Mapping mit Schadensarten, gegen die das Lebewesen resistent oder
     anfaellig ist. Durch eine _query_method werden alle existierenden
     Resistenzen hier zusammengefasst.

     Die Staerke der Resistenz oder Anfaelligkeit wird numerisch aus-
     gedrueckt:

     * RESISTENZEN gehen bis von 0 bis -1.0 (absolute Resistenz):
       -0.5 == halbierter Schaden, -0.75 == geviertelter Schaden
       -> in % des "aufgehaltenen" Schadens interpretierbar

     * EMPFINDLICHKEITEN gehen von 0 bis MAX_INT:
       1.0 == verdoppelter Schaden, 3.0 == vervierfachter Schaden
       -> als Faktor (x+1.0) interpretierbar

   * RUESTUNGEN
     ----------
     Mapping mit Prozentwerten der Maximalwerte fuer Ruestungen des
     entsprechenden Typs. Dabei sind positive Werte Resistenzen und
     negative Empfindlichkeiten. Dabei duerfen die Prozentwerte nur
     im Bereich von +100 bis -300 liegen.

     Bei Ruestungen ist es damit unnoetig, Resistenzen mittels
     AddResistanceModifier() im Traeger zu setzen, da dies bereits
     in /std/armour.c automatisch gemacht wird. Der Schluessel fuer
     den Eintrag ist dabei P_ARMOUR_TYPE.

     Die Maximalwerte sind derzeit:
      - AT_CLOAK, AT_RING, AT_AMULET, AT_TROUSERS:  max 15% Resistenz
      - AT_SHIELD, AT_ARMOUR:                       max 25% Resistenz
      - alle anderen:                               max 10% Resistenz

BEMERKUNGEN:
     Bei fremden NPCs im Nachhinein NIEMALS in P_RESISTANCE manipulieren,
     dafuer gibt es -> AddResistanceModifier().

     Die Werte in P_RESISTANCE sollten nur in Ausnahmefaellen und
     gut begruendet den Hoechstwert haben. Ein Eiswesen kann zwar immun
     gegen Kaelteschaden sein, sollte aber zu einem erheblichen Teil auch
     anfaellig auf Feuer sein.

     Auf dieser Property liegt eine Querymethode, die eine Kopie der Daten
     zurueckliefert.

WICHTIG:
     Insgesamt ist auf eine vernuenftige Verhaeltnismaessigkeit zu achten!
     Eine 08/15-Ameise auf einem Waldweg braucht kein Mapping mit fuenf
     Anfaelligkeiten und acht Resistenzen!
     Zudem SOLLTEN sich die Resistenzen und Anfaelligkeiten dem Spieler
     logisch erklaeren: Ein Eistroll ist gegen Eis immun, gegen Wind und
     Wasser gut geschuetzt, weil es eben ein EISwesen mit dickem FELL ist.
     Wenn es darueberhinaus beispielsweise gegen Laerm geschuetzt ist, muss
     es sich entweder der P_LONG des Eistrolls oder der P_INFO oder seiner
     speziellen Umgebung/Historie herauslesen lassen koennen!!!

BEISPIELE:
     1) in einem Eiswesen:
        SetProp(P_RESISTANCE,([
                               DT_FIRE :  0.5,  // Anfaelligkeiten
                               DT_MAGIC:  0.1,

                               DT_COLD : -0.5   // Resistenz
                              ]));

     Feuerangriffe werden mit 1.5 multipliziert, magische mit 1.1 und
     der Schadenswert von Kaelteangriffen wird halbiert.
     Ein Angriff mit...

       EISWESEN->Defend(100, ({DT_FIRE, DT_MAGIC}), ...)

     wuerde hier einen Schaden von 130 statt den eigentlichen 100 verursachen
     (50 * 1,5 + 50 * 1,1 = 130).

     2) in einer Eisruestung:
        SetProp(P_RESISTANCE,([ DT_COLD : 50, DT_FIRE : -100 ]));

     Diese Ruestung schuetzt den Traeger nun mit 50% des Maximalwertes gegen
     Kaelte (also 0,5*25% = 12,5% Resistenz) und macht mit dem Maximal-
     wert anfaellig gegen Feuer (1*25% = 25% Empfindlichkeit).

     ! der Code spricht zusaetzlich von
       Empfindlichkeit=(Empfindlichkeit/4)*5 -> 15/4*5=18.75% !


SIEHE AUCH:
     Modifikatoren: AddResistanceModifier, RemoveResistanceModifier,
                    P_RESISTANCE_MODIFIER
     Berechnung:    CheckResistance, UpdateResistance

----------------------------------------------------------------------------
01.12.17, Torin