
AddMoney()
**********


AddMoney(L)
===========


FUNKTION
========

   public int AddMoney(int amount);


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

   /std/container/moneyhandler.c
   /std/living/moneyhandler.c
   /std/player/moneyhandler.c


ARGUMENTE
=========

   int amount
       Die zufuehrende oder abziehende Geldmenge


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

   Dem Spieler wird die in <amount> festgelegte Geldmenge abgezogen oder
   zugefuehrt.


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

   Technisch gesehen wird Geld mit entsprechendem <amount> erzeugt
   ("/items/money.c") und mittels "move" in den Spieler bewegt.  Das Ergebnis
   dieses "move"-Aufrufes wird hier uebergeben, z.B. 1 fuer OK.
   Die moeglichen Fehler-Konstanten sind in /sys/moving.h definiert, siehe
   auch Dokumentation zu "move".


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

   <amount> kann sowohl positiv als auch negativ sein. Welche Auswirkungen
   beide Faelle haben, sollte klar sein. Doch sollte bei einem negativen
   <amount> vorher mittels QueryMoney() abgefragt werden, ob der Spieler
   auch ueber ausreichend Geld verfuegt.
   Wird dem Spieler Geld abgezogen, ist darauf zu achten, dieses in der
   Zentralbank einzuzahlen (s.a.:PayIn() ).
   Verschafft man dem Spieler Geld aus dem Nichts, muss es vorher bei der
   Zentralbank abgebucht (WithDraw()) werden.

   Achtung: Kann der Spieler die in <amount> angebene Geldmenge nicht
            tragen, werden ihm keine Muenzen in sein Inventar bewegt.  Die
            Fehlermeldung erkennt man an dem Rueckgabewert ME_TOO_HEAVY.

   Im Gegensatz zu Spielern haben alle anderen Objekte (Raeume, NPC, etc.)
   standardmaessig keinen Moneyhandler. In diesem Fall muss in Lebewesen
   "/std/living/moneyhandler"
   und in nicht-Lebewesen
   "/std/container/moneyhandler"
   geerbt werden.


BEISPIELE
=========

   // gib ihm Geld
   this_player()->AddMoney(50);

   // nimm ihm Geld
   if(this_player()->AddMoney(-50)==1)
    write("Der Ork beklaut dich!\n");


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

   Geldhandling:      QueryMoney(L)
   Zentralbank:       PayIn(L), WithDraw(L)
   Sonstiges:         move(L),
                      /items/money.c, /sys/moving.h, /sys/money.h, /sys/bank.h
                      /std/container/moneyhandler.c

18.02.2013, Zesstra
