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
  1. Okt 2011 Gloinson