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