SetStorageRoom()
****************


FUNKTION
========

   void SetStorageRoom(string store);


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

   /std/room/shop.c


ARGUMENTE
=========

   store
     Dateiname des Lagers, in dem die aufgekauften Objekte aufbewahrt
     werden.


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

   keiner


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

   Mit dieser Funktion wird dem Laden bekannt gegeben, welches Objekt
   als Lager fuer angekaufte Objekte dienen soll. Jeder Laden muss
   explizit einen eigenen Lagerraum setzen, ansonsten wird ein
   Laufzeitfehler ausgeloest und der Laden ist nicht ladbar.



   Das Speicherobjekt sollte /std/store.c erben, da dort einige
   Aufraeumfunktionen definiert sind. Entscheidend fuer selbige sind
   die Properties P_MIN_STOCK und P_STORE_CONSUME.


BEISPIELE
=========

   Der Raum 'myladen.c' koennte etwa so aussehen:



     // myladen.c
     inherit "/std/shop";
     #include <properties.h>



     protected void create() {
       ::create();
       SetProp(...); // Beschreibung wie bei normalen Raeumen
       SetStorageRoom("/d/beispiel/mystore");
       AddFixedObject("/items/fackel");
     }

   In diesem Laden wird nun die Standardfackel als mengenmaessig
   unbegrenzter Artikel verkauft.

   Der zugehoerige Lagerraum 'mystore.c' kann dann im einfachsten Fall
   so aussehen:



     // mystore.c
     inherit "/std/store";
     #include <rooms.h>  // Fuer AddItem-Konstanten



     protected void create() {
       ::create();
       // KEINE weiteren Beschreibungen!
       // 1. erbt der Speicher keine Beschreibungsmodule,
       // 2. sollen da eh nur Sachen und keine Spieler rein!
       AddItem("/items/schaufel", REFRESH_REMOVE);
     }



   Der Laden verkauft nun auch Schaufeln, jedoch nur eine pro Reset.

HINWEISE:
   Fuer standardmaessig verkaufte Waren beachte man den Unterschied
   zwischen den Funktionen AddItem() und AddFixedObject(). Die
   erstgenannte Funktion ist im Lager zu verwenden, letztere jedoch im
   Laden.


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

   Allgemeines:  laden
   Funktionen:   AddItem(L), AddFixedObject(L), RemoveFixedObject(L)
   Basisobjekte: /std/store.c
   Properties:   P_MIN_STOCK, P_STORE_CONSUME

Last modified: 19-Jun-2015, Arathorn
