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
