Added public files

Roughly added all public files. Probably missed some, though.
diff --git a/doc/wiz/gilden-doku b/doc/wiz/gilden-doku
new file mode 100644
index 0000000..08e3aa7
--- /dev/null
+++ b/doc/wiz/gilden-doku
@@ -0,0 +1,496 @@
+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
+