PayIn()
*******


FUNKTION
========

   varargs void PayIn(int amount, int percent);


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

   /p/daemon/zentralbank.c


ARGUMENTE
=========

   int amount -       einzuzahlender Betrag
   int percent -      Bewertungsprozentsatz


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

   Es wird Brutto amount Geld in die Bank eingezahlt. Der Prozentsatz legt
   fest, wieviel tatsaechlich gutgeschrieben wird:
   Gutschrift = amount*percent/100

   Wird percent nicht angegeben, dann wird der derzeitige Bankbewertungs-
   massstab fuer Geld angenommen.


BEISPIELE
=========

   #include <bank.h>
   ...
   AddCmd("spende",#'action_spende,
          "Was willst du spenden?");
   ...
   int action_spende(string str, extra *o) {
    int i;
    if(sscanf("%d muenze",i)==1 && i>0)
     if(this_player()->QueryMoney(i) && this_player()->AddMoney(-i)) {
      write("Du spendest "+i+" Muenzen.\n");
      say(this_player()->Name(WER)+" spendet "+i+" Muenzen.\n");
      ZENTRALBANK->PayIn(i);



     } else
      write("Soviel hast du nicht dabei!\n");
    ...


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

   Unsere Zentralbank ist korrupt, vor allem dadurch, dass in Laeden und
   an anderen Stellen Geld erzeugt wird.


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

   Geldhandling:      AddMoney(L), QueryMoney(L)
   Zentralbank:       WithDraw(L), _query_current_money(L)
   Sonstiges:         /items/money.c, /sys/bank.h

27. Apr 2004 Gloinson
