From: "Artur 'Revinor' Biesiadowski" <abies@pg.gda.pl>

/* You have to put definition of this fun in merc.h
   and put its somewhere in interp.h                 */
/* In act there is some $? - I don't remember what to put there - figure it
by yourself  */


void do_drag( CHAR_DATA * ch, char * argument )
{

   char buf[MAX_INPUT_LENGTH];
   OBJ_DATA  *obj;
   ROOM_INDEX_DATA *rvnum;
   CHAR_DATA *vch;
   int door;

   argument = one_argument (argument, buf);


   obj = get_obj_list( ch, buf, ch->in_room->contents );
   
   if ( !obj )
   {
	  send_to_char ( "I do not see anything like that here.\n\r", ch);
	  return;
   }

/* ITEM_DRAGGABLE is flag which I added for items which I want to be dragged
   but not to be taken ( for example wagon in mine ).
   If you dislike this idea comment it out */

   if ( (!IS_SET( obj->wear_flags, ITEM_TAKE ) && 
        (!IS_SET( obj->wear_flags, ITEM_DRAGGABLE ) ) ) )
   {
 	  act( "You try to drag $p, but without succes.\n\r", ch,obj, NULL, TO_CHAR);
 	  act( "$n tries to move $p, but it doesn't budge.\n\r",ch,obj, NULL, TO_ROOM);
	  return;
   }

   if ( obj->weight >  (2 * can_carry_w (ch)) )
   {
      act( "You try, but $p is too heavy.\n\r", ch, obj, NULL, TO_CHAR);
      act( "$n tries to move $p, but $? fail.\n\r", ch, obj, NULL, TO_CHAR);
	  return;
   }

   if ( argument[0] == '\0' )
   {
      send_to_char ( "Where do you want to drag it ?\n\r", ch);
	  return;
   }

   rvnum = ch->in_room;

   door = find_exit( ch,argument);
   if (door == -1) 
   {
      send_to_char("You don't see exit in that direction.\n\r", ch);
	  return;
   }

   move_char( ch, door);
   
   if (ch->in_room == rvnum )
      return;                      /* For some reason player didn't move */

   obj_from_room (obj);
   obj_to_room (obj, ch->in_room);

   act ( "You dragged $p with you.\n\r", ch, obj, NULL, TO_CHAR );
   act ( "$n dragged $p with $?.\n\r", ch, obj, NULL, TO_ROOM );

   if ( !(vch = rvnum->people) )
      return;

   act ( "$N dragged $p out.\n\r", vch, obj, ch, TO_CHAR );
   act ( "$N dragged $p out.\n\r", vch, obj, ch, TO_ROOM );

   return;
}