P_TMP_ATTACK_MOD¶
***************** VERALTETE PROPERTY ************************** * Diese Property ist veraltet. Bitte nicht mehr in neuem Code nutzen. * ******************************************************************* P_TMP_ATTACK_MOD
NAME¶
P_TMP_ATTACK_MOD "attack_mod"
DEFINIERT IN¶
/sys/new_skills.h
BESCHREIBUNG¶
Mittels dieser Property koennen die Attacken eines Livings temporaer
veraendert werden.
Es wird an dem Living die Property als mindestens 3-elementiges Array
({zeitpunkt, objekt, methode, ...})
gesetzt und die Methode 'methode' wird dann waehrend des Attack() des
Lebewesens in 'objekt' aufgerufen, solange time()<'zeitpunkt'.
Der Methode wird beim Aufruf ein Kopie des Mappings uebergeben, in dem
die bisherigen Werte des Angriffes vermerkt sind.
Aufbau von Mapping 'ainfo':
([ SI_ENEMY : object Angreifer, (-> Defend)
SI_SPELL : 0/1/array Spellparameter, (-> Defend)
P_WEAPON : - oder Waffe,
SI_SKILLDAMAGE_MSG: string Angriffsmeldungsende an Raum,
SI_SKILLDAMAGE_MSG2: string Angriffsmeldungsende an Kaempfende,
SI_SKILLDAMAGE: int Schaden in Zehntel HP (Skills bis auf Rasse
drin!) (-> Defend),
SI_SKILLDAMAGE_TYPE: string/string* Schadenstypen, (-> Defend)
P_WEAPON_TYPE: string Waffentyp (combat.h),
P_WC: - oder int WC der Waffe/Hand,
P_NR_HANDS: - oder int Hands der Waffe/Hand,
]);
Gibt die Methode:
- 0 oder kein Mapping zurueck, fuehrt das zum Abbruch der Attacke
-> da inzwischen Waffen abgefragt wurden, koennen schon Meldungen
von diesen ausgegeben worden sein
- ein leeres Mapping ( ([]) ) zurueck, fuehrt das zu keiner Modifikation
- ein Mapping mit veraenderten Werten zurueck, werden diese in das
Angriffsmapping kopiert
Die geaenderten Werte werden teilweise von SkillResTransfer() in
den eigentlichen Angriff uebernommen.
BEMERKUNGEN¶
- falls die Zeit abgelaufen oder das Objekt zerstoert ist, wird die
Property auf 0 gesetzt
- vor dem Setzen immer auf die Existenz eines gueltigen Modifiers
pruefen, einfaches Ueberschreiben fuehrt einerseits zu Fehlern
im Code anderer und ist andererseits unfair gegenueber ihnen
BEISPIELE¶
*** ein besonder heisser Segen modifiziert die Attacken des Spielers ***
int action_segen() {
...
mixed *tmp;
// pruefen, ob nicht ein anderer Modifier existiert
if(!pointerp(tmp=TP->QueryProp(P_TMP_ATTACK_MOD)) ||
sizeof(tmp)<3 || tmp[0]<=time()) {
object wield;
wield=TP->QueryProp(P_WEAPON);
write(break_string(
"Der Priester der Flamme weiht "+
(wield?wield->name(WEN,1):"deine Haende")+".", 78));
// setzen des Modifiers .. 30-40 Sekunden gueltig
TP->SetProp(P_TMP_ATTACK_MOD,
({time()+30+random(10), this_object(), "modfun"}));
} else ...
...
return 1;
}
// die eigentlich Methode, die waehrend des Angriffs gerufen wird
mapping modfun(mapping ainfo) {
mapping ret;
// Returnwert ist immer ein Mapping, damit die Attacke weitergeht
ret=m_allocate(0,1);
// magische Waffen oder Sprueche werden nicht verbessert
if(ainfo[P_WEAPON_TYPE]!=WT_MAGIC) {
// sonst Verbesserungen ... Feuer addieren ...
ret[SI_SKILLDAMAGE_TYPE]=(ainfo[SI_SKILLDAMAGE_TYPE]||({}))+
({DT_FIRE});
// ... und bei Waffe Meldungen anpassen
if(ainfo[P_WEAPON]) {
ret[SI_SKILLDAMAGE_MSG]=
" mit sengendem "+ainfo[P_WEAPON]->name(RAW);
ret[SI_SKILLDAMAGE_MSG2]=
" mit sengendem "+ainfo[P_WEAPON]->name(RAW);
}
}
return ret;
}
SIEHE AUCH¶
Angriff: Attack(L)
Schutz: Defend(L)
Verwandt: InternalModifyAttack(L)
P_TMP_ATTACK_HOOK
P_TMP_DEFEND_HOOK
Sonstiges: SkillResTransfer(L)
Hooks: P_TMP_DIE_HOOK, P_TMP_MOVE_HOOK
10.Feb 2005 Gloinson