QuerySkillAttribute()
*********************


FUNKTION
========

   public int QuerySkillAttribute(string atrname)


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

   /std/living/skill_attributes.c


ARGUMENTE
=========

   string atrname            Name des abzufragenden Attributs


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

   Mit dieser Funktion kann man den Wert bestimmter Attribute
   abfragen, dabei werden das abgefragte Attribut, Todesfolgen,
   SA_QUALITY und Werte in P_SKILL_ATTRIBUTE_OFFSETS
   beruecksichtigt.



   Momentane Skills siehe ModifySkillAttribute.


RUECKGABEWERT
=============

   Der Wert des Attributs. Ist nichts bestimmtes gesetzt, wird
   der Standardwert 100 zurueckgegeben.
   Der Rueckgabewert liegt zwischen 10 bis 1000 (Prozent).


BEMERKUNG
=========

   Die Funktion ist zwar als 'varargs' definiert, gibt man allerdings
   keinen Attributnamen an, wird immer 100 zurueckgegeben.


BEISPIEL
========

   // ein Spieler kann ein Stueck Kaese stibitzen, wenn er schnell
   // genug ist ... (15% ueber normal)
   if(this_player()->QuerySkillAttribute(SA_SPEED)>=115) {
     tell_object(this_player(),
       "Du schnappst das Stueck Kaese aus der Falle.\n");
     obj kaese = clone_object(...);
     [...]
   } else {
     mapping amap=map_indices(VALID_ARMOUR_CLASS,#'!);
     amap[AT_GLOVE]=100;
     tell_object(this_player(),
       "Du bist zu langsam und die Falle schnappt hungrig zu.\n");
     this_player()->Defend(random(100),
                          ({DT_PIERCE, DT_SQUEEZE}),
                          ([SP_PHYSICAL_ATTACK: 1,
                            SP_REDUCE_ARMOUR: amap,
                            SP_SHOW_DAMAGE: 0]));
   }


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

   Skills Lernen:  LearnSkill, ModifySkill, LimitAbility
   * Nutzung:      UseSpell, UseSkill
   * Abfragen:     QuerySkill, QuerySkillAbility
   * Modifikation: ModifySkillAttribute,
                   QuerySkillAttributeModifier, RemoveSkillAttributeModifier
     * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
   * sonstig:      spruchermuedung, skill_info_liste
   * Properties:   P_NEWSKILLS

5. Okt 2011 Gloinson
