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