
UseSkill()
**********


FUNKTION
========

   public varargs mixed UseSkill(string skill, mapping args)


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

   /std/living/skills.c


ARGUMENTE
=========

   string skill     Skill-Name
   mapping args     Argumente (veraenderte Skillmapping-Informationen)


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

   Benutzt einen Skill. Dieser Skill sollte (als grossgeschriebener Skill)
   im Living vorliegen und das Living darf kein Geist sein.



   Die Argumente 'args' werden temporaer auf das Skillmapping des Living
   addiert (also nur fuer diesen Aufruf und SI_INHERIT gueltig).



   Eine ausfuehrbare Skill-Funktion zum Skill wird in folgender
   Reihenfolge bestimmt:
   - eine gesetzte SI_CLOSURE nutzen
   - ein gesetztes SI_SKILLFUNC in der gesetzten Gilde nutzen
   - im Living die Funktion "StdSkill_"+skill (zB Waffenskills) nutzen
   - QuerySkillAbility() nutzen
   Die so bestimmte Skill-Funktion wird dann als SI_CLOSURE im Spieler
   gesetzt und ist bis zur Zerstoerung der entsprechenden Objekte gueltig.
   Die Methode wird dann gerufen (der Skill also angewandt).



   Standardmaessig gibt ein UseSkill() also einfach den SI_SKILLABILITY-Wert
   eines Skills zurueck, es sei denn, eine Funktion wurde fuer den Skill
   an einer der oben genannten Stellen implementiert.



   Ein eventuell uebergeordneter Skill (SI_INHERIT) wird mit dem durch den
   Aufruf der Skill-Funktion veraenderten Mapping mit UseSkill(skill, args)
   ebenfalls noch ausgefuehrt, bevor das Resultat zurueckgegeben wird.


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

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

4. Okt 2011 Gloinson
