/***************************************************************************** * DikuMUD (C) 1990, 1991 by: * * Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen, * * and Katja Nyboe. * *---------------------------------------------------------------------------* * MERC 2.1 (C) 1992, 1993 by: * * Michael Chastain, Michael Quan, and Mitchell Tse. * *---------------------------------------------------------------------------* * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider. * * Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, * * gorog, Grishnakh, Nivek, Tricops, and Fireblade. * *---------------------------------------------------------------------------* * SMAUG 1.7 FUSS by: Samson and others of the SMAUG community. * * Their contributions are greatly appreciated. * *---------------------------------------------------------------------------* * LoP (C) 2006, 2007, 2008 by: the LoP team. * *****************************************************************************/ #include <ctype.h> #include <string.h> #include <stdio.h> #include "h/mud.h" void fwrite_locker( CHAR_DATA *ch, OBJ_DATA *locker ) { FILE *fp = NULL; char lockerfile[MIL], *name; if( !ch || is_npc( ch ) ) return; if( !locker ) { bug( "%s: NULL object. for character %s", __FUNCTION__, ch->name); send_to_char( "There was a problem trying to write your locker file!\r\n", ch ); return; } name = capitalize( ch->name ); snprintf( lockerfile, sizeof( lockerfile ), "%s%s", LOCKER_DIR, name ); if( !( fp = fopen( lockerfile, "w" ) ) ) { bug( "%s: Couldn't open %s for write", __FUNCTION__, lockerfile ); send_to_char( "There was some problem in writing your locker file!\r\n", ch ); return; } fwrite_obj( ch, locker, fp, 0, OS_LOCKER, false ); fprintf( fp, "%s", "#END\n" ); fclose( fp ); } CMDF( do_locker ) { FILE *fp = NULL; char buf[MIL], arg[MIL], *name; OBJ_DATA *locker; OBJ_INDEX_DATA *ilocker; if( !ch || is_npc( ch ) ) return; argument = one_argument( argument, arg ); if( !arg || arg[0] == '\0' || ( str_cmp( arg, "put" ) && str_cmp( arg, "get" ) && str_cmp( arg, "list" ) ) ) { send_to_char( "Usage: locker put/get all\r\nUsage: locker put/get <object name>\r\nUsage: locker list\r\n", ch ); return; } if( !xIS_SET( ch->in_room->room_flags, ROOM_LOCKER ) ) { send_to_char( "You need to be in a locker room!\r\n", ch ); return; } name = capitalize( ch->name ); snprintf( buf, sizeof( buf ), "%s%s", LOCKER_DIR, name ); if( ( fp = fopen( buf, "r" ) ) != NULL ) { for( ;; ) { char letter; char *word; letter = fread_letter( fp ); if( letter == '#' ) { word = fread_word( fp ); if( !strcmp( word, "END" ) ) break; if( !strcmp( word, "OBJECT" ) ) fread_obj( ch, NULL, fp, OS_LOCKER ); } } fclose( fp ); } else { if( !( ilocker = get_obj_index( OBJ_VNUM_LOCKER ) ) ) { send_to_char( "There is no locker to use currently.\r\n", ch ); bug( "%s: Can't find the index locker! Vnum %d.", __FUNCTION__, OBJ_VNUM_LOCKER ); return; } if( !( locker = create_object( ilocker, 0 ) ) ) { send_to_char( "There is no locker to use currently.\r\n", ch ); bug( "%s: Failed to create a locker! Vnum %d.", __FUNCTION__, OBJ_VNUM_LOCKER ); return; } snprintf( buf, sizeof( buf ), locker->name, ch->name ); STRSET( locker->name, buf ); snprintf( buf, sizeof( buf ), locker->short_descr, ch->name ); STRSET( locker->short_descr, buf ); snprintf( buf, sizeof( buf ), locker->description, ch->name ); STRSET( locker->description, buf ); obj_to_room( locker, ch->in_room ); } if( !str_cmp( arg, "put" ) ) { snprintf( buf, sizeof( buf ), "put %s %s", argument, ch->name ); interpret( ch, buf ); } else if( !str_cmp( arg, "get" ) ) { snprintf( buf, sizeof( buf ), "get %s %s", argument, ch->name ); interpret( ch, buf ); } else if( !str_cmp( arg, "list" ) ) { snprintf( buf, sizeof( buf ), "look in %s", ch->name ); interpret( ch, buf ); } for( locker = ch->in_room->first_content; locker; locker = locker->next_content ) if( locker->name == ch->name ) break; if( locker ) { if( locker->first_content ) fwrite_locker( ch, locker ); else { snprintf( buf, sizeof( buf ), "%s%s", LOCKER_DIR, name ); remove_file( buf ); } extract_obj( locker ); } else send_to_char( "There was some problem in writing your locker file!\r\n", ch ); }