blob: 08e3aa7a75eff6d083d66b66847264efc7d516b4 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001Gilden
2*******
3
4Gilden sind dazu da, Spielern besondere Faehigkeiten zu verleihen. Dies
5koennen Zaubersprueche (Spells) sein, es kann aber auch andere Faehigkeiten
6(Skills) geben. Als Spell gilt jede Faehigkeit, die ein Spieler mit einem
7Befehl direkt aufrufen muss. Damit auch andere Gilden die gleichen
8Zaubersprueche verwenden koennen, muessen die Sprueche in eigenen
9Spellbooks abgelegt werden. Eine Gilde kann Sprueche aus beliebigen
10Spellbooks verwenden und diese ggf. leicht modifizieren.
11
12Gildenobjekt
13=============
14
15Eine Gilde muss ein Objekt haben, bei dem der Spieler der Gilde beitreten
16bzw. austreten und die Faehigkeiten der Gilde erwerben kann. Gewoehnlich
17ist dies ein Raum, der "/std/gilden_room" inheritet, es kann aber auch ein
18anderes Objekt sein, fuer diesen Fall ist "/std/gilden_ob" vorgesehen.
19
20Die Beitrittsbedingungen fuer die Gilde werden in Form eines
21Restriction-Mappings in der Property P_GILDEN_RESTRICTIONS
22abgelegt.
23
24Das Spellbook, in dem die Spells der Gilde stehen, muss in
25P_GUILD_DEFAULT_SPELLBOOK genannt sein. Es wird automatisch
26"/spellbooks/" vorne an den Namen angefuegt. Die Spells, die aus diesem
27Spellbook verwendet werden sollen, koennen dann einfach mit
28AddSpell(name) ausgewaehlt werden. Wenn ein Spruch modifiziert werden
29soll so kann ein Mapping mit zusaetzlichen Informationen als zweites
30Argument angegeben werden. In diesem kann man dann auch ein anderes
31Spellbook als das Default-Spellbook mit ([SI_SPELLBOOK:name])
32angeben. In P_GLOBAL_SKILLPROPS kann ein Mapping angegeben
33werden, das alle Spells und Skills modifiziert. P_GLOBAL_SKILLPROPS
34und P_GILDEN_DEFAULT_SPELLBOOK muessen uebrigens gesetzt
35werden bevor mit AddSpell/Skill Spells oder Skills hinzugefuegt werden.
36
37Fuer andere Faehigkeiten sind AddSkill und LearnSkill vorgesehen.
38LearnSkill wird im Gegensatz zu LearnSpell jedoch nicht automatisch vom
39/std/gilden_room mit "lerne" aufgerufen, weil i.A. diese Faehigkeiten auf
40andere Art erworben werden, z.B. beim Gildeneintritt oder durch
41Trainingsstunden. Mit LearnSkill kann man nur solche Faehigkeiten
42erwerben, die mit AddSkill angefuegt wurden.
43
44Skills werden ueblicherweise durch den Aufruf von UseSkill im Spieler
45verwendet. Wenn der Spieler in einer Gilde ist und eine Funktion unter
46SI_SKILLFUNC zu finden ist, so wird diese im Gildenobjekt aufgerufen,
47sonst wird versucht StdSkill_Name im Spieler aufzurufen. Wenn auch das
48fehlschlaegt wird nur der Wert unter SI_ABILITY zurueckgegeben.
49
50Es stehen folgende Funktionen zur Benutzung zur Verfuegung:
51
52 o QuerySpell(name)
53 Liefert die Informationen zu diesem Spell
54 o QuerySkill(name)
55 Liefert die Informationen zu dieser Faehigkeit
56 o AddSpell(name,info)
57 Spell wird hinzugefuegt
58 o AddSkill(name,info)
59 Faehigkeit wird zugefuegt
60 o LearnSpell(name)
61 Spieler lernt den angegebenen Spell, falls moeglich. Liste der Spells
62 wird ausgegeben, falls keiner angegeben ist.
63 o LearnSkill(name)
64 Spieler erwirbt diese Faehigkeit, falls moeglich. Liste aller
65 Faehigkeiten wird ausgegeben, falls keine angegeben ist.
66 o GildenName()
67 Liefert den Namen dieser Gilde.
68 o InitialSkillAbility(info,spieler)
69 Rechnet den Anfangswert fuer SI_SKILLABILITY aus.
70 o SkillListe(x)
71 Es wird angezeigt, welche Spells/Skills der Spieler lernen kann.
72 Dabei bedeutet x:
73 o 1: Nur Spells anzeigen
74 o 2: Nur Skills anzeigen
75 o 3: Beides anzeigen
76
77Von diesen Funktionen stehen in /std/gilden_room automatisch
78bei_oder_austreten und LearnSpell dem Spieler zur Verfuegung.
79
80Spellbook
81==========
82
83Spellbooks stellen die Spells zur Verfuegung, die Spieler oder Monster
84verwenden koennen. Alle Spellbooks sollten /std/spellbook inheriten. In der
85einfachsten Form kann ein Spell wie folgt hinzugefuegt werden:
86AddSpell(verb,kosten,level)
87Dabei ist "verb" sowohl der Name des Verbs, mit dem der Spruch
88aufgerufen werden soll, wie auch der Name der Funktion, die dabei
89aufgerufen wird. "kosten" sind die Magiepunkte, die fuer den Spruch
90benoetigt werden und "level" ist der Spielerlevel, der noetig ist, um diesen
91Spruch zu lernen.
92
93In der flexibleren Form werden Spells mit
94AddSpell(verb,kosten,info)
95hinzugefuegt. Dabei ist "info" ein Mapping, in dem alle anderen
96Spell-Informationen stehen. Dabei kann z.B. eine andere Funktion als das
97Verb als Eintrag
98SI_SKILLFUNC:name
99angegeben werden. Wenn zum Lernen eine bestimmte Stufe erforderlich ist
100so muss
101SI_SKILLRESTR_LEARN:([P_LEVEL:level])
102eingetragen sein. Es sollten alle Werte, von denen ein Spell abhaengt, in dem
103Mapping eingetragen sein. Dadurch haben Gilden die Moeglichkeit, Spells
104mit Offsets und Faktoren zu modifizieren.
105
106In P_GLOBAL_SKILLPROPS kann ein Mapping stehen, dass bei jedem
107Spell zum Info addiert wird. Dieses sollte gesetzt werden, bevor die Spells
108mit AddSpell hinzugefuegt werden.
109
110Die Benutzung von Spells laeuft wie folgt ab:
111
112 o Zuerst wird ueberprueft, ob der Spieler den Spruch verwenden darf.
113 Dazu wird die Funktion CanTrySpell aufgerufen. Diese prueft
114 normalerweise, ob der Spieler kein Geist ist und ob er die
115 Einschraenkungen erfuellt, die als SI_SKILLRESTR_USE
116 angegeben sind.
117 o Als naechstes wird geprueft, ob der Spieler noch genug Magiepunkte
118 hat. Diese stehen im Mapping unter SI_SPELLCOST.
119 o Als letztes wird geprueft, ob der Spieler noch erschoepft ist von
120 seinem letzten Spruch.
121 o Nun wird die eigentliche Funktion des Spells aufgerufen, wenn es die
122 Umgebung zulaesst. Die Funktion muss einen positiven Wert
123 zurueckgeben, wenn der Spruch gelungen ist, und einen negativen,
124 wenn er misslungen ist. Falls der Spruch aus irgend einem Grund
125 nicht anwendbar ist soll 0 zurueckgegeben werden.
126 o Bei Erfolg oder Misserfolg werden die Magiepunkte abgezogen und
127 der Spieler ist fuer die naechste Zeit erschoepft. Die Zeitspanne ist
128 im Mapping unter SI_SPELLFATIGUE zu finden.
129 o Bei Erfolg wird die Funktion "Erfolg" aufgerufen, bei Misserfolg
130 die Funktion "Misserfolg"
131 o Die Funktion "Misserfolg" ruft normalerweise die Funktion "Learn"
132 auf, damit der Spieler aus seinen Fehlern lernt.
133
134Die eigentliche Spellfunktion sollte, falls der Spell anwendbar ist, mit
135SpellSuccess pruefen, ob er erfolgreich ist oder nicht. Dabei gelten Werte
136groesser Null als Erfolg. In der Spellfunktion sollten, falls moeglich,
137SkillAttribute des Spielers sowie Faktoren und Offsets beruecksichtigt
138werden. Fuer beides stehen einfach zu handhabende Funktionen zur
139Verfuegung. Dies ist zwar etwas mehr Arbeit, dafuer geschehen dann Dinge
140wie Interaktionen zwischen den Spells fast automatisch.
141
142Folgende Funktionen stellt das Standard-Spellbook zur Verfuegung:
143
144 o QuerySpell(name)
145 Liefert Informations-Mapping zu diesem Spell.
146 o AddSpell(name,kosten,info)
147 Fuegt Spell mit angegebenen Kosten und dem
148 Informations-Mapping ins Spellbook ein.
149 o TryAttackSpell(opfer,schaden,typen,is_spell,caster,info)
150 Versucht den Angriffs-Spruch auf den Gegner anzuwenden. Die
151 mittleren 4 Werte sind die, die auch bei Defend uebergeben werden.
152 Dabei wird die Abwehrfaehigkeit des Gegners gegen Magie und das
153 Skill-Attribut SA_DAMAGE automatisch beruecksichtigt.
154 o TryDefaultAttackSpell(opfer,caster,info,is_spell)
155 Wie TryAttackSpell, nur werden Schaden und Schadenstypen
156 automatisch aus dem Informations-Mapping entnommen. Bei beiden
157 Funktionen sollte als is_spell uebrigens ein String stehen, z.B.
158 "Feuerball", damit es leichter moeglich ist, Monster zu schreiben, die
159 auf diese reagieren.
160 o SpellSuccess(caster,info)
161 Ermittelt, ob der Spell funktioniert oder fehlschlaegt. Dabei wird
162 auch eine evtl. vorhandene Spellcasting-Faehigkeit (SK_CASTING)
163 beruecksichtigt. Ohne Spellcasting-Faehigkeit liegt das Ergebnis
164 zwischen -MAX_ABILITY und +MAX_ABILITY, mit dieser
165 Faehigkeit koennen die Werte zwischen -2*MAX_ABILITY und
166 +2*MAX_ABILITY liegen. Werte kleiner oder gleich Null sollen
167 als Fehlschlag interpretiert werden.
168 Wer will, kann Werte ueber +MAX_ABILITY als besonders gut
169 gelungene Spells interpretieren und bei Werten unter
170 -MAX_ABILITY unangenehme Wirkungen ausloesen, z.B. kann
171 sich der Spell dann gegen den Spieler richten...
172 Wenn ein Spieler die Spellcasting-Faehigkeit hat und ein Spruch
173 besonders gut gelingt, so freut er sich und verbessert diese
174 Faehigkeit.
175 o CanTrySpell(caster,info)
176 Ermittelt, ob der Spieler den Spruch anwenden darf. Normalerweise
177 ist diese der Fall, wenn er kein Geist ist und die Bedingungen
178 erfuellt, die unter SI_SKILLRESTR_USE im Mapping eingetragen
179 sind.
180 o Learn(caster,spell,info)
181 Diese Funktion wird normalerweise bei Misserfolg aufgerufen,
182 damit der Spieler aus seinen Fehlern lernt. Dabei wird
183 ueblicherweise die Intelligenz des Spielers beruecksichtigt. Fuer je 2
184 Stufen A_INT bekommt der Spieler SI_SKILLLEARN hinzu.
185
186 Moechte man ein anderes Attribut zum lernen verwenden kann man dies
187 in Form eines Mappings in SI_LEARN_ATTRIBUTE tun.
188
189 SI_LEARN_ATTRIBUTE:([A_STR:1]) macht das Lernen rein staerkeabhaengig,
190 SI_LEARN_ATTRIBUTE:([A_STR:1,A_INT:2]) bildet den gewichteten Mittelwert
191 von STR und zweifacher INT.
192
193 o Erfolg(caster,spell,info)
194 Diese Funktion wird bei Erfolg aufgerufen.
195 o Misserfolg (caster,spell,info)
196 Diese Funktion wird bei Misserfolg aufgerufen.
197 o FindVictim(wen,spieler,msg)
198 "wen" wird in der Umgebung des Spielers gesucht. Falls diese
199 Variable Null ist wird zufaellig ein Feind ausgewaehlt. Falls
200 niemand gefunden wird, so wird "msg" ausgegeben.
201 o FindLivingVictim(wen,spieler,msg)
202 Wie FindVictim, nur wird zusaetzlich ueberprueft, ob es ein
203 Lebewesen ist.
204 o FindEnemyVictim(wen,spieler,msg)
205 Wie FindLivingVictim, nur der Spieler selbst wird ausgenommen
206 und wenn es vorher noch kein Feind war, so wird Kill aufgerufen
207 damit es hinterher garantiert einer ist.
208 o FindGroup(spieler,wen)
209 Bei Spielern findet die Funktion alle Monster im Raum, wenn "wen"
210 negativ ist, alle Spieler wenn "wen" positiv ist und alle Lebewesen
211 wenn "wen" Null ist. Bei Monstern ist es genau umgekehrt. Es sollte
212 jedoch FindGroupP mit 100% verwendet werden.
213 o FindGroupN(spieler,wen,n)
214 Wie FindGroup, jedoch maximal n Personen. Das Skill-Attribut
215 SA_EXTENSION wird automatisch beruecksichtigt.
216 o FindGroupP(spieler,wen,prozent)
217 Wie FindGroup, jedoch jede Person mit der angegebenen
218 Wahrscheinlichkeit. Das Skill-Attribut SA_EXTENSION wird
219 automatisch beruecksichtigt.
220
221Neue Funktionen im Living
222==========================
223
224 o QuerySkillAttribute(name)
225 Hiermit kann das Skill-Attribut mit dem angegebenen Namen
226 abgefragt werden.
227 o SetSkillAttribute(caster,name,wert,dauer,func)
228 Hiermit kann das angegebene Skill-Attribut vom caster fuer die
229 angegebene Dauer auf einen Wert gesetzt werden. Es kann eine
230 Funktion angegeben werden, die den Wert statt dessen liefern soll.
231 o QuerySkill(name)
232 Dies liefert die spielerspezifischen Skill-Informationen.
233 o QuerySkillAbility(name)
234 Dies liefert von den Skill-Informationen nur SI_ABILITY.
235 o ModifySkill(name,info,diff)
236 Modifiziert die Skill-Informationen. Wenn "info" ein Mapping ist,
237 so wird es zu dem alten Mapping "addiert" (also die angegebenen
238 Werte geaendert), wenn nur ein Wert angegeben ist, wird
239 angenommen dass es sich dabei um SI_ABILITY handelt.
240 o LearnSkill(name,add,diff)
241 Addiert den angegebenen Wert zu SI_ABILITY. Dabei ist "diff" der
242 Schwierigkeitsgrad von diesem Spell/Skill. Durch den
243 Schwierigkeitsgrad SI_ABILITY abhaengig vom Level begrenzt.
244 o UseSpell(arg,spell)
245 Das Lebewesen benutzt den Spell mit den angegebenen Argumenten.
246 Wenn kein Spell angegeben ist, so wird query_verb() verwendet.
247 o UseSkill(skill,arg)
248 Das Lebewesen benutzt die Faehigkeit.
249
250Neue Properties/Funktionen in Living/Combat
251============================================
252
253Einige Sprueche erfordern es, das Verhalten bei Attack und Defend ziemlich
254weitreichend zu aendern. Dafuer wurden folgende Properties und
255Funktionen eingebaut:
256
257 o P_TMP_ATTACK_HOOK
258 Hier kann ein Array der Form ({Endzeitpunkt,Objekt,Funktion})
259 stehen. Solange der Endzeitpunkt noch nicht ueberschritten wurde
260 und das angegebene Objekt existiert, wird anstelle von Attack die
261 Funktion in dem Objekt aufgerufen. Wenn die Funktion 0 liefert
262 wird der Rest von Attack nicht mehr ausgefuehrt.
263 o P_TMP_DEFEND_HOOK
264 Wie P_ATTACK_HOOK, nur mit Defend. Damit sind z.B.
265 Sprueche moeglich, die fuer kurze Zeit eine magische Schutzhuelle
266 erschaffen. Wenn die Funktion 0 liefert wird der Rest von Defend
267 nicht mehr ausgefuehrt. Wenn es ein Array der Form
268 ({damage,dt,is_spell}) ergibt wird es wie bei DefendOther
269 interpretiert.
270 o P_DEFENDERS
271 Liste von Lebewesen, die mit InformDefend(enemy) informiert
272 werden sollen, sobald ein neuer Feind hinzukommt. Bei einem
273 zufaellig ausgewaehltem Lebewesen aus dieser Liste wird ausserdem
274 DefendOther mit den Argumenten von Defend aufgerufen.
275 o AddDefender(friend)
276 Fuegt Lebewesen in P_DEFENDERS ein, wenn es noch nicht in der
277 Liste ist.
278 o InformDefend(enemy)
279 Siehe oben.
280 o DefendOther(dam,dt,is_spell,enemy)
281 Mit dieser Funktion kann man Lebewesen erschaffen, die Schaden
282 von anderen abwenden oder modifizieren. Wenn diese Funktion ein
283 Array ({dam,dt,is_spell}) zurueckgibt so werden bei dem zu
284 verteidigenden Lebewesen diese Werte genommen anstelle der alten.
285 Man kann also z.B. ein Monster erschaffen, das ein
286 feuerempfindliches anderes Monster verteidigt, indem es z.B.
287 Feuerbaelle in Eishagel verwandelt.
288
289Standard-Skills
290================
291
292Folgende Faehigkeiten werden schon beruecksichtigt und sind auch
293vordefiniert. Wenn sie unveraendert uebernommen werden sollen muss nur
294SI_ABILITY gesetzt werden.
295
296 o SK_SWORDFIGHTING
297 Schwertkampf. Bis zu 33+A_STR+A_DEX Aufschlag bei
298 Schwertern, wenn jemand diese Faehigkeit zu 100% hat.
299 o SK_WEAPONLESS
300 Kampf mit blossen Haenden. Bis zu 100+A_STR+3*A_DEX
301 Aufschlag.
302 o SK_TWOHANDED
303 Kampf mit zweihaendigen Waffen. Bis zu 33+A_STR Aufschlag.
304 o SK_NIGHTVISION
305 Wer diese Faehigkeit zu 100% hat braucht 20 Sekunden pro
306 fehlendem Lichtlevel um sich an die Dunkelheit zu gewoehnen.
307 o SK_BOOZE
308 Mit 100% dieser Faehigkeit wird bei jedem alkoholischen Getraenk
309 80% vom Alkoholgehalt abgezogen.
310
311Folgende Faehigkeiten werden beruecksichtigt, sind aber nicht vordefiniert:
312
313 o SK_MAGIC_ATTACK
314 Wenn diese Faehigkeit vorhanden ist, wird die Funktion unter
315 SI_SKILLFUNC im Gildenobjekt aufgerufen, falls der Spieler sonst
316 mit blossen Haenden angreifen wuerde. Wenn dabei ein Mapping
317 zurueckgegeben wird, so werden die Werte von
318 SI_SKILLDAMAGE, SI_SKILLDAMAGE_TYPE und
319 SI_SKILLDAMAGE_MSG genommen anstelle der Werte in
320 P_HANDS.
321 o SK_MAGIC_DEFENSE
322 Wenn hier unter SI_SKILLFUNC eine Funktion eingetragen ist, so
323 wird sie bei Defend im Gildenobjekt aufgerufen und bekommt im
324 Informations-Mapping SI_SKILLDAMAGE,
325 SI_SKILLDAMAGE_TYPE und SI_SPELL uebergeben. Wenn sie
326 ein Mapping zurueckgibt werden hieraus SI_SKILLDAMAGE und
327 SI_SKILLDAMAGE_TYPE entnommen und ersetzen die alten
328 Werte von "dam" und "dam_type".
329 o FIGHT(Waffentyp)
330 Falls diese Faehigkeit vorhanden ist wird der entsprechenden
331 Funktion in SI_SKILLDAMAGE der bisherige Schaden uebergeben.
332 Falls sie ein Mapping zurueckliefert wird an dieser Stelle auch der
333 neue Schaden erwartet.
334 o SK_FIGHT
335 Wie Fight(Waffentyp), nur wird diese Faehigkeit, falls vorhanden,
336 bei jeder Waffe benutzt und kann auch zusaetzlich andere Werte fuer
337 SI_SKILLDAMAGE_TYPE ergeben. Waffe und Waffentyp werden
338 uebrigens in SI_WEAPON und SI_WEAPON_TYPE uebergeben.
339 o SK_CASTING
340 Spellcasting. Die Wahrscheinlichkeit, dass der Spell gelingt, steigt
341 bei 100% dieser Faehigkeit auf das Doppelte. Nur mit dieser
342 Faehigkeit ist es moeglich, ueber die Maximalgrenzen zu kommen,
343 so dass dann auch Spells besonders gut gelingen koennen.
344
345Temporaere Property-Aenderungen
346================================
347
348Oft muessen Spells irgendwo Properties fuer kurze Zeit veraendern, wie
349z.B. P_LIGHT oder P_NOMAGIC in Raeumen. Fuer diesen Zweck kann
350man in /obj/tmp_prop_master die Funktion SetTmpProp aufrufen. Diese
351Funktion erwartet das Objekt, in dem die Property zu setzen ist, den Namen
352der Property, den zeitweiligen Wert und den Zeitpunkt, bis zu dem diese
353Aenderung gelten soll.
354
355Skill Informationen
356++++++++++++++++++++
357
358In den Informationsmappings zu den Spells/Skills sollten alle (zusaetzlich)
359noetigen Informationen stehen, denn nur wenn z.B. ein Feuerball in einem
360Spellbook als Schaden 300 eingetragen hat und diesen Wert dem Mapping
361entnimmt, kann eine andere Gilde diesen Spruch recyclen und mit Schaden
362400 anbieten, natuerlich sollte er dann auch in der Gilde mehr kosten.
363
364SIEHE AUCH: skill_info_liste
365
366Faktoren und Offsets
367---------------------
368
369Man kann in dem Informations-Mapping zu jedem numerischen Wert
370"Name" noch zwei zusaetzliche Werte FACTOR("Name") und
371OFFSET("Name") eintragen und diese Werte automatisch zur eigentlichen
372Wertbestimmung beruecksichtigen. Mit folgenden Funktionen sollte man
373im Spellbook dem Mapping Werte entnehmen:
374
375 o GetValue(name,map,spieler)
376 o GetOffset(name,map,spieler)
377 OFFSET(name).
378 o GetFactor(name,map,spieler)
379 Ergibt FACTOR(name), falls ungleich Null, sonst 100.
380 o GetFValue(name,map,spieler)
381 Ergibt (Wert*Faktor)/100.
382 o GetValueO(name,map,spieler)
383 Ergibt Wert+Offset.
384 o GetFValueO(name,map,spieler)
385 Ergibt (Wert*Faktor)/100+Offset.
386
387Nach Moeglichkeit sollte man davon im Spellbook GetFValueO benutzen,
388wenn es angebracht ist. Auf jeden Fall sollten von den drei Werten
389moeglicht viele auf eine angemessene Weise beruecksichtigt werden, denn
390dadurch bekommt das Gildenobjekt feinere Kontrollmoeglichkeiten, wenn
391ein Spruch modifiziert werden soll. Es ist dann fuer die Gilde aeusserst
392einfach festzulegen, dass z.B. Zwerge bei allen Angriffsspruechen 20%
393mehr Schaden verursachen und beim Feuerball Elfen einen hoeheren
394garantierten Wert hinzubekommen.
395
396Funktionen
397-----------
398
399Wenn ein Spellbook eine der oben angesprochenen Funktionen benutz, um
400einen numerischen Wert zu ermitteln und anstelle des Wertes steht etwas,
401das als Funktion interprtiert werden kann, so wird diese Funktion
402ausgewertet und das Ergebnis als Wert genommen. Als Funktion
403interpretiert werden kann:
404
405 o Eine Closure
406 o Ein Array ({objekt,funktionsname}) oder ({objektname,funktionsname})
407 o Ein Funktionsname. Hierbei sollte man sich jedoch darueber im
408 klaren sein, in welchem Objekt versucht wird die Funktion
409 aufzurufen. Ueblicherweise geschieht dies im Spellbook, jedoch
410 werden SI_DIFFICULTY, SI_SKILLLEARN und SI_SPELLCOST
411 auch beim Lernen benoetigt und dies geschieht vom Gildenobjekt
412 aus. Wenn bei diesen 3 Eintraegen eine Funktion den Wert liefern
413 soll, so muss sie in eine der drei anderen Formen eingetragen werden,
414 damit das richtige Objekt ermittelt werden kann.
415
416SIEHE AUCH: execute_anything
417
418Fuer nicht-numerische Werte kann man GetData verwenden. Dabei werden
419jedoch nur closures automatisch ausgewertet.
420
421Skill Attribute
422++++++++++++++++
423
424Skill-Attribute sind Attribute, die alle anderen Skills beeinflussen koennen.
425Normalerweise sind alle Skill-Attribute 100%, sie koennen jedoch fuer
426kurze Zeit auf andere Werte zwischen 10% und 1000% gesetzt werden. Bei
427der Abfrage der Attribute werden 3 Werte beruecksichtigt:
428
429 o Wert, der vom Lebewesen selbst gesetzt wurde.
430 o Wert, der von einem anderen unter 100% gesetzt wurde. Wenn
431 mehrere andere Lebewesen den Wert unter 100% gesetzt haben so
432 gilt die Aenderung von dem mit dem hoechsten Level. Eine solche
433 Aenderung wird ueblicherweise von einem Gegner veranlasst.
434 o Wert, der von einem anderen ueber 100% gesetzt wurde. Auch hier
435 gilt die Aenderung von dem Lebewesen mit dem hoechsten Level.
436
437Wenn z.B. ein Spieler seine Geschwindigkeit fuer zwei Minuten auf 200%
438und ein Monster sie fuer eine Minute auf 25% setzt, so ist sie eine Minute
439lang 50% und die naechste Minute 200% bevor sie wieder auf 100% gesetzt
440wird.
441
442SIEHE AUCH: ModifySkillAttribute
443
444Restriction Mappings
445+++++++++++++++++++++
446
447Mit Restriction Mappings koennen Einschraenkungen auesserst einfach
448angegeben werden. In dem Mapping wird einfach nur angegeben, was durch
449welchen Wert eingeschraenkt werden soll. Wenn z.B. mindestens Level 15
450und Intelligenz 10 verlangt wird, so ist das Mapping
451([P_LEVEL:15,A_INT:10]). Folgende Einschraenkungen koennen verlangt
452werden:
453
454SIEHE AUCH: check_restrictions
455
456Einschraenkungen werden mit check_restrictions(spieler,mapping)
457ueberprueft. Die Funktion liefert 0 zurueck wenn der Spieler alle
458Einschraenkungen erfuellt und einen String mit der Begruendung, falls eine
459Einschraenkung nicht erfuellt ist.
460
461Programmierrichtlinien
462=======================
463
464 o In Spellbooks moeglichst oft Faktoren und Offsets beruecksichtigen.
465 o Die Skill-Attribute beruecksichtigen, falls moeglich.
466 o Alles Spells muessen eine Verzoegerungszeit haben, in der kein
467 weiterer Spell anwendbar ist. Hiervon kann es Ausnahmen geben, wenn
468 das Gildenkonzept es anders vorsieht (z.B. bei den Kaempfern) oder
469 sonst reguliert.
470 o Kostenlose Spells sollte es nicht geben. Falls doch, dann nur mit sehr
471 hoher Verzoegerungszeit, sonst lassen die Leute nur ihr Frontend
472 spielen.
473 o Jeder Skill sollte eine levelabhaengige maximale Faehigkeit haben.
474 D.h., wenn SI_DIFFICULTY gesetzt ist sollte der Wert groesser als
475 -100 sein.
476 o Spells duerfen nicht Monster beliebig hoher Staerke einfach
477 umhauen. Es sollte nur bis zu einer Maximalstaerke moeglich sein.
478 o Der Schaden, den ein Spruch bewirkt, darf von der Staerke nicht
479 groesser sein, als der, den eine Waffe mit WC 25*SP bewirken
480 wuerde. Auch hier sollte man ein wenig gesunden Menschenverstand
481 spielen lassen - es kommt auch immer drauf an, ob ein Angriff
482 magisch ist oder physikalisch.
483 o Die Heilung sollte nicht die dafuer noetigen SP ueberschreiten.
484 Ausnahmen fuer explizite Heilgilden (Klerus) kann es geben.
485
486Auswirkung von SI_DIFFICULTY
487-----------------------------
488
489Folgende Maximalwerte sind fuer SI_ABILITY bei den angegebenen Leveln
490moeglich, wenn SI_DIFFICULTY auf den Wert in der linken Spalte gesetzt
491ist.
492
493SIEHE AUCH: LimitAbility oder /std/living/skills::LimitAbility
494
4955. Okt 2011 Gloinson
496