blob: ddf1c4d1afff9e0f2fbe1d01fc32ccbe9a540390 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001UseSpell()
2FUNKTION:
3 public varargs int UseSpell(string str, string spell)
4
5DEFINIERT IN:
6 /std/living/skills.c
7
8ARGUMENTE:
9 string str Spell-Optionen
10 string spell optionaler Spellname
11
12BESCHREIBUNG:
13 Benutzt einen Spell, dessen Spellname 'spell' ggf ueber query_verb()
14 ermittelt wird. Dieser Spell sollte (als kleingeschriebener
15 Skill/Spell) im Living vorliegen.
16
17 Die Argumente 'str' werden als SI_SKILLARG temporaer in das
18 Skillmapping eingetragen (also nur fuer diesen Aufruf gueltig).
19
20 Eine ausfuehrbare Spell-Funktion zum Spell wird in folgender
21 Reihenfolge bestimmt:
22 - eine gesetzte SI_CLOSURE nutzen
23 - "UseSpell" an einem gesetzten SI_SPELLBOOK nutzen
24 - "UseSpell" an der gesetzten P_GUILD nutzen
25 - [UseSpell der Gilde sucht iA ebenfalls nur den Spell am Spellbook]
26 - eine Closure mit Rueckgabewert 0 erstellen
27 Die so bestimmte Spell-Funktion wird dann als SI_CLOSURE im Spieler
28 gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
29 Die Methode wird dann gerufen (der Spell also angewandt).
30
31 Standardmaessig gibt ein UseSpell() also 0 zurueck, es sei denn, eine
32 Funktion wurde fuer den Spell an einer der oben genannten Stellen
33 implementiert.
34
35 SI_INHERIT ist fuer Spells beim Aufruf wirkungslos (gilt aber bei
36 LearnSkill normal).
37
38 Ein Durchlauf von UseSpell durch den Spieler sieht in etwa so aus:
39 1) Die Methode wird als Empfaenger fuer Kommandos bekannt gemacht.
40 Das passiert mit der Anweisung
41 'add_action("UseSpell", "", 1);' in den Dateien player/base.c und
42 in living/npc.c.
43
44 2) /std/living/skills::UseSpell wird durch Kommando oder Heartbeat
45 gerufen.
46
47 3) UseSpell() ermittelt eine SI_CLOSURE oder delegiert diesen Aufruf
48 an die gueltige Gilde/das Spellbook weiter.
49
50 4) Eine gueltige Closure wird ausgefuehrt. UseSpell() uebergibt dabei
51 die Spell/Skill-Informationen und SI_SKILLARG.
52
53 4.1.) Im Normalfall einer Gilde/Spellbook landet der Aufruf ueber
54 /std/gilden_ob::UseSpell() in /std/spellbook::UseSpell() und
55 dieses ruft eine Spellfunktion im Spellbook auf.
56 Die Spellfunktion arbeitet mit den Spell-Informationen und
57 gibt ein ERFOLG, MISSERFOLG oder 0 dafuer zurueck, ob das
58 Spellbook Lernen/Fehlermeldung oder nichts machen soll.
59 Dementsprechend werden P_SP, P_ATTACK_BUSY und
60 P_NEXT_SPELL_TIME im Spellbook geaendert.
61
62 5.) Der Aufruf der Closure kehrt zurueck und wird zurueckgegeben.
63 Damit ist der 0-Rueckgabewert der Spellfunktion im Spellbook
64 aequivalent einem nicht ausgefuehrten Kommando.
65
66SIEHE AUCH:
67 Skills Lernen: LearnSkill, ModifySkill, LimitAbility
68 * Nutzung: UseSkill
69 * Abfragen: QuerySkill, QuerySkillAbility
70 * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
71 QuerySkillAttributeModifier, RemoveSkillAttributeModifier
72 * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
73 * sonstig: spruchermuedung, skill_info_liste
74 * Properties: P_NEWSKILLS
75 Spellbook: UseSpell (spellbook), Learn, SpellSuccess
76
775. Okt 2011 Gloinson