********************* 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
