#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include "define.h" #include "struct.h" void put_in ( char_data*, thing_array*, obj_data* ); void put_obj_on ( char_data*, char_data*, obj_data* ); void put_obj_on ( char_data*, obj_data*, obj_data* ); void wear_obj ( char_data*, obj_data*, char_data* ); /* * DO_PUT ROUTINE */ void do_put( char_data* ch, char* argument ) { char arg [ MAX_STRING_LENGTH ]; thing_array* array; obj_data* container; /* if( contains_word( argument, "on", arg ) ) { if( ( victim = get_char_room( ch, argument, TRUE ) ) != NULL ) { if( ( obj = get_obj_inv( ch, arg ) ) == NULL ) { send( ch, "You aren't holding anything like that.\n\r" ); } else { put_obj_on( ch, victim, obj ); } } return; } */ if( !two_argument( argument, "in", arg ) ) { send( ch, "Syntax: put <obj> [in] <container>.\n\r" ); return; } if( ( container = one_object( ch, argument, "put in", &ch->wearing, &ch->contents, ch->array ) ) == NULL ) return; if( ( array = several_things( ch, arg, "put", &ch->contents ) ) == NULL ) return; /* PIPES */ /* if( container->pIndexData->item_type == ITEM_PIPE ) { if( obj->selected != 1 || obj->next_list != NULL ) { send( ch, "You can only put one item in a pipe at a time.\n\r" ); } else if( container->contents != NULL ) { send( ch, "%s already contains %s.\n\r", container, container->contents ); } else if( obj->pIndexData->item_type != ITEM_TOBACCO ) { send( ch, "%s is not something you wish to smoke.\n\r", obj ); } else { obj = remove( obj, obj->selected ); put_obj( obj, container ); send( ch, "You put %s into %s.\n\r", obj, container ); send_seen( ch, "%s puts %s into %s.\n\r", ch, obj, container ); } return; } */ /* BAGS & KEYRINGS */ if( container->pIndexData->item_type != ITEM_CONTAINER && container->pIndexData->item_type != ITEM_KEYRING ) { fsend( ch, "You can only put items in containers and keyrings and %s is neither.", container ); return; } if( is_set( &container->value[1], CONT_CLOSED) ) { send( ch, "%s is closed.\n\r", container ); return; } put_in( ch, array, container ); } /* * BAGS */ thing_data* wont_fit( thing_data* thing, char_data*, thing_data* container ) { int n = thing->Weight( thing->number ); int m = container->Capacity( ); if( m >= n || n <= 0 ) return thing; if( ( m = thing->selected*m/n ) <= 0 ) return NULL; content_array* where = thing->array; thing = thing->From( m ); thing->To( where ); return thing; } thing_data* put( thing_data* thing, char_data* ch, thing_data* container ) { thing = thing->From( thing->selected ); if( ch != carried_by( container ) ) set_owner( (obj_data*) thing, NULL, ch ); thing->To( container ); return thing; } void put_in( char_data* ch, thing_array* array, obj_data* container ) { thing_array subset [ 4 ]; thing_func* func [ 4 ] = { same, cursed, wont_fit, put }; sort_objects( ch, *array, container, 4, subset, func ); msg_type = MSG_INVENTORY; page_priv( ch, NULL, empty_string ); page_priv( ch, &subset[0], "can't fold", NULL, "into itself" ); page_priv( ch, &subset[1], "can't let go of" ); page_priv( ch, &subset[2], "doesn't have room for", container ); page_publ( ch, &subset[3], "put", container, "into", container->array == ch->array ? " on the ground" : empty_string ); consolidate( subset[3] ); delete array; } /* * HORSES */ void put_obj_on( char_data* ch, char_data* victim, obj_data* obj ) { /* obj_data* next; if( victim->leader != ch || !is_set( &victim->status, STAT_PET ) ) { send( ch, "%s isn't a pet of yours.\n\r", victim ); return; } for( ; obj != NULL; obj = next ) { next = obj->next_list; wear_obj( victim, obj, ch ); } */ return; } void wear_obj( char_data* victim, obj_data* obj, char_data* ch ) { /* int loc = -1; if( is_set( &victim->species->wear_part, WEAR_HORSE_BACK ) && can_wear( obj, ITEM_WEAR_HORSE_BACK ) ) { if( get_eq_char( victim, WEAR_HORSE_BACK ) != NULL ) { send( ch, "%s already has something on %s back.\n\r", victim, victim->His_Her( ) ); return; } loc = WEAR_HORSE_BACK; send( ch, "You place %s on the back of %s.\n\r", obj, victim ); send_seen( ch, "%s places %s on the back of %s.\n\r", ch, obj, victim ); } else if( is_set( &victim->species->wear_part, WEAR_HORSE_BODY ) && can_wear( obj, ITEM_WEAR_HORSE_BODY ) ) { if( get_eq_char( victim, WEAR_HORSE_BODY ) != NULL ) { send( ch, "%s is already wearing something to protect %s body.\n\r", victim, NULL, NULL, ch ); return; } loc = WEAR_HORSE_BODY; send( ch, "You put %s on %s, protecting %s body.\n\r", obj, victim, victim->His_Her( ) ); send_seen( ch, "%s puts %s on %s, protecting %s body.\n\r", ch, obj, victim, victim->His_Her( ) ); } else if( is_set( &victim->species->wear_part, WEAR_HORSE_FEET ) && can_wear( obj, ITEM_WEAR_HORSE_FEET ) ) { if( get_eq_char( victim, WEAR_HORSE_FEET ) != NULL ) { send( ch, "%s already has something on %s feet.\n\r", victim, victim->His_Her( ) ); return; } loc = WEAR_HORSE_FEET; send( ch, "You place %s on the feet of %s.\n\r", obj, victim ); send_seen( ch, "%s puts %s on the feet of %s.\n\r", ch, obj, victim ); } else { send( ch, "You can't put %s on %s.\n\r", obj, victim ); return; } obj = remove( obj, 1 ); put_obj( obj, victim, FALSE ); equip_char( victim, obj, loc ); */ return; } /* * TABLES */ void put_obj_on( char_data* ch, obj_data* container, list_data* list ) { /* obj_data* obj; int i; if( container->pIndexData->item_type != ITEM_TABLE ) { send( "You can only place items on tables.\n\r", ch ); return; } for( i = 0; i < list->length; i++ ) { obj = (obj_data*) list->pntr[i]; if( obj->array != ch ) continue; if( container->where != ch->in_room && container->where != ch ) break; if( !obj->droppable( ) ) { send( ch, "You can't let go of %s.\n\r", obj ); continue; } act_to( "You place $p on $P.", ch, obj, container, ch ); act_notchar( "$n places $p on $P.", ch, obj, container ); obj = remove( obj, obj->selected ); put_obj( obj, container ); } */ return; }