blob: ed24d2dbced0eb482661a1fff19fdf0402a02b8a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001NAME:
2 P_RESISTANCE_STRENGTHS "resistance_strengths"
3
4DEFINIERT IN:
5 /sys/living/combat.h
6
7BESCHREIBUNG:
8 Lebewesen:
9
10 Mapping mit Schadensarten, gegen die das Lebewesen resistent oder
11 anfaellig ist. Durch eine _query_method werden alle existierenden
12 Resistenzen hier zusammengefasst.
13
14 Die Staerke der Resistenz oder Anfaelligkeit wird numerisch aus-
15 gedrueckt:
16 - Resistenzen gehen bis von 0 bis -1.0 (absolute Resistenz)
17 - -0.5 == halbierter Schaden, -0.75 == geviertelter Schaden
18 -> in % des "aufgehaltenen" Schadens interpretierbar
19 - Empfindlichkeiten gehen von 0 bis MAX_INT
20 - 1.0 == verdoppelter Schaden, 3.0 == vervierfachter Schaden
21 -> als Faktor (x+1.0) interpretierbar
22
23 Ruestungen:
24
25 Mapping mit Prozentwerten der Maximalwerte fuer Ruestungen des
26 entsprechenden Typs. Dabei sind positive Werte Resistenzen und
27 negative Empfindlichkeiten. Dabei duerfen die Prozentwerte nur
28 im Bereich von +100 bis -800 (-1000 ?!) liegen.
29
30 Bei Ruestungen ist es damit unnoetig, Resistenzen mittels
31 AddResistanceModifier() im Traeger zu setzen, da dies bereits
32 in /std/armour automatisch gemacht wird. Der Schluessel fuer
33 den Eintrag ist dabei P_ARMOUR_TYPE.
34
35 Die Maximalwerte sind derzeit:
36 AT_CLOAK, AT_RING, AT_AMULET: max 10% Resistenz
37 AT_SHIELD, AT_ARMOUR: max 15% Resistenz
38 alle anderen: max 5% Resistenz
39
40BEMERKUNGEN:
41 Ruestungen:
42 * die Property muss _nach_ P_ARMOUR_TYPE gesetzt werden (_set-Method)
43
44 Lebewesen:
45 * -1.0 bedeutet bereits absolute Resistenz, bei kleineren Werten werden
46 die anderen Schadensanteile im Kampf u.U. nicht mehr wie gewuenscht
47 bilanziert. Bitte daher drauf verzichten. ;-)
48 * Aenderungen an P_RESISTANCE und P_VULNERABILITY werden direkt in
49 P_RESISTANCE_STRENGTHS gespeichert:
50 -> daher niemals im Nachhinein bei fremden NPCs P_RESISTANCE_STRENGTHS
51 manipulieren, dafuer gibt es AddResistanceModifier
52 * QueryProp(P_RESISTANCE_STRENGTHS) enthaelt die gesamten Resistenzen
53 P_RESISTANCE, P_VULNERABILITY, P_RESISTANCE_MODIFIER (_query-Method)
54
55 Die Werte in P_RESISTANCE_STRENGTHS sollten nur in Ausnahmefaellen oder
56 gut begruendet den Hoechstwert haben. Ein Eiswesen kann zwar sehr
57 resistent gegen Kaelteschaden sein, sollte aber zu gleichem Teil auch
58 anfaellig auf Feuerschaden sein.
59
60 Auf dieser Property liegt eine Querymethode, welche eine Kopie der
61 Daten zurueckliefert.
62
63BEISPIELE:
64 // ein Eistroll
65 SetProp(P_RESISTANCE_STRENGTHS,([DT_FIRE:0.5,DT_COLD:-0.5,
66 DT_MAGIC:0.1]));
67
68 Feuerangriffe werden mit 1.5 multipliziert, magische mit 1.1 und
69 der Schadenswert von Kaelteangriffen wird halbiert. Zum Beispiel
70 wuerde
71 Defend(100, ({DT_FIRE,DT_MAGIC}), ...)
72 einen Schaden von 130 statt den normalen 100 verursachen.
73
74
75 // eine Eisruestung
76 SetProp(P_RESISTANCE_STRENGTHS, ([DT_COLD:50, DT_FIRE:-100]));
77
78 Dieses Kettenhemd schuetzt nun mit 50% des Maximalwertes gegen
79 Kaelte (also 0.5*15%=7,5% Resistenz) und macht mit dem Maximal-
80 wert anfaellig gegen Feuer (1*15%=15% Empfindlichkeit).
81
82 ! der Code spricht zusaetzlich von
83 Empfindlichkeit=(Empfindlichkeit/4)*5 -> 15/4*5=18.75% !
84
85SIEHE AUCH:
86 simple Resistenz: P_RESISTANCE, P_VULNERABILITY
87 Modifikatoren: AddResistanceModifier, RemoveResistanceModifier(),
88 P_RESISTANCE_MODIFIER
89 Berechnung: CheckResistance(), UpdateResistanceStrengths()
90 anderes: balance, /std/armour/combat.c, /std/living/combat.c
91
926.Feb 2016 Gloinson