From: "Artur 'Revinor' Biesiadowski" /* 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; }