blob: f67218b620e0f4b1199a3a9a4f365c6db7cd1d33 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001P_TMP_ATTACK_MOD
Zesstra953f9972017-02-18 15:37:36 +01002****************
MG Mud User88f12472016-06-24 23:31:02 +02003
Zesstra953f9972017-02-18 15:37:36 +01004********************* VERALTETE PROPERTY
5****************************** * Diese Property ist veraltet. Bitte
6nicht mehr in neuem Code nutzen. * **********************************
7************************************* P_TMP_ATTACK_MOD
MG Mud User88f12472016-06-24 23:31:02 +02008
MG Mud User88f12472016-06-24 23:31:02 +02009
Zesstra953f9972017-02-18 15:37:36 +010010NAME
11====
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstra953f9972017-02-18 15:37:36 +010013 P_TMP_ATTACK_MOD "attack_mod"
MG Mud User88f12472016-06-24 23:31:02 +020014
MG Mud User88f12472016-06-24 23:31:02 +020015
Zesstra953f9972017-02-18 15:37:36 +010016DEFINIERT IN
17============
MG Mud User88f12472016-06-24 23:31:02 +020018
Zesstra953f9972017-02-18 15:37:36 +010019 /sys/new_skills.h
MG Mud User88f12472016-06-24 23:31:02 +020020
MG Mud User88f12472016-06-24 23:31:02 +020021
Zesstra953f9972017-02-18 15:37:36 +010022BESCHREIBUNG
23============
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025 Mittels dieser Property koennen die Attacken eines Livings temporaer
26 veraendert werden.
MG Mud User88f12472016-06-24 23:31:02 +020027
Zesstra953f9972017-02-18 15:37:36 +010028 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'.
MG Mud User88f12472016-06-24 23:31:02 +020032
Zesstra953f9972017-02-18 15:37:36 +010033 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 ]);
MG Mud User88f12472016-06-24 23:31:02 +020048
Zesstra953f9972017-02-18 15:37:36 +010049 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.
MG Mud User88f12472016-06-24 23:31:02 +020058
MG Mud User88f12472016-06-24 23:31:02 +020059
Zesstra953f9972017-02-18 15:37:36 +010060BEMERKUNGEN
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
69
70BEISPIELE
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);
MG Mud User88f12472016-06-24 23:31:02 +0200115 }
MG Mud User88f12472016-06-24 23:31:02 +0200116 }
117
Zesstra953f9972017-02-18 15:37:36 +0100118 return ret;
119 }
120
121
122SIEHE AUCH
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
MG Mud User88f12472016-06-24 23:31:02 +0200132
13310.Feb 2005 Gloinson