
DefendInfo()
************


FUNKTION
========


DEFINIERT IN
============

   /sys/combat.h


ARGUMENTE
=========


BESCHREIBUNG
============

    Die DefendInformationen werden im Runde eines Attack/Defend Vorgangs
    in Attack initial angelegt und dem Defend ueber den Parameter spell
    uebergeben. Ist dieser Parameter ein Mapping, so sind die
    DefendInformationen ueber den Key EINFO_DEFEND zu erhalten.
    Die Informationen liegen in Form eines Mappings vor.
    Vor Zugriff sollte immer auf die Existenz dieses Keys in dem Mapping
    geprueft werden, da nicht alle Informationen immer existieren.
    Die Keys sind in combat.h definiert und sind folgende:



   ORIGINAL_AINFO - Mapping
       Hier ist eine Kopie des originalen ainfo-mappings des Attacks
       vorhanden mit folgenden Eintraegen:
       Immer vorhandene Eintraege:
         SI_ENEMY              der angegriffene Gegner



       Angriff mit gezueckter Waffe:
         P_WEAPON              das Waffenobjekt selbst
         P_WEAPON_TYPE         P_WEAPON_TYPE der Waffe
         P_WC                  P_WC der Waffe
         P_NR_HANDS            P_NR_HANDS der Waffe
         SI_SKILLDAMAGE_TYPE   P_DAM_TYPE der Waffe
         SI_SKILLDAMAGE        waffe->QueryDamage(enemy)
            bei vorhandenem Zweihandskill SK_TWOHANDED wird nur der durch
            den Skill modifizierte Schadenswert uebernommen
         SI_SKILLDAMAGE_MSG    "mit "+waffe->name(WEM,0)
         SI_SKILLDAMAGE_MSG2   "mit "+waffe->name(WEM,1)
         SI_SPELL              0

       Angriff mit blossen Haenden:
         P_WEAPON_TYPE         WT_HANDS
         P_WC                  P_HANDS[1]
         SI_SKILLDAMAGE        Schadenswert, aus P_HANDS[1] und A_STR
                               berechnet
         SI_SKILLDAMAGE_TYPE   P_HANDS[2]
         SI_SKILLDAMAGE_MSG
         SI_SKILLDAMAGE_MSG2   beides P_HANDS[0]
         SI_SPELL              0



       Angriff mit einem Spell (SK_MAGIC_ATTACK):
         SI_SKILLDAMAGE        Schadenswert des Spells
         SI_SKILLDAMAGE_TYPE   Schadenstypen des Spells
         SI_SKILLDAMAGE_MSG    Schadensmeldung des Spells, wenn vorhanden,
                               sonst "mit magischen Faehigkeiten"
         SI_SKILLDAMAGE_MSG2   entsprechende Meldung des Spells, wenn
                               gesetzt, ansonsten identisch mit
                               SI_SKILLDAMAGE_MSG
         P_WEAPON_TYPE         P_WEAPON_TYPE des Spells, wenn vorhanden,
                               sonst WT_MAGIC
         SI_SPELL              SI_SPELL des Spells



       Hinweise:
       - Alle Eintraege in diesem Mapping koennen bereits durch
         InternalModifyAttack() veraendert worden sein.
       - Die Daten werden mittels deep_copy(ainfo) eingetragen.
       - Daten in den Eintraegen SI_SKILLDAMAGE* und SI_SPELL koennen bei
         physikalischen Angriffen durch die Skills FIGHT(P_WEAPON_TYPE) oder
         SK_FIGHT oder durch einen P_TMP_ATTACK_MOD bzw. Hook vom Typ
         H_HOOK_ATTACK_MOD modifiziert worden sein.



   ORIGINAL_DAM - int
       Der Originalschaden aus dem Attack

   ORIGINAL_DAM_TYPE - string/string*
       Der Originaldamagetyp aus dem Attack

   CURRENT_DAM - int
       Der momentane Schaden, nach schon erfolgten Modifikationen



   CURRENT_DAM_TYPE - string/string*
       Der momentane Damagetyp, nach schon erfolgten Modifikationen



   ENEMY_INSERTED - int
       0 oder 1 je nachdem ob der Angreifer schon in der enemy-list
       vorhanden war oder nicht



   RFR_REDUCE - int
       0 oder reduzierter Schaden durch RFR Modifikation



   PRESENT_DEFENDERS - Array
       Liste der durch InformDefend informierten Defender als Objekt.
       Ein Defender wird immer NACH InformDefend
       dazugefuegt



   DEFENDING_DEFENDER - Array ({})
       Hat ein durch InformDefend ein Defender verteidigt, so wird
       fuer diesen Defender ein Eintrag in diesem Array vorgenommen,
       welcher folgende Struktur besitzt.
               ({
                       DEF_DEFENDER - Object
                         Der Verteidiger, welcher VOR
                         DefendOther eingefuegt wird
                       DEF_DAM - int
                         Der veraenderte Schaden, welcher NACH
                         DefendOther eingefuegt wird
                       DEF_DAMTYPE string/string*
                         Die veraenderte Schadensart, welche
                         NACH DefendOther eingefuegt wird
                       DEF_SPELL - Mapping
                         Das Mapping des veraenderten Spells, welches
                         als Kopie NACH DefendOther eingefuegt wird
               })



   DEFEND_HOOK - Int/Array
       DI_NOHOOK, wenn kein Hook da war, DI_HOOKINTERRUPT, wenn der
       Hook das Defend unterbricht, DI_HOOK, wenn ein Hook vorhanden
       ist, dieser das Defend aber unveraendert laesst.
       Veraendert ein Hook das Defend, so ist hier ein Array zu finden
       mit den veraenderten Parametern in der Struktur:
               ({
                       HOOK_DAM - int
                          Der veraenderte Schaden
                       HOOK_DAMTYPE - string/string*
                          Die veraenderte Schadensart
                       HOOK_SPELL - Mapping
                          Das Mapping des veraenderten Spells als Kopie
               })



   DEFEND_ARMOURS - Mapping (2 Werte pro Key)
       Liste der beruecksichtigten Ruestungen. Fuer jede Ruestung
       wird ein Eintrag vorgenommen, mit dem Objekt der jeweiligen
       Ruestung als Key. Hierbei werden die Ruestungen erst eingetragen,
       wenn ihr jeweiliges QueryDefend() aufgerufen wird, d.h. es sind nicht
       von Anfang an alle getragenen Ruestung drin. Jeder Eintrag im Mapping
       besitzt die folgenden 2 Werte:
               DEF_ARMOUR_DAM - int
                   Der Schaden NACH QueryDefend (vorher 0)
               DEF_ARMOUR_PROT - int
                   Verteidigungswert der Ruestung VOR DefendFunc
       Bsp: Ich will wissen, wie gut 'ruestung' schuetzte:
            spell[EINFO_DEFEND][DEFEND_ARMOURS][ruestung,DEF_ARMOUR_PROT]

   DEFEND_GUILD - Array
       Eine Liste mit der Modifikation der Gilde mit der Struktur
               ({
                       GUILD_DAM - int
                         Der veraenderte Schaden
                       GUILD_DAMTYPE - string/string*
                         Die veraenderte Schadensart
               })



   DEFEND_RESI - int
       Schaden nach CheckResistance



   DEFEND_BODY - int
       Schaden nach Beruecksichtigung des Bodies (nur
       physikalisch)



   DEFEND_LOSTLP - int
       Tatsaechlich abgezogene LP



   DEFEND_CUR_ARMOUR_PROT - int
       Schutz der Ruestung vor Call der
       DefendFunc. Ist nur in der DefendFunc definiert. Kann auch aus
       DEFEND_ARMOURS entnommen werden


SIEHE AUCH
==========

   Attack, Defend

18.Jul 2006 Muadib
