
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
