ModifySkillAttributeOld()
*************************


FUNKTION
========

   varargs int ModifySkillAttributeOld(object caster, string atrname,
                                       int value, int duration, mixed fun)


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

   /std/living/skill_attributes.c


ARGUMENTE
=========

   <caster>    IGNORIERT
               frueher Objekt, das die Modifikation vornimmt, heute ist
               dieses Argument ohne Bedeutung und wird ignoriert.

   <atrname>   STRING
               Name des zu veraendernden Attributes
               (Definiert in /sys/living/skill_attributes.h)

   <value>     INT
               Neuer Wert des Attributs (Standard: 100)

   <duration>  INT
               Dauer in Sekunden

   <fun>       NICHT MEHR UNTERSTUETZT - ModifySkillAttribute() nutzen!!


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

   Diese Funktion existiert nur aus Kompatibilitaetsgruenden. Bitte in neuen
   Objekten NICHT mehr verwenden und in alten nach Moeglichkeit ausbauen!

   Aendert ein Skill-Attribut eines Living.



   Fuer <value> ist folgendes zu beachten:
   Frueher handelte es sich um einen multiplikativen Faktor. 100 hatte die
   Bedeutung von 1 und veraenderte nichts. Heute sind die Modifikatoren
   additiv. Diese Funktion macht eine einfache Umrechnung, indem sie vom hier
   uebergeben Wert 100 abzieht. (In der Annahme, dass frueher meist eh nur
   ein Modifikator zur gleichen Zeit aktiv war.)
   Gibt man hier also hier eine 100 an, wird ein Modifikator von 0 einge-
   tragen, der nichts aendert, bei 200 wird ein Modifikator von 100 einge-
   tragen, bei 50 einer von -50, welcher das Skillattribute folglich
   reduziert.

   Es sind momentan max. 5 gleichzeitige Skillattribute-Modifikatoren pro SA
   zulaessig.


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

    0  wenn der Wert ungueltig ist oder aus sonstigem Grunde nicht gesetzt
       werden konnte (fuer bessere Diagnostik -> ModifySkillAttribute()).
   >0  wenn alles okay war


BEMERKUNGEN
===========

   Frueher musste ein setzendes Objekt ein groesseres P_LEVEL haben als das
   Objekt, welches einen vorherigen Modifikator gesetzt hat, um diesen zu
   ueberschreiben. Dies ist inzwischen ohne Bedeutung.


BEISPIELE
=========

   Ein NPC:

   void
   create() {
   .
   .
   .
   AddSpell(1, 1,
     "Der fuerchterliche NPC haut Dir auf den Kopf.\n",
     "Der fuerchterliche NPC haut @WEN auf den Kopf.\n",
     DT_MAGIC, "schwaechen");
   .
   .
   }

   schwaechen(object enemy, int damage, mixed *dam_type) {
     int ergebnis;
     ergebnis = enemy->ModifySkillAttributeOld(this_object(), SA_QUALITY, 50, 5);
     if (ergebnis > 0)
         tell_object(enenmy, "Du fuehlst Dich ganz schwach.\n");
   }



   Der NPC schwaecht seinen Gegner erheblich! Alles wird fuer 5 Sekunden um
   50, d.h. 0.5 Skillattribute reduziert (50 - 100 => -50 als Modifikator).


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

   P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS,
   ModifySkillAttribute, QuerySkillAttribute(),
   RemoveSkillAttributeModifer(), QuerySkillAttributeModifier()

07.08.2008 Zesstra
