AddFood()
=========

OBSOLETE LFUN
-------------

    Diese Efun existiert nicht mehr. Bitte stattdessen den Hook
    H_HOOK_INSERT benutzen. (s. /doc/std/hooks)

FUNKTION
--------

::

      void AddFood(string nameOfFood, mixed ids, int price, int heal,
                   mixed myFunction)


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

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

      Bestehende Aufrufe koennen wie folgt ersetzt werden:

      AddToMenu( nameOfFood,ids,
          ([ P_VALUE : price, P_FOOD : heal, P_HP : heal, P_SP : heal ]),
          ( min(heal, 5), myFunction, 0,0,0);


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

        AddToMenu(), RemoveFromMenu(), AddDrink()

Last modified: Fri Mar 03 13:23:00 2000 by Paracelsus

