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