From the NannyMUD documentation

LAST CHANGE

2001-01-06

FUNCTION


NAME

        can_put_and_get - determine if an object is a container

LOCATION

/std/box.c, /std/simple_container.c

SYNTAX

int can_put_and_get(string str)

DESCRIPTION

	A false value means the object is 'opaque'.  If no string is
	passed, it normally means the player is trying to put something into
	or take something from the object.  A true value means this operation
	is allowed.  A false value forbids it.

	This function defines whether an object is a container or not, within
	the mudlib.  In a sense, all objects can be containers, but a this
	function enables them to act like containers to players, in the sense
	that it allows players to see what objects are contained by another
	object, and whether players are allowed to take objects from as well
	as insert objects into the container object.

RETURN VALUES

	When a player examines an object, the name of the object the player
	is looking at is passed to can_put_and_get().  If a true value
	is given, the inventory of the object is printed for the player.

NOTE

	It is not enough to define this true if you want a player to be
	able to insert things in an object or give them to a monster.
	The local function add_weight() must also return a true value.

	Containers such as bags will return 1 in all cases.  

	Containers like chests will return 1 when the chest is open, 0 when 
	it is closed.  

	Living objects will return 1 when strings are passed to
	them, 0 when nothing is passed to can_put_and_get() (you can thus
	see what a monster is carrying, but you can't take anything away).

	Sometimes an item will have 'parts' attached to it that are different
	from the object itself in a logical sense.  For instance, a chest and
	the lid of the chest.  When the player looks at the lid, you don't
	want to print out the inventory of the chest, so you return 0 when
	anything other than 'chest' is passed to can_put_and_get.

	This function is automatically defined in living.c, so the strange
	behavior of why arguments are passed can be ignored most of the time.

	The id() of the function is checked before can_put_and_get() is
	called.

	The descriptions of the inventory are handled in and printed by
	the player object.

EXAMPLE

	In a chest:
	int can_put_and_get(string str) {
	   if( str == "lid" ) /* This conditional is of course optional */
	      return 0; /* And presumably long() prints out special desc. */
	   return chest_is_open;
	}

SEE ALSO

        add_weight in lfun/basic/add_weight
        add_weight in lfun/living/living_functions

SEE ALSO

        long in lfun/basic/long