
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
