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