/*****************************************************************************
* 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 == NULL || 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 );
}
void rename_locker( CHAR_DATA *ch, char *newname )
{
OBJ_DATA *locker;
FILE *fp;
char name[MSL], uname[MSL], buf[MSL];
snprintf( name, sizeof( name ), "%s", capitalize( ch->name ) );
snprintf( uname, sizeof( uname ), "%s", capitalize( newname ) );
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 );
}
for( locker = ch->in_room->first_content; locker; locker = locker->next_content )
if( locker->name == ch->name )
break;
if( locker )
{
if( locker->first_content )
{
snprintf( buf, sizeof( buf ), locker->pIndexData->name, uname );
STRSET( locker->name, buf );
snprintf( buf, sizeof( buf ), locker->pIndexData->short_descr, uname );
STRSET( locker->short_descr, buf );
snprintf( buf, sizeof( buf ), locker->pIndexData->description, uname );
STRSET( locker->description, buf );
fwrite_locker( ch, locker );
}
else
{
snprintf( buf, sizeof( buf ), "%s%s", LOCKER_DIR, name );
remove_file( buf );
}
extract_obj( locker );
}
}