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