AddDrink()
==========

VERALTETE LFUN
--------------
::

    Diese Lfun ist als veraltet gekennzeichnet (deprecated); ihre Nutzung
    loest daher eine Warnung aus. Bitte stattdessen AddToMenu() verwenden.


FUNKTION
--------

::

    void AddDrink(string nameOfDrink, mixed ids, int price, int heal,
                  int strength, int soak, mixed myFunction);


BEMERKUNGEN
-----------
::

    Die Funktion AddDrink() sollte NICHT MEHR BENUTZT werden.
    Bitte AddToMenu() verwenden.

    Bestehende Aufrufe koennen wie folgt ersetzt werden:

    AddToMenu(nameOfDrink, ids,
      ([ P_VALUE : price, P_DRINK : soak, P_ALCOHOL : strength,
         P_HP : heal/2, P_SP : heal/2 ]),
         min(heal/2, 5), myFunction, 0, 0, 0);


SIEHE AUCH
----------
::

    AddToMenu(), RemoveFromMenu(), AddFood()


Last modified: 2021-04-05, Arathorn

