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