From the NannyMUD documentation
2001-01-06
NAME
can_put_and_get - determine if an object is a containerLOCATION
/std/box.c, /std/simple_container.cSYNTAX
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_functionsSEE ALSO
long in lfun/basic/long