SpellDefend()
=============

FUNKTION
--------
::

     public int SpellDefend(object caster,mapping sinfo);

DEFINIERT IN
------------
::

     /std/living/combat.c

ARGUMENTE
---------
::

     object caster	- Gegner
     mapping sinfo	- Zusatzinformationen zum Spell

BESCHREIBUNG
------------
::

     Ueber den Skill SK_SPELL_DEFEND mit den Aufrufparametern
       SI_ENEMY    : <caster>
     und
       SI_SKILLARG : <sinfo>
     wird eine Abwehrchance in 0.01%-Schritten fuer einen
     Spell ermittelt, also 0% - 100% bzw. als Rueckgabewert
     0 - 10000.

     

     Weiterhin wird automatisch P_MAGIC_RESISTANCE_OFFSET und der Skill
     SK_SPELL_DEFEND beruecksichtigt.

RUeCKGABEWERT
-------------
::

     Die Abwehrchance in 0.01%-Schritten.

     

     Fuer Spieler wird dieser Rueckgabewert auf 3333 maximal, also 33,33%
     Abwehrmoeglichkeit beschraenkt.

BEMERKUNGEN
-----------
::

     Die Spellbooks muessen selbst auf die Auswertung dieser Funktion
     achten! Dies geschieht nur im Falle von TryGlobalAttackSpell()
     und bei Spells fuer NPCs mittels P_SPELLS automatisch!

     Bitte bei NPCs nicht pauschal 100% / 10000 zurueckgeben. Danke.

SIEHE AUCH
----------
::

     Verwandt:     P_MAGIC_RESISTANCE_OFFSET
     Aehnlich:     P_NOMAGIC
     Generell:     TryGlobalAttackSpell, /std/spellbook.c
     Sonstiges:    UseSkill, SK_SPELL_DEFEND

29.Dez 2007 Gloinson

