Gilden 
*******

Gilden sind dazu da, Spielern besondere Faehigkeiten zu verleihen. Dies
koennen Zaubersprueche (Spells) sein, es kann aber auch andere Faehigkeiten
(Skills) geben. Als Spell gilt jede Faehigkeit, die ein Spieler mit einem
Befehl direkt aufrufen muss. Damit auch andere Gilden die gleichen
Zaubersprueche verwenden koennen, muessen die Sprueche in eigenen
Spellbooks abgelegt werden. Eine Gilde kann Sprueche aus beliebigen
Spellbooks verwenden und diese ggf. leicht modifizieren. 

Gildenobjekt 
=============

Eine Gilde muss ein Objekt haben, bei dem der Spieler der Gilde beitreten
bzw. austreten und die Faehigkeiten der Gilde erwerben kann. Gewoehnlich
ist dies ein Raum, der "/std/gilden_room" inheritet, es kann aber auch ein
anderes Objekt sein, fuer diesen Fall ist "/std/gilden_ob" vorgesehen. 

Die Beitrittsbedingungen fuer die Gilde werden in Form eines 
Restriction-Mappings in der Property P_GILDEN_RESTRICTIONS
abgelegt. 

Das Spellbook, in dem die Spells der Gilde stehen, muss in
P_GUILD_DEFAULT_SPELLBOOK genannt sein. Es wird automatisch
"/spellbooks/" vorne an den Namen angefuegt. Die Spells, die aus diesem
Spellbook verwendet werden sollen, koennen dann einfach mit
AddSpell(name) ausgewaehlt werden. Wenn ein Spruch modifiziert werden
soll so kann ein Mapping mit zusaetzlichen Informationen als zweites
Argument angegeben werden. In diesem kann man dann auch ein anderes
Spellbook als das Default-Spellbook mit ([SI_SPELLBOOK:name])
angeben. In P_GLOBAL_SKILLPROPS kann ein Mapping angegeben
werden, das alle Spells und Skills modifiziert. P_GLOBAL_SKILLPROPS
und P_GILDEN_DEFAULT_SPELLBOOK muessen uebrigens gesetzt
werden bevor mit AddSpell/Skill Spells oder Skills hinzugefuegt werden. 

Fuer andere Faehigkeiten sind AddSkill und LearnSkill vorgesehen.
LearnSkill wird im Gegensatz zu LearnSpell jedoch nicht automatisch vom
/std/gilden_room mit "lerne" aufgerufen, weil i.A. diese Faehigkeiten auf
andere Art erworben werden, z.B. beim Gildeneintritt oder durch
Trainingsstunden. Mit LearnSkill kann man nur solche Faehigkeiten
erwerben, die mit AddSkill angefuegt wurden. 

Skills werden ueblicherweise durch den Aufruf von UseSkill im Spieler
verwendet. Wenn der Spieler in einer Gilde ist und eine Funktion unter
SI_SKILLFUNC zu finden ist, so wird diese im Gildenobjekt aufgerufen,
sonst wird versucht StdSkill_Name im Spieler aufzurufen. Wenn auch das
fehlschlaegt wird nur der Wert unter SI_ABILITY zurueckgegeben. 

Es stehen folgende Funktionen zur Benutzung zur Verfuegung: 

 o QuerySpell(name)
   Liefert die Informationen zu diesem Spell 
 o QuerySkill(name)
   Liefert die Informationen zu dieser Faehigkeit 
 o AddSpell(name,info)
   Spell wird hinzugefuegt 
 o AddSkill(name,info)
   Faehigkeit wird zugefuegt 
 o LearnSpell(name)
   Spieler lernt den angegebenen Spell, falls moeglich. Liste der Spells
   wird ausgegeben, falls keiner angegeben ist. 
 o LearnSkill(name)
   Spieler erwirbt diese Faehigkeit, falls moeglich. Liste aller
   Faehigkeiten wird ausgegeben, falls keine angegeben ist. 
 o GildenName()
   Liefert den Namen dieser Gilde. 
 o InitialSkillAbility(info,spieler)
   Rechnet den Anfangswert fuer SI_SKILLABILITY aus. 
 o SkillListe(x)
   Es wird angezeigt, welche Spells/Skills der Spieler lernen kann.
   Dabei bedeutet x: 
    o 1: Nur Spells anzeigen 
    o 2: Nur Skills anzeigen 
    o 3: Beides anzeigen 

Von diesen Funktionen stehen in /std/gilden_room automatisch
bei_oder_austreten und LearnSpell dem Spieler zur Verfuegung. 

Spellbook 
==========

Spellbooks stellen die Spells zur Verfuegung, die Spieler oder Monster
verwenden koennen. Alle Spellbooks sollten /std/spellbook inheriten. In der
einfachsten Form kann ein Spell wie folgt hinzugefuegt werden: 
AddSpell(verb,kosten,level)
Dabei ist "verb" sowohl der Name des Verbs, mit dem der Spruch
aufgerufen werden soll, wie auch der Name der Funktion, die dabei
aufgerufen wird. "kosten" sind die Magiepunkte, die fuer den Spruch
benoetigt werden und "level" ist der Spielerlevel, der noetig ist, um diesen
Spruch zu lernen. 

In der flexibleren Form werden Spells mit 
AddSpell(verb,kosten,info)
hinzugefuegt. Dabei ist "info" ein Mapping, in dem alle anderen 
Spell-Informationen stehen. Dabei kann z.B. eine andere Funktion als das
Verb als Eintrag 
SI_SKILLFUNC:name
angegeben werden. Wenn zum Lernen eine bestimmte Stufe erforderlich ist
so muss 
SI_SKILLRESTR_LEARN:([P_LEVEL:level])
eingetragen sein. Es sollten alle Werte, von denen ein Spell abhaengt, in dem
Mapping eingetragen sein. Dadurch haben Gilden die Moeglichkeit, Spells
mit Offsets und Faktoren zu modifizieren. 

In P_GLOBAL_SKILLPROPS kann ein Mapping stehen, dass bei jedem
Spell zum Info addiert wird. Dieses sollte gesetzt werden, bevor die Spells
mit AddSpell hinzugefuegt werden. 

Die Benutzung von Spells laeuft wie folgt ab: 

 o Zuerst wird ueberprueft, ob der Spieler den Spruch verwenden darf.
   Dazu wird die Funktion CanTrySpell aufgerufen. Diese prueft
   normalerweise, ob der Spieler kein Geist ist und ob er die
   Einschraenkungen erfuellt, die als SI_SKILLRESTR_USE
   angegeben sind. 
 o Als naechstes wird geprueft, ob der Spieler noch genug Magiepunkte
   hat. Diese stehen im Mapping unter SI_SPELLCOST. 
 o Als letztes wird geprueft, ob der Spieler noch erschoepft ist von
   seinem letzten Spruch. 
 o Nun wird die eigentliche Funktion des Spells aufgerufen, wenn es die
   Umgebung zulaesst. Die Funktion muss einen positiven Wert
   zurueckgeben, wenn der Spruch gelungen ist, und einen negativen,
   wenn er misslungen ist. Falls der Spruch aus irgend einem Grund
   nicht anwendbar ist soll 0 zurueckgegeben werden. 
 o Bei Erfolg oder Misserfolg werden die Magiepunkte abgezogen und
   der Spieler ist fuer die naechste Zeit erschoepft. Die Zeitspanne ist
   im Mapping unter SI_SPELLFATIGUE zu finden. 
 o Bei Erfolg wird die Funktion "Erfolg" aufgerufen, bei Misserfolg
   die Funktion "Misserfolg" 
 o Die Funktion "Misserfolg" ruft normalerweise die Funktion "Learn"
   auf, damit der Spieler aus seinen Fehlern lernt. 

Die eigentliche Spellfunktion sollte, falls der Spell anwendbar ist, mit
SpellSuccess pruefen, ob er erfolgreich ist oder nicht. Dabei gelten Werte
groesser Null als Erfolg. In der Spellfunktion sollten, falls moeglich, 
SkillAttribute des Spielers sowie Faktoren und Offsets beruecksichtigt
werden. Fuer beides stehen einfach zu handhabende Funktionen zur
Verfuegung. Dies ist zwar etwas mehr Arbeit, dafuer geschehen dann Dinge
wie Interaktionen zwischen den Spells fast automatisch. 

Folgende Funktionen stellt das Standard-Spellbook zur Verfuegung: 

 o QuerySpell(name)
   Liefert Informations-Mapping zu diesem Spell. 
 o AddSpell(name,kosten,info)
   Fuegt Spell mit angegebenen Kosten und dem
   Informations-Mapping ins Spellbook ein. 
 o TryAttackSpell(opfer,schaden,typen,is_spell,caster,info)
   Versucht den Angriffs-Spruch auf den Gegner anzuwenden. Die
   mittleren 4 Werte sind die, die auch bei Defend uebergeben werden.
   Dabei wird die Abwehrfaehigkeit des Gegners gegen Magie und das
   Skill-Attribut SA_DAMAGE automatisch beruecksichtigt. 
 o TryDefaultAttackSpell(opfer,caster,info,is_spell)
   Wie TryAttackSpell, nur werden Schaden und Schadenstypen
   automatisch aus dem Informations-Mapping entnommen. Bei beiden
   Funktionen sollte als is_spell uebrigens ein String stehen, z.B.
   "Feuerball", damit es leichter moeglich ist, Monster zu schreiben, die
   auf diese reagieren. 
 o SpellSuccess(caster,info)
   Ermittelt, ob der Spell funktioniert oder fehlschlaegt. Dabei wird
   auch eine evtl. vorhandene Spellcasting-Faehigkeit (SK_CASTING)
   beruecksichtigt. Ohne Spellcasting-Faehigkeit liegt das Ergebnis
   zwischen -MAX_ABILITY und +MAX_ABILITY, mit dieser
   Faehigkeit koennen die Werte zwischen -2*MAX_ABILITY und
   +2*MAX_ABILITY liegen. Werte kleiner oder gleich Null sollen
   als Fehlschlag interpretiert werden. 
   Wer will, kann Werte ueber +MAX_ABILITY als besonders gut
   gelungene Spells interpretieren und bei Werten unter
   -MAX_ABILITY unangenehme Wirkungen ausloesen, z.B. kann
   sich der Spell dann gegen den Spieler richten... 
   Wenn ein Spieler die Spellcasting-Faehigkeit hat und ein Spruch
   besonders gut gelingt, so freut er sich und verbessert diese
   Faehigkeit. 
 o CanTrySpell(caster,info)
   Ermittelt, ob der Spieler den Spruch anwenden darf. Normalerweise
   ist diese der Fall, wenn er kein Geist ist und die Bedingungen
   erfuellt, die unter SI_SKILLRESTR_USE im Mapping eingetragen
   sind. 
 o Learn(caster,spell,info)
   Diese Funktion wird normalerweise bei Misserfolg aufgerufen,
   damit der Spieler aus seinen Fehlern lernt. Dabei wird
   ueblicherweise die Intelligenz des Spielers beruecksichtigt. Fuer je 2
   Stufen A_INT bekommt der Spieler SI_SKILLLEARN hinzu. 

   Moechte man ein anderes Attribut zum lernen verwenden kann man dies
   in Form eines Mappings in SI_LEARN_ATTRIBUTE tun.

   SI_LEARN_ATTRIBUTE:([A_STR:1]) macht das Lernen rein staerkeabhaengig,
   SI_LEARN_ATTRIBUTE:([A_STR:1,A_INT:2]) bildet den gewichteten Mittelwert
   von STR und zweifacher INT.  

 o Erfolg(caster,spell,info)
   Diese Funktion wird bei Erfolg aufgerufen. 
 o Misserfolg (caster,spell,info)
   Diese Funktion wird bei Misserfolg aufgerufen. 
 o FindVictim(wen,spieler,msg)
   "wen" wird in der Umgebung des Spielers gesucht. Falls diese
   Variable Null ist wird zufaellig ein Feind ausgewaehlt. Falls
   niemand gefunden wird, so wird "msg" ausgegeben. 
 o FindLivingVictim(wen,spieler,msg)
   Wie FindVictim, nur wird zusaetzlich ueberprueft, ob es ein
   Lebewesen ist. 
 o FindEnemyVictim(wen,spieler,msg)
   Wie FindLivingVictim, nur der Spieler selbst wird ausgenommen
   und wenn es vorher noch kein Feind war, so wird Kill aufgerufen
   damit es hinterher garantiert einer ist. 
 o FindGroup(spieler,wen)
   Bei Spielern findet die Funktion alle Monster im Raum, wenn "wen"
   negativ ist, alle Spieler wenn "wen" positiv ist und alle Lebewesen
   wenn "wen" Null ist. Bei Monstern ist es genau umgekehrt. Es sollte
   jedoch FindGroupP mit 100% verwendet werden. 
 o FindGroupN(spieler,wen,n)
   Wie FindGroup, jedoch maximal n Personen. Das Skill-Attribut
   SA_EXTENSION wird automatisch beruecksichtigt. 
 o FindGroupP(spieler,wen,prozent)
   Wie FindGroup, jedoch jede Person mit der angegebenen
   Wahrscheinlichkeit. Das Skill-Attribut SA_EXTENSION wird
   automatisch beruecksichtigt. 

Neue Funktionen im Living 
==========================

 o QuerySkillAttribute(name)
   Hiermit kann das Skill-Attribut mit dem angegebenen Namen
   abgefragt werden. 
 o SetSkillAttribute(caster,name,wert,dauer,func)
   Hiermit kann das angegebene Skill-Attribut vom caster fuer die
   angegebene Dauer auf einen Wert gesetzt werden. Es kann eine
   Funktion angegeben werden, die den Wert statt dessen liefern soll. 
 o QuerySkill(name)
   Dies liefert die spielerspezifischen Skill-Informationen. 
 o QuerySkillAbility(name)
   Dies liefert von den Skill-Informationen nur SI_ABILITY. 
 o ModifySkill(name,info,diff)
   Modifiziert die Skill-Informationen. Wenn "info" ein Mapping ist,
   so wird es zu dem alten Mapping "addiert" (also die angegebenen
   Werte geaendert), wenn nur ein Wert angegeben ist, wird
   angenommen dass es sich dabei um SI_ABILITY handelt. 
 o LearnSkill(name,add,diff)
   Addiert den angegebenen Wert zu SI_ABILITY. Dabei ist "diff" der
   Schwierigkeitsgrad von diesem Spell/Skill. Durch den
   Schwierigkeitsgrad SI_ABILITY abhaengig vom Level begrenzt. 
 o UseSpell(arg,spell)
   Das Lebewesen benutzt den Spell mit den angegebenen Argumenten.
   Wenn kein Spell angegeben ist, so wird query_verb() verwendet. 
 o UseSkill(skill,arg)
   Das Lebewesen benutzt die Faehigkeit. 

Neue Properties/Funktionen in Living/Combat 
============================================

Einige Sprueche erfordern es, das Verhalten bei Attack und Defend ziemlich
weitreichend zu aendern. Dafuer wurden folgende Properties und
Funktionen eingebaut: 

 o P_TMP_ATTACK_HOOK
   Hier kann ein Array der Form ({Endzeitpunkt,Objekt,Funktion})
   stehen. Solange der Endzeitpunkt noch nicht ueberschritten wurde
   und das angegebene Objekt existiert, wird anstelle von Attack die
   Funktion in dem Objekt aufgerufen. Wenn die Funktion 0 liefert
   wird der Rest von Attack nicht mehr ausgefuehrt. 
 o P_TMP_DEFEND_HOOK
   Wie P_ATTACK_HOOK, nur mit Defend. Damit sind z.B.
   Sprueche moeglich, die fuer kurze Zeit eine magische Schutzhuelle
   erschaffen. Wenn die Funktion 0 liefert wird der Rest von Defend
   nicht mehr ausgefuehrt. Wenn es ein Array der Form
   ({damage,dt,is_spell}) ergibt wird es wie bei DefendOther
   interpretiert. 
 o P_DEFENDERS
   Liste von Lebewesen, die mit InformDefend(enemy) informiert
   werden sollen, sobald ein neuer Feind hinzukommt. Bei einem
   zufaellig ausgewaehltem Lebewesen aus dieser Liste wird ausserdem
   DefendOther mit den Argumenten von Defend aufgerufen. 
 o AddDefender(friend)
   Fuegt Lebewesen in P_DEFENDERS ein, wenn es noch nicht in der
   Liste ist. 
 o InformDefend(enemy)
   Siehe oben. 
 o DefendOther(dam,dt,is_spell,enemy)
   Mit dieser Funktion kann man Lebewesen erschaffen, die Schaden
   von anderen abwenden oder modifizieren. Wenn diese Funktion ein
   Array ({dam,dt,is_spell}) zurueckgibt so werden bei dem zu
   verteidigenden Lebewesen diese Werte genommen anstelle der alten.
   Man kann also z.B. ein Monster erschaffen, das ein
   feuerempfindliches anderes Monster verteidigt, indem es z.B.
   Feuerbaelle in Eishagel verwandelt. 

Standard-Skills 
================

Folgende Faehigkeiten werden schon beruecksichtigt und sind auch
vordefiniert. Wenn sie unveraendert uebernommen werden sollen muss nur
SI_ABILITY gesetzt werden. 

 o SK_SWORDFIGHTING
   Schwertkampf. Bis zu 33+A_STR+A_DEX Aufschlag bei
   Schwertern, wenn jemand diese Faehigkeit zu 100% hat. 
 o SK_WEAPONLESS
   Kampf mit blossen Haenden. Bis zu 100+A_STR+3*A_DEX
   Aufschlag. 
 o SK_TWOHANDED
   Kampf mit zweihaendigen Waffen. Bis zu 33+A_STR Aufschlag. 
 o SK_NIGHTVISION
   Wer diese Faehigkeit zu 100% hat braucht 20 Sekunden pro
   fehlendem Lichtlevel um sich an die Dunkelheit zu gewoehnen. 
 o SK_BOOZE
   Mit 100% dieser Faehigkeit wird bei jedem alkoholischen Getraenk
   80% vom Alkoholgehalt abgezogen. 

Folgende Faehigkeiten werden beruecksichtigt, sind aber nicht vordefiniert: 

 o SK_MAGIC_ATTACK
   Wenn diese Faehigkeit vorhanden ist, wird die Funktion unter
   SI_SKILLFUNC im Gildenobjekt aufgerufen, falls der Spieler sonst
   mit blossen Haenden angreifen wuerde. Wenn dabei ein Mapping
   zurueckgegeben wird, so werden die Werte von
   SI_SKILLDAMAGE, SI_SKILLDAMAGE_TYPE und
   SI_SKILLDAMAGE_MSG genommen anstelle der Werte in
   P_HANDS. 
 o SK_MAGIC_DEFENSE
   Wenn hier unter SI_SKILLFUNC eine Funktion eingetragen ist, so
   wird sie bei Defend im Gildenobjekt aufgerufen und bekommt im
   Informations-Mapping SI_SKILLDAMAGE,
   SI_SKILLDAMAGE_TYPE und SI_SPELL uebergeben. Wenn sie
   ein Mapping zurueckgibt werden hieraus SI_SKILLDAMAGE und
   SI_SKILLDAMAGE_TYPE entnommen und ersetzen die alten
   Werte von "dam" und "dam_type". 
 o FIGHT(Waffentyp)
   Falls diese Faehigkeit vorhanden ist wird der entsprechenden
   Funktion in SI_SKILLDAMAGE der bisherige Schaden uebergeben.
   Falls sie ein Mapping zurueckliefert wird an dieser Stelle auch der
   neue Schaden erwartet. 
 o SK_FIGHT
   Wie Fight(Waffentyp), nur wird diese Faehigkeit, falls vorhanden,
   bei jeder Waffe benutzt und kann auch zusaetzlich andere Werte fuer
   SI_SKILLDAMAGE_TYPE ergeben. Waffe und Waffentyp werden
   uebrigens in SI_WEAPON und SI_WEAPON_TYPE uebergeben. 
 o SK_CASTING
   Spellcasting. Die Wahrscheinlichkeit, dass der Spell gelingt, steigt
   bei 100% dieser Faehigkeit auf das Doppelte. Nur mit dieser
   Faehigkeit ist es moeglich, ueber die Maximalgrenzen zu kommen,
   so dass dann auch Spells besonders gut gelingen koennen. 

Temporaere Property-Aenderungen 
================================

Oft muessen Spells irgendwo Properties fuer kurze Zeit veraendern, wie
z.B. P_LIGHT oder P_NOMAGIC in Raeumen. Fuer diesen Zweck kann
man in /obj/tmp_prop_master die Funktion SetTmpProp aufrufen. Diese
Funktion erwartet das Objekt, in dem die Property zu setzen ist, den Namen
der Property, den zeitweiligen Wert und den Zeitpunkt, bis zu dem diese
Aenderung gelten soll. 

Skill Informationen 
++++++++++++++++++++

In den Informationsmappings zu den Spells/Skills sollten alle (zusaetzlich)
noetigen Informationen stehen, denn nur wenn z.B. ein Feuerball in einem
Spellbook als Schaden 300 eingetragen hat und diesen Wert dem Mapping
entnimmt, kann eine andere Gilde diesen Spruch recyclen und mit Schaden
400 anbieten, natuerlich sollte er dann auch in der Gilde mehr kosten. 

SIEHE AUCH: skill_info_liste

Faktoren und Offsets 
---------------------

Man kann in dem Informations-Mapping zu jedem numerischen Wert
"Name" noch zwei zusaetzliche Werte FACTOR("Name") und
OFFSET("Name") eintragen und diese Werte automatisch zur eigentlichen
Wertbestimmung beruecksichtigen. Mit folgenden Funktionen sollte man
im Spellbook dem Mapping Werte entnehmen: 

 o GetValue(name,map,spieler) 
 o GetOffset(name,map,spieler)
   OFFSET(name). 
 o GetFactor(name,map,spieler)
   Ergibt FACTOR(name), falls ungleich Null, sonst 100. 
 o GetFValue(name,map,spieler)
   Ergibt (Wert*Faktor)/100. 
 o GetValueO(name,map,spieler)
   Ergibt Wert+Offset. 
 o GetFValueO(name,map,spieler)
   Ergibt (Wert*Faktor)/100+Offset. 

Nach Moeglichkeit sollte man davon im Spellbook GetFValueO benutzen,
wenn es angebracht ist. Auf jeden Fall sollten von den drei Werten
moeglicht viele auf eine angemessene Weise beruecksichtigt werden, denn
dadurch bekommt das Gildenobjekt feinere Kontrollmoeglichkeiten, wenn
ein Spruch modifiziert werden soll. Es ist dann fuer die Gilde aeusserst
einfach festzulegen, dass z.B. Zwerge bei allen Angriffsspruechen 20%
mehr Schaden verursachen und beim Feuerball Elfen einen hoeheren
garantierten Wert hinzubekommen. 

Funktionen 
-----------

Wenn ein Spellbook eine der oben angesprochenen Funktionen benutz, um
einen numerischen Wert zu ermitteln und anstelle des Wertes steht etwas,
das als Funktion interprtiert werden kann, so wird diese Funktion
ausgewertet und das Ergebnis als Wert genommen. Als Funktion
interpretiert werden kann: 

 o Eine Closure 
 o Ein Array ({objekt,funktionsname}) oder ({objektname,funktionsname}) 
 o Ein Funktionsname. Hierbei sollte man sich jedoch darueber im
   klaren sein, in welchem Objekt versucht wird die Funktion
   aufzurufen. Ueblicherweise geschieht dies im Spellbook, jedoch
   werden SI_DIFFICULTY, SI_SKILLLEARN und SI_SPELLCOST
   auch beim Lernen benoetigt und dies geschieht vom Gildenobjekt
   aus. Wenn bei diesen 3 Eintraegen eine Funktion den Wert liefern
   soll, so muss sie in eine der drei anderen Formen eingetragen werden,
   damit das richtige Objekt ermittelt werden kann. 

SIEHE AUCH: execute_anything
   
Fuer nicht-numerische Werte kann man GetData verwenden. Dabei werden
jedoch nur closures automatisch ausgewertet. 

Skill Attribute 
++++++++++++++++

Skill-Attribute sind Attribute, die alle anderen Skills beeinflussen koennen.
Normalerweise sind alle Skill-Attribute 100%, sie koennen jedoch fuer
kurze Zeit auf andere Werte zwischen 10% und 1000% gesetzt werden. Bei
der Abfrage der Attribute werden 3 Werte beruecksichtigt: 

 o Wert, der vom Lebewesen selbst gesetzt wurde. 
 o Wert, der von einem anderen unter 100% gesetzt wurde. Wenn
   mehrere andere Lebewesen den Wert unter 100% gesetzt haben so
   gilt die Aenderung von dem mit dem hoechsten Level. Eine solche
   Aenderung wird ueblicherweise von einem Gegner veranlasst. 
 o Wert, der von einem anderen ueber 100% gesetzt wurde. Auch hier
   gilt die Aenderung von dem Lebewesen mit dem hoechsten Level. 

Wenn z.B. ein Spieler seine Geschwindigkeit fuer zwei Minuten auf 200%
und ein Monster sie fuer eine Minute auf 25% setzt, so ist sie eine Minute
lang 50% und die naechste Minute 200% bevor sie wieder auf 100% gesetzt
wird. 

SIEHE AUCH: ModifySkillAttribute

Restriction Mappings 
+++++++++++++++++++++

Mit Restriction Mappings koennen Einschraenkungen auesserst einfach
angegeben werden. In dem Mapping wird einfach nur angegeben, was durch
welchen Wert eingeschraenkt werden soll. Wenn z.B. mindestens Level 15
und Intelligenz 10 verlangt wird, so ist das Mapping
([P_LEVEL:15,A_INT:10]). Folgende Einschraenkungen koennen verlangt
werden: 

SIEHE AUCH: check_restrictions

Einschraenkungen werden mit check_restrictions(spieler,mapping)
ueberprueft. Die Funktion liefert 0 zurueck wenn der Spieler alle
Einschraenkungen erfuellt und einen String mit der Begruendung, falls eine
Einschraenkung nicht erfuellt ist. 

Programmierrichtlinien 
=======================

 o In Spellbooks moeglichst oft Faktoren und Offsets beruecksichtigen. 
 o Die Skill-Attribute beruecksichtigen, falls moeglich. 
 o Alles Spells muessen eine Verzoegerungszeit haben, in der kein
   weiterer Spell anwendbar ist. Hiervon kann es Ausnahmen geben, wenn
   das Gildenkonzept es anders vorsieht (z.B. bei den Kaempfern) oder
   sonst reguliert.
 o Kostenlose Spells sollte es nicht geben. Falls doch, dann nur mit sehr
   hoher Verzoegerungszeit, sonst lassen die Leute nur ihr Frontend
   spielen. 
 o Jeder Skill sollte eine levelabhaengige maximale Faehigkeit haben.
   D.h., wenn SI_DIFFICULTY gesetzt ist sollte der Wert groesser als
   -100 sein. 
 o Spells duerfen nicht Monster beliebig hoher Staerke einfach
   umhauen. Es sollte nur bis zu einer Maximalstaerke moeglich sein. 
 o Der Schaden, den ein Spruch bewirkt, darf von der Staerke nicht
   groesser sein, als der, den eine Waffe mit WC 25*SP bewirken
   wuerde. Auch hier sollte man ein wenig gesunden Menschenverstand
   spielen lassen - es kommt auch immer drauf an, ob ein Angriff
   magisch ist oder physikalisch.
 o Die Heilung sollte nicht die dafuer noetigen SP ueberschreiten. 
   Ausnahmen fuer explizite Heilgilden (Klerus) kann es geben.

Auswirkung von SI_DIFFICULTY 
-----------------------------

Folgende Maximalwerte sind fuer SI_ABILITY bei den angegebenen Leveln
moeglich, wenn SI_DIFFICULTY auf den Wert in der linken Spalte gesetzt
ist. 

SIEHE AUCH: LimitAbility oder /std/living/skills::LimitAbility

5. Okt 2011 Gloinson
 
