LearnSkill()
************


FUNKTION
========

   public varargs void LearnSkill(string sname, int add, int diff)


DEFINIERT IN
============

   /std/living/skills.c


ARGUMENTE
=========

   string sname     der zu lernende Skill
   string add       Anzahl zu lernender Skillpunkte
   int diff         Schwierigkeit


BESCHREIBUNG
============

   Die Methode laesst einen interaktiven (eingeloggten) Spieler den
   Skill 'sname' um 'add' Punkte lernen.

   Dabei wird sichergestellt, dass 'add' den Wert MAX_SKILLEARN nicht
   ueberschreitet, der Skill nicht verschwindet und fuer uebergeordnete
   Skills (SI_INHERIT) dieser uebergeordnete Skill auch einen Lerneffekt
   erfaehrt.

   Wird zB von Learn (spellbook) und SpellSuccess (spellbook) gerufen.


SIEHE AUCH
==========

   Skills Lernen:  ModifySkill, LimitAbility
   * Nutzung:      UseSpell, UseSkill
   * Abfragen:     QuerySkill, QuerySkillAbility
   * Modifikation: ModifySkillAttribute, QuerySkillAttribute,
                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
   * sonstig:      spruchermuedung
   * Properties:   P_NEWSKILLS
   Spellbook:      Learn, SpellSuccess

3. Okt 2011 Gloinson
