
FreeHands()
***********


FUNKTION
========

   public varargs int FreeHands(object ob)


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

   /std/living/combat.c


ARGUMENTE
=========

   ob - das Objekt, dessen Handnutzung vorbei ist
      - kann 0 sein, dann wird PO benutzt


RUECKGABEWERT
=============

   0, wenn kein Objekt uebergeben wurde oder kein PO existiert
   1, sonst


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

   Befreit die Haende eines Livings von ein bestimmten Objekt.
   Es werden _alle_ Haende wieder freigegeben.


BEISPIELE
=========

   > halte seil fest
   ...
   this_player()->UseHands(this_object(),2);
   ...

   > lasse seil los
   ...
   this_player()->FreeHands(this_object());
   ...


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

   P_HANDS, P_HANDS_USED_BY
   P_MAX_HANDS, P_USED_HANDS, P_FREE_HANDS
   UseHands

1.Feb.2004 Gloinson
