
buy_obj()
*********


FUNKTION
========

   static string buy_obj(mixed ob, int short);


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

   /std/shop.c


ARGUMENTE
=========

   ob - der Gegenstand bei dem geprueft werden soll, ob der Laden ihn
        an this_player() verkauft. Sollte es sich hierbei um ein
        FixedObject handeln, wird ein String uebergeben, ansonsten ein
        object.
   short - Bisher noch nicht in Benutzung. Aber fuer die Zukunft
        vorgesehn, falls man mehrere Objekte auf einmal kauft.
        Ein auswerten ist keine Pflicht, waere aber praktisch, damit
        der Scroll dabei nicht zu gross wird.


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

   Ein String was der Haendler sagen soll wieso der Gegenstand nicht
   verkauft wird. Der String wird dabei wie folgt umgebrochen:
   break_string(str, 78, Name(WER, 1)+" sagt: ")


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

   Durch ueberschreiben dieser Funktion ist es moeglich bestimmte
   Objekte (wie z.b. Questobjekte) nur an ausgewaehlte Spieler zu
   verkaufen). Aber auch abfragen ob der Laden ueberhaupt mit
   this_player() handelt, sind moeglich.


BEISPIELE
=========

   static string buy_obj(mixed ob, int short)
   {
      if (PL->QueryProp(P_RACE)=="Zwerg")
         return "Ich verkaufe nichts an Zwerge!";
      return ::buy_obj(ob, short);
   }


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

   sell_obj(), AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
   /std/shop.c

Last modified: Thu Mar 4 15:26:13 1999 by Padreic
