
WearFunc()
**********


FUNKTION
========

   int WearFunc(object ruest, int silent, object user);


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

   eigenen Objekten (fuer /std/clothing/wear)


ARGUMENTE
=========

   ruest (object)
        Die Ruestung/Kleidung, die angezogen werden soll.
   silent (int)
        Ob dabei eine Meldung ausgegeben wird.
   user (object)
        Das Lebewesen, welches die Ruestung/Kleidung anziehen will.


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

   Mit dieser Funktion kann man pruefen, ob sich das Kleidungsstueck bzw.
   Ruestung <ruest> von this_player() anziehen laesst oder nicht.
   Kann die Ruestung angezogen werden, so muss ein Wert ungleich 0
   zurueckgegeben werden.


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

   0, wenn sich die Ruestung nicht anziehen laesst, ansonsten ungleich 0.


BEMERKUNGEN
===========

   Bitte nicht darauf verlassen, dass der Spieler das Objekt auch wirklich
   anzieht, wenn man hier 1 zurueckgibt.
   Speziell bei Schilden kann das Anziehen trotz eines Rueckgabewertes
   != 0 immer noch schief gehen, wenn der Spieler keine Hand mehr frei hat.
   Wenn ihr sicher sein wollt, dass der Spieler ein Objekt angezogen hat,
   benutzt bitte InformWear().
   Bitte nicht drauf verlassen, dass this_player() das ausziehende Lebewesen
   ist.
   Die Reihenfolge der Argumente ist etwas unschoen, aber leider wurde <user>
   erheblich spaeter hinzugefuegt und es war unmoeglich, einige hundert
   Objekte zu aendern.


BEISPIELE
=========

   Ein Helm, der nur von Elfen getragen werden kann:

   inherit "std/armour.c";

   #include <properties.h>

   create()
   {
     ::create();

     SetProp(P_ARMOUR_TYPE, AT_HELMET);
     /* zig weitere SetProp's, um den Helm zu konfigurieren */

     /* WearFunc() ist im Helm selbst zu finden */
     SetProp(P_WEAR_FUNC, this_object());
   }

   int WearFunc(object me, int silent, object user)
   {
     if (user->QueryProp(P_RACE) == "Elf")
       return 1;   /* Elfen duerfen den Helm tragen */

     /* Die anderen Rassen sollten zumindest erfahren koennen, wieso
        sie den Helm nicht tragen koennen... */
     if (!silent)
         write( "Der Helm rutscht Dir immer ueber Deine runden "
               +"Ohren.\n" );
     return 0;
   }

   Gibt jetzt ein Nicht-Elf "trage helm" ein, so bekommt er die Meldung
   "Der Helm rutscht Dir immer ueber Deine runden Ohren.", Elfen dagegen
   passt das Teil wie angegossen.


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

   P_WEAR_MSG, P_UNWEAR_MSG, P_WIELD_MSG, P_UNWIELD_MSG
   DoWear(), DoUnwear(), InformUnwear(), InformWear()
   /std/clothing/wear.c

02.02.2009, Zesstra
