blob: 12060f07535ac9cce4a70f5e256010f35689298e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001UseSpell()
Zesstra953f9972017-02-18 15:37:36 +01002**********
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra953f9972017-02-18 15:37:36 +01008 public varargs int UseSpell(string str, string spell)
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/living/skills.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra953f9972017-02-18 15:37:36 +010020 string str Spell-Optionen
21 string spell optionaler Spellname
MG Mud User88f12472016-06-24 23:31:02 +020022
Zesstra953f9972017-02-18 15:37:36 +010023
24BESCHREIBUNG
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
90
91SIEHE AUCH
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