blob: b5cfbf75ac3860c8127dee5b9ecc8e5759e526f1 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002UseSpell()
Zesstra953f9972017-02-18 15:37:36 +01003**********
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006FUNKTION
7========
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 public varargs int UseSpell(string str, string spell)
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 /std/living/skills.c
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018ARGUMENTE
19=========
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 string str Spell-Optionen
22 string spell optionaler Spellname
MG Mud User88f12472016-06-24 23:31:02 +020023
Zesstra953f9972017-02-18 15:37:36 +010024
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