Lpc Manpages

FUNKTION:
    public varargs mapping QuerySkillAttributeModifier(object caster,
                                                       string *atrnames)

DEFINIERT IN:
    /std/living/skill_attributes.c

ARGUMENTE:
    <caster>   :   Objekt, das die gesuchten Mods gesetzt hat.

    <atrnames> : Array von Skill-Attributen, die durchsucht werden sollen.

BESCHREIBUNG:
    Diese Funktion liefert alle Mods von <caster> auf den Skill-Attributen
    <atrnames> in einem Mapping zurueck.
    Wird <atrnames> nicht angegeben oder ist es ein leeres Array, werden alle
    Skill-Attribute nach Mods abgesucht.
    Wird <caster> nicht angeben oder ist er 0, so werden alle Mods der
    gewuenschten Skill-Attribute geliefert.
    Dementsprechend bekommt man alle Mods aller Skill-Attribute, wenn keins
    von beidem angegeben wird.

RUECKGABEWERT:
    ([ ]), falls keine Modifikatoren gefunden wurden.

    In anderen Faellen ist die Datenstruktur des Mappings wie folgt:
    ([ atrname1: ([ <caster>: <value>; <duration> ]),
       atrname2: ([ <caster>: <value>; <duration> ]) ])

    Die Schluessel im Mapping sind die jeweiligen Skill-Attribute, die Werte
    des Mappings sind erneut Mappings, die als Schluessel die Objekte haben,
    die die Mods gesetzt haben. In diesem Mapping gehoeren zu jedem Schluessel
    zwei Werte: den Wert des Modifikators und die Ablaufzeit.

    <value> kann hierbei ein int oder eine closure sein, <duration> ist ein
    int, <caster> ist ein Objekt.
    Ggf. kann das innere Mapping natuerlich auch mehrere Modifikatoren
    enthalten (also caster1, caster2, usw.).

BEISPIELE:
     Ein Objekt moechte seinen bestehenden Modifikator um 20 und die
     Gueltigkeit um 13 erhoehen:

     mapping res = ob->QuerySkillAttributeModifier(this_object(),
                                                  ({SA_DAMAGE}) );

     if ( member(res, SA_DAMAGE) && member(res[SA_DAMAGE], this_object()))
      {
       // alten Mod ueberschreiben und Werte dabei anheben.
       ob->ModifySkillAttributeModifier(SA_DAMAGE,
       res[SA_DAMAGE][this_object(),0] + 20,
       res[SA_DAMAGE][this_object(),1] + 13 );
      }
      // neuen Mod setzen.
     else
      ob->ModifySkilAttributeModifier(SA_DAMAGE,20,13);

     Ein Objekt hat den Fluch der unpraezisen Schnelligkeit, der SA_DAMAGE
     reduziert, sofern das Lebewesen einen positiven Modifikator auf SA_SPEED
     hat:

     mapping res = ob->QuerySkillAttributeModifier(0, ({SA_SPEED}) );

     if ( member(res,SA_SPEED) )
     {
      int val, int dur;

      // groessten Mod rausfinden, dabei keine closures beruecksichtigen.
      foreach(object caster, int v, int d: res[SA_SPEED])
       {
        if (intp(v) && v>val)
         {
          val=v;
          dur=d;
         }
       }

      // pos. Mod auf SA_SPEED gefunden, entsprechenden neg. Mod auf
      // SA_DAMAGE setzen, der zum gleichen Zeitpunkt ungueltig wird wie der
      // Mod auf SA_SPEED.
      if (val > 0)
       {
        if (ob->ModifySkillAttribute(SA_DAMAGE, -val, dur) == SA_MOD_OK)
         tell_object(ob,"Ganz tolle Fluchmeldung.\n");
       }
     }

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

----------------------------------------------------------------------------
01.11.17, Torin