AddFixedObject()
================

FUNKTION
--------
::

        varargs void AddFixedObject(string str, int val, mixed ids);

DEFINIERT IN
------------
::

        /std/room/shop.c

ARGUMENTE
---------
::

        str
          Der absolute Filename eines Objekts, das in quasi beliebiger Menge
          vom betreffenden Laden verkauft werden soll.
        val
          Sofern angegeben der angenommene Wert des Objekts. Falls val nicht
          angegeben oder 0 ist, wird der Wert aus dem angegebenen Objekt
          selbst ermittelt.
          Der Verkaufspreis ist 3 * Wert des Objekts.
        ids
          String oder Stringarray mit der ID oder den IDs, ueber die man das
          Objekt im Laden ansprechen kann. Falls nicht angegeben, wird die
          ID-Liste aus der blueprint des Objekts ausgelesen.

BESCHREIBUNG
------------
::

        Mit dieser Funktion kann man einem Laden mitteilen, dass ein Objekt
        in ihm in unbegrenzter Anzahl verkauft werden soll.
        WICHTIG: Das zu verkaufende Objekt sollte dies insofern unterstuetzen, 
        dass die Blueprint die notwendigen Informationen
        (P_SHORT, P_IDS, P_VALUE, P_LONG, P_NAME) beinhaltet. Dies bedeutet im
        einfachsten Fall, dass im create() auf
          if (!clonep()) return;
        verzichtet wird.

RUeCKGABEWERT
-------------
::

        keiner

        

BEISPIELE
---------
::

        AddFixedObject("/obj/fackel", 5000, "fackel");
          Der Laden verkauft Fackeln zum Preis von 3*5000 Goldmuenzen und man
          kann die Fackel (ausser ueber die Inventarnummer) nur mittels der
          id "fackel" kaufen.

          

        AddFixedObject("/obj/fackel");
          Der Laden verkauft Fackeln zum dreifachen Wert dessen, was im Objekt
          /obj/fackel.c angegeben ist (derzeit sind das 5 Muenzen) und laesst
          alle IDs zu, die in /obj/fackel.c angegeben sind. Derzeit ist das
          auch nur "fackel".

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

	RemoveFixedObject(), SetStorageRoom(), /std/store.c

        

----------------------------------------------------------------------------
Letzte Aenderung: Sat Nov  9 12:59:25 2002 durch Bambi

