| 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 |