/
LIB3/
LIB3/D/ADMIN/
LIB3/D/ADMIN/OBJ/
LIB3/D/ADMIN/ROOM/W/
LIB3/D/HOME/
LIB3/D/HOME/CITY/ARENA/
LIB3/D/HOME/CITY/ITEMS/
LIB3/D/HOME/CITY/POSTOFFI/
LIB3/DOC/
LIB3/GLOBAL/SPECIAL/
LIB3/GLOBAL/VIRTUAL/
LIB3/NET/
LIB3/NET/CONFIG/
LIB3/NET/DAEMON/CHARS/
LIB3/NET/GOPHER/
LIB3/NET/INHERIT/
LIB3/NET/OBJ/
LIB3/NET/SAVE/
LIB3/NET/VIRTUAL/
LIB3/OBJ/B_DAY/
LIB3/OBJ/HANDLERS/TERM_TYP/
LIB3/PLAYERS/B/
LIB3/PLAYERS/N/
LIB3/ROOM/
LIB3/SAVE/
LIB3/SAVE/BOARDS/
LIB3/SAVE/ENVIRON/
LIB3/SAVE/POST/
LIB3/STD/COMMANDS/SHADOWS/
LIB3/STD/CREATOR/
LIB3/STD/DOM/
LIB3/STD/EFFECTS/
LIB3/STD/EFFECTS/HEALING/
LIB3/STD/EFFECTS/OTHER/
LIB3/STD/EFFECTS/POISONS/
LIB3/STD/ENVIRON/
LIB3/STD/GUILDS/
LIB3/STD/LIQUIDS/
LIB3/STD/ROOM/
LIB3/STD/TRIGGER/SHADOW/
LIB3/W/
LIB3/W/BANNOR/
LIB3/W/NEWSTYLE/
object  me, foll;
string  me_name;

#define ME "/std/trigger/shadow/follow_player"

void    setup_shadow( object ob )
{
    me_name = ob->query_name();
    me = ob;
    shadow( me, 1 );
    foll = previous_object();
}				/* setup_shadow() */

int     move_player( string dir, string dest, mixed mess, object followee,
		     mixed enter )
{
    int     i;

    i = me->move_player( dir, dest, mess, followee, enter );
    if( environment( me ) && i )
    {
	environment( me )->add_property( me_name + " here", dir );
	ME->remove_frog_property( environment( me ), me_name );
    }
    return i;
}				/* move_player() */

void    zap_shadow( object ob )
{
/* Just in case there is more than one on us... */
    if( interactive( previous_object() ) )
    {
	destruct( this_object() );
	return;
    }
    if( previous_object() == foll )
    {
	destruct( this_object() );
	return;
    }
    me->zap_shadow();
}				/* zap_shadow() */

void    remove_frog_property( object ob, string me_name )
{
    call_out( "bingle_wop", 360, ob, me_name );
}				/* remove_frog_property() */

void    bingle_wop( object ob, string nam )
{
    if( ob )
	ob->remove_property( nam + " here" );
}				/* bingle_wop() */