UseSpell()
FUNKTION:
    public varargs int UseSpell(string str, string spell)

DEFINIERT IN:
    /std/living/skills.c

ARGUMENTE:
    string str       Spell-Optionen
    string spell     optionaler Spellname

BESCHREIBUNG:
    Benutzt einen Spell, dessen Spellname 'spell' ggf ueber query_verb()
    ermittelt wird. Dieser Spell sollte (als kleingeschriebener
    Skill/Spell) im Living vorliegen.
    
    Die Argumente 'str' werden als SI_SKILLARG temporaer in das
    Skillmapping eingetragen (also nur fuer diesen Aufruf gueltig).
    
    Eine ausfuehrbare Spell-Funktion zum Spell wird in folgender
    Reihenfolge bestimmt:
    - eine gesetzte SI_CLOSURE nutzen
    - "UseSpell" an einem gesetzten SI_SPELLBOOK nutzen
    - "UseSpell" an der gesetzten P_GUILD nutzen
      - [UseSpell der Gilde sucht iA ebenfalls nur den Spell am Spellbook]
    - eine Closure mit Rueckgabewert 0 erstellen
    Die so bestimmte Spell-Funktion wird dann als SI_CLOSURE im Spieler
    gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
    Die Methode wird dann gerufen (der Spell also angewandt).

    Standardmaessig gibt ein UseSpell() also 0 zurueck, es sei denn, eine
    Funktion wurde fuer den Spell an einer der oben genannten Stellen
    implementiert.

    SI_INHERIT ist fuer Spells beim Aufruf wirkungslos (gilt aber bei
    LearnSkill normal).

    Ein Durchlauf von UseSpell durch den Spieler sieht in etwa so aus:
      1) Die Methode wird als Empfaenger fuer Kommandos bekannt gemacht.
         Das passiert mit der Anweisung
         'add_action("UseSpell", "", 1);' in den Dateien player/base.c und
         in living/npc.c.

      2) /std/living/skills::UseSpell wird durch Kommando oder Heartbeat
         gerufen.
      
      3) UseSpell() ermittelt eine SI_CLOSURE oder delegiert diesen Aufruf
         an die gueltige Gilde/das Spellbook weiter.
      
      4) Eine gueltige Closure wird ausgefuehrt. UseSpell() uebergibt dabei
         die Spell/Skill-Informationen und SI_SKILLARG.
      
      4.1.) Im Normalfall einer Gilde/Spellbook landet der Aufruf ueber
            /std/gilden_ob::UseSpell() in /std/spellbook::UseSpell() und
            dieses ruft eine Spellfunktion im Spellbook auf.
            Die Spellfunktion arbeitet mit den Spell-Informationen und
            gibt ein ERFOLG, MISSERFOLG oder 0 dafuer zurueck, ob das
            Spellbook Lernen/Fehlermeldung oder nichts machen soll.
            Dementsprechend werden P_SP, P_ATTACK_BUSY und
            P_NEXT_SPELL_TIME im Spellbook geaendert.

      5.) Der Aufruf der Closure kehrt zurueck und wird zurueckgegeben.
          Damit ist der 0-Rueckgabewert der Spellfunktion im Spellbook
          aequivalent einem nicht ausgefuehrten Kommando.

SIEHE AUCH:
    Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
    * Nutzung:      UseSkill
    * Abfragen:     QuerySkill, QuerySkillAbility
    * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
                    QuerySkillAttributeModifier, RemoveSkillAttributeModifier
      * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
    * sonstig:      spruchermuedung, skill_info_liste
    * Properties:   P_NEWSKILLS
    Spellbook:      UseSpell (spellbook), Learn, SpellSuccess

5. Okt 2011 Gloinson