QueryBuyValue()
***************

QueryBuyValue()

Funktion
   static varargs int QueryBuyValue(mixed ob, object client)

Definiert in
   /std/room/shop

Argumente
   ob
      Das zu kaufende Objekt (String oder object). Im Normalfall
      handelt es sich um ein Objekt. Ausnahme sind Gegenstaende, die
      mit AddFixedObject() hinzugefuegt wurden.

   client
      Der Kaeufer.

Beschreibung
   Ermittelt den Preis, den <client> fuer <ob> zu bezahlen hat.

Rueckgabewert
   Der Preis als Integer.

Beispiel
   Ein Haendler, der Spielern die ihm geholfen haben einen Rabatt von
   10% gewaehrt

   object >>*<<helpers; protected void create() {

      ::create(); helpers=({}); ...

   }

   static varargs int QueryBuyValue(mixed ob, object client) {

      if(member(helpers,client)!=-1) {

         return ::QueryBuyValue(ob,client)*9/10;

      } return ::QueryBuyValue(ob,client);

   }

Siehe auch:
   Funktionen:
      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(),
      QueryStorageRoom(), QueryBuyFact(), sell_obj(), buy_obj()

   Properties:
      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME

Letzte Aenderung: 21.05.2014, Bugfix
