
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
