
UseHands()
**********


FUNKTION
========

   public varargs int UseHands(object ob, int num)


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

   /std/living/combat.c


ARGUMENTE
=========

   ob  - das Objekt, das die Haende belegen soll
   num - die Anzahl der zu belegenden Haende


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

   1, fuer Erfolg
   0, sonst


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

   Belegt, wenn moeglich Haende eines Livings durch ein bestimmtes
   Objekt. Wenn die Anzahl der freien Haende (P_MAX_HANDS-P_USED_HANDS)
   kleiner ist als "num", dann schlaegt diese Belegung fehl.


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
   FreeHands

1.Feb.2004 Gloinson
