
Misserfolg()
************


FUNKTION
========

   void Misserfolg(object caster, string spell, mapping sinfo)


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

   /std/spellbook.c


ARGUMENTE
=========

   object caster    Spell sprechender Spieler
   string spell     Spellname
   mapping sinfo    Spell-Info-Mapping mit allen Informationen


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

   Wird bei Misserfolg eines Spells im Spellbook aufgerufen und
   ruft die Lernfunktion Learn() nach einer Fehlermeldung.



   Kann ueberschrieben werden, um die Meldungen anzupassen.


BEISPIEL
========

   // Misserfolge im Klerus mit angepassten Meldungen
   void Misserfolg(object caster, string spell, mapping sinfo) {
     switch(spell) {
       case "begrabe":
         tell_object(caster, BS(
           "Du begraebst Deine Hoffnungen, dass Du diese Anrufung jemals "
           "perfekt beherrschen wirst."));
         tell_room(environment(caster),
           caster->Name(WER)+" tritt die Leiche lustlos.\n", ({caster}));
         break;
       case "blitz":
       [...]
     }



     int old_abil = sinfo[SI_SKILLABILITY];
     Learn(caster, spell, sinfo);
     int new_abil = caster->QuerySkillAbility(spell);
     if (old_abil < new_abil)
       tell_object(caster, "Die Goetter schenken Dir eine Erleuchtung.\n");
     else
       tell_object(caster, "Leider lernst Du nicht aus Deinem Fehler.\n");
   }


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

   Spellbook Lernen: Learn, SpellSuccess, Erfolg
   * Verwalten:      AddSpell, QuerySpell
   * Angriff:        TryAttackSpell, TryDefaultAttackSpell,
                     TryGlobalAttackSpell
   * Properties:     P_GLOBAL_SKILLPROPS, P_SB_SPELLS
   Skills Lernen:    LearnSkill, ModifySkill, LimitAbility
   * Nutzung:        UseSpell, UseSkill
   * sonstig:        spruchermuedung, skill_info_liste

5. Okt 2011 Gloinson
