blob: 8a1f138f83a2977162b0c2c34db6b87c2b20110a [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001P_TMP_ATTACK_MOD
2================
3
4********************* VERALTETE PROPERTY ******************************
5* Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. *
6***********************************************************************
7P_TMP_ATTACK_MOD
8
9NAME
10----
11::
12
13 P_TMP_ATTACK_MOD "attack_mod"
14
15DEFINIERT IN
16------------
17::
18
19 /sys/new_skills.h
20
21BESCHREIBUNG
22------------
23::
24
25 Mittels dieser Property koennen die Attacken eines Livings temporaer
26 veraendert werden.
27
28 Es wird an dem Living die Property als mindestens 3-elementiges Array
29 ({zeitpunkt, objekt, methode, ...})
30 gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
31 Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
32
33 Der Methode wird beim Aufruf ein Kopie des Mappings uebergeben, in dem
34 die bisherigen Werte des Angriffes vermerkt sind.
35 Aufbau von Mapping 'ainfo':
36 ([ SI_ENEMY : object Angreifer, (-> Defend)
37 SI_SPELL : 0/1/array Spellparameter, (-> Defend)
38 P_WEAPON : - oder Waffe,
39 SI_SKILLDAMAGE_MSG: string Angriffsmeldungsende an Raum,
40 SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
41 SI_SKILLDAMAGE: int Schaden in Zehntel HP (Skills bis auf Rasse
42 drin!) (-> Defend),
43 SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen, (-> Defend)
44 P_WEAPON_TYPE: string Waffentyp (combat.h),
45 P_WC: - oder int WC der Waffe/Hand,
46 P_NR_HANDS: - oder int Hands der Waffe/Hand,
47 ]);
48
49 Gibt die Methode:
50 - 0 oder kein Mapping zurueck, fuehrt das zum Abbruch der Attacke
51 -> da inzwischen Waffen abgefragt wurden, koennen schon Meldungen
52 von diesen ausgegeben worden sein
53 - ein leeres Mapping ( ([]) ) zurueck, fuehrt das zu keiner Modifikation
54 - ein Mapping mit veraenderten Werten zurueck, werden diese in das
55 Angriffsmapping kopiert
56 Die geaenderten Werte werden teilweise von SkillResTransfer() in
57 den eigentlichen Angriff uebernommen.
58
59BEMERKUNGEN
60-----------
61::
62
63 - falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
64 Property auf 0 gesetzt
65 - vor dem Setzen immer auf die Existenz eines gueltigen Modifiers
66 pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
67 im Code anderer und ist andererseits unfair gegenueber ihnen
68
69BEISPIELE
70---------
71::
72
73 *** ein besonder heisser Segen modifiziert die Attacken des Spielers ***
74 int action_segen() {
75 ...
76 mixed *tmp;
77
78 // pruefen, ob nicht ein anderer Modifier existiert
79 if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_MOD)) ||
80 sizeof(tmp)<3 || tmp[0]<=time()) {
81
82 object wield;
83 wield=TP->QueryProp(P_WEAPON);
84
85 write(break_string(
86 "Der Priester der Flamme weiht "+
87 (wield?wield->name(WEN,1):"deine Haende")+".", 78));
88
89 // setzen des Modifiers .. 30-40 Sekunden gueltig
90 TP->SetProp(P_TMP_ATTACK_MOD,
91 ({time()+30+random(10), this_object(), "modfun"}));
92 } else ...
93 ...
94 return 1;
95 }
96
97 // die eigentlich Methode, die waehrend des Angriffs gerufen wird
98 mapping modfun(mapping ainfo) {
99 mapping ret;
100
101 // Returnwert ist immer ein Mapping, damit die Attacke weitergeht
102 ret=m_allocate(0,1);
103
104 // magische Waffen oder Sprueche werden nicht verbessert
105 if(ainfo[P_WEAPON_TYPE]!=WT_MAGIC) {
106 // sonst Verbesserungen ... Feuer addieren ...
107 ret[SI_SKILLDAMAGE_TYPE]=(ainfo[SI_SKILLDAMAGE_TYPE]||({}))+
108 ({DT_FIRE});
109 // ... und bei Waffe Meldungen anpassen
110 if(ainfo[P_WEAPON]) {
111 ret[SI_SKILLDAMAGE_MSG]=
112 " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
113 ret[SI_SKILLDAMAGE_MSG2]=
114 " mit sengendem "+ainfo[P_WEAPON]->name(RAW);
115 }
116 }
117
118 return ret;
119 }
120
121SIEHE AUCH
122----------
123::
124
125 Angriff: Attack(L)
126 Schutz: Defend(L)
127 Verwandt: InternalModifyAttack(L)
128 P_TMP_ATTACK_HOOK
129 P_TMP_DEFEND_HOOK
130 Sonstiges: SkillResTransfer(L)
131 Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK
132
13310.Feb 2005 Gloinson
134