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