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