sell_obj()
==========

sell_obj()

Funktion:
    static string sell_obj(object ob, int short)

Definiert in:
    /std/room/shop

Argumente:
    ob:
      Das anzukaufende Objekt
    short:
      Gibt an, ob der Verkaeufer nur ein Objekt (0) oder mehrere (1) 
      verkauft. (Verkaufe alles etc.)

Beschreibung:
    Ermittelt ob der Laden bereit ist, <ob> anzukaufen.

Rueckgabewert:
    Meldung die ausgegeben wird, wenn ein Objekt abgelehnt wird oder 0.

Bemerkung:
    Man sollte im normalfall _niemals_ einfach 0 zurueckgeben, sondern das 
    geerbte sell_obj() aus /std/room/shop, damit beispielsweise P_NOBUY 
    beachtet wird.

Beispiel:
    Ein Schmied, der nur Waffen ankauft:

    

    protected void create()
    {
      ...
    }

    

    static string sell_obj(object ob, int short)
    {
      if(!ob->QueryProp(P_WEAPON_TYPE))
      {
        return "Ich bin nur an Waffen interessiert.";
      }
      return ::sell_obj(ob,short);
    }

Siehe auch:
    Funktionen:
      AddFixedObject(), RemoveFixedObject(), SetStorageRoom(), 
      QueryStorageRoom(), QueryBuyValue(), QueryBuyFact(), buy_obj()
    Properties:
      P_KEEPER, P_MIN_STOCK, P_STORE_CONSUME


Letzte Aenderung: 21.05.2014, Bugfix

