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