/*tables.c: const struct flag_type extra_flags[] =*/ { "keep", ITEM_KEEP, TRUE }, /*merc.h in the item defines, ie ITEM_BLESS, ITEM_NODROP*/ #define ITEM_KEEP (X) /*handler.c: char *extra_bit_name( long long vector )*/ if ( vector & ITEM_KEEP ) xcatf( buf, " keep" ); /*act_obj.c: void do_drop( CHAR_DATA *ch, char *argument )*/ /*Right BEFORE the first obj_from_char( obj );*/ if ( IS_SET(obj->extra_flags, ITEM_KEEP) ) REMOVE_BIT( obj->extra_flags, ITEM_KEEP); /*also, right before the SECOND obj_from_char( obj );*/ && !IS_SET(obj->extra_flags, ITEM_KEEP)//This line! && can_drop_obj( ch, obj )) { found = TRUE; obj_from_char( obj ); /*act_obj.c: void do_steal( CHAR_DATA *ch, char *argument )*/ /*At the end of the steal function, where it says BAM!*/ /*Add this under BOTH check improves*/ if (IS_SET(obj->extra_flags,ITEM_KEEP)) REMOVE_BIT(obj->extra_flags,ITEM_KEEP); /*interp.h*/ DECLARE_DO_FUN( do_keep ); /*interp.c*/ { "keep", do_keep, POS_SLEEPING, 0, LOG_NORMAL, 1 }, /*act_obj.c: the keep function*/ /*keep function by Ghreth, 07/15/07*/ void do_keep( CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; OBJ_DATA *obj_next; char buf[MSL]; bool keep; keep = FALSE; for ( obj = ch->carrying; obj != NULL; obj = obj_next ) { obj_next = obj->next_content; /*If you have any kept items already*/ if (IS_OBJ_STAT(obj,ITEM_KEEP)) { keep =TRUE; } /*Checking, are you keeping anything? Do you want to?*/ if (argument[0] == '\0' && !keep) { send_to_char( "You aren't keeping anything.\n\r",ch); return; } /*List of kept items*/ if(argument[0] == '\0' && keep) { send_to_char( "You are keeping:\n\r",ch); xprintf(buf, "%s\n\r", obj->short_descr); send_to_char(buf,ch); return; } /*Do you have the item you want to keep?*/ if (obj == NULL) { send_to_char("You do not have that?\n\r",ch); return; } /*Sets the flag on the item or removes it*/ if (!IS_SET(obj->extra_flags,ITEM_KEEP)) { SET_BIT(obj->extra_flags,ITEM_KEEP); xprintf(buf, "You decide to keep %s during 'drop all'.\n\r", obj->short_descr); } else { REMOVE_BIT(obj->extra_flags,ITEM_KEEP); xprintf(buf, "You decide NOT to keep %s during 'drop all'.\n\r", obj->short_descr); } } send_to_char(buf,ch); return; }