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
