AddToProp()
***********


FUNKTION
========

public varargs int AddToProp(string propname,
<int|float|string|mixed*|mapping|bytes> summand)


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

   /std/thing/properties.c /sys/thing/properties.h (Prototyp)


ARGUMENTE
=========

   * propname: Die Property, die veraendert wird

   * summand: Was auf den aktuellen Wert "aufaddiert" werden soll


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

   Die Funktion ruft den aktuellen Wert der Property mittels
   QueryProp() ab, addiert <summand> drauf und setzt den neuen Wert
   mit SetProp() wieder. Damit ist sie einfach eine Abkuerzung fuer
   SetProp(pname, QueryProp(pname)+ summand).

   Erlaubte Typen fuer <summand> sind nur solche, mit denen += etwas
   anfangen kann und welche zum aktuellen Wert der Property passen.
   Alles andere loest ggf. einen (Laufzeit-)Fehler auf.


RUeCKGABEWERT
=============

   Der Wert der Property nach der Aenderung.


BEISPIELE
=========

   // einen Int aufaddieren AddToProp(P_WC, 42); // ein Element an ein
   Array in der Property anhaengen AddToProp(P_WAITFOR,
   ({"zesstra"})); // Ein Mappingkey in ein Mapping in einer Property
   anhaengen (sollte der Key bereits existieren, wird dessen Wert
   damit ueberschrieben) AddToProp(P_M_HEALTH_MOD, ([P_HP:5]))


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

   QueryProp(), SetProp() Konzept: properties, /std/thing/properties.c

19.06.2025, Zesstra
