/*
* All you really need to do is to add this to mud.h
* And change around the vnums to match the locker room vnum, and
* object vnum of the locker itself. It should be setup as a container.
* Make SURE that neither locker or the locker room has the prototype
* flag on it. Make a directory called lockers in your /dist directory.
*
* #define ROOM_LOCKER 229
* #define OBJ_VNUM_LOCKER 39
* #define OS_LOCKER 2
*
* and add to save.c
* in the fread_obj() function
* under ...
* if ( room->vnum == ROOM_VNUM_HALLOFFALLEN
* && obj->first_content )
* obj->timer = -1;
* obj = obj_to_room( obj, room );
* }
* <<<<<< add ... >>>>>>>
* else if ( os_type == OS_LOCKER )
* {
* room->vnum = ROOM_LOCKER;
* if (obj->name == ch->name)
* obj = obj_to_room( obj, room );
* else
* {
* OBJ_DATA *locker;
* for( locker = ch->in_room->first_content; locker ; locker = locker->next_content )
* {
* if( locker->name == ch->name )
* break;
* }
* if (!locker)
* {
* bug("Unknown locker");
* return;
* }
*
* obj = obj_to_obj( obj, locker );
* }
* }
*
*
* in the fread_obj()
* change if ( obj->prev_content && (os_type != OS_CORPSE ) )
* to if ( obj->prev_content && (os_type != OS_CORPSE && os_type != OS_LOCKER ) )
*
* in the fwrite_obj() function
* change if (( os_type == OS_CORPSE ) && obj->in_room )
* to if (( os_type == OS_CORPSE || os_type == OS_LOCKER ) && obj->in_room )
*/
#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "mud.h"
#define LOCKER_DIR "../lockers/"
void fwrite_locker( CHAR_DATA *ch, OBJ_DATA *locker )
{
/* Variables */
FILE *fp = NULL;
char strsave[MAX_INPUT_LENGTH];
if( !locker )
{
bug( "Fwrite_locker: NULL object.", 0 );
bug( ch->name, 0 );
return;
}
sprintf( strsave, "%s%s", LOCKER_DIR, capitalize( ch->name ) );
if ( ( fp = fopen( strsave, "w" ) ) != NULL )
{
fwrite_obj( ch, locker, fp, 0, OS_LOCKER );
fprintf( fp, "#END \n\r" );
fclose( fp );
}
return;
}
void do_locker( CHAR_DATA *ch, char *argument )
{
/* Variables */
FILE *fp = NULL;
char strsave[MAX_INPUT_LENGTH];
char buf [MAX_INPUT_LENGTH];
char arg[MAX_INPUT_LENGTH];
OBJ_DATA *locker;
if ( IS_NPC(ch) )
return;
argument = one_argument(argument, arg);
if ( arg[0] == '\0' )
{
send_to_char( "Syntax: locker <open | close>\r\n", ch );
}
if( ! str_cmp( arg, "open" ) )
{
if (ch->in_room->vnum != ROOM_LOCKER)
{
send_to_char( "Does this smell like a locker room to you?\r\n", ch );
return;
}
for( locker = ch->in_room->first_content; locker ; locker = locker->next_content)
{
if( locker->name == ch->name )
break;
}
if (locker)
{
send_to_char("Your locker is already open.\n\r",ch);
return;
}
sprintf( strsave, "%s%s", LOCKER_DIR, capitalize( ch->name ) );
if ( ( fp = fopen( strsave, "r" ) ) != NULL )
{
if (ch->gold < 10000)
{
send_to_char("You do not have enough gold.\n\r",ch);
fclose( fp );
return;
}
ch->gold -= 10000;
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, fp, OS_LOCKER );
}
}
}
fclose( fp );
}
else
{
if (ch->gold < 100000)
{
send_to_char("You do not have enough gold to create a locker.\n\r",ch);
return;
}
ch->gold -= 100000;
locker = create_object(get_obj_index(OBJ_VNUM_LOCKER),0);
sprintf(buf, locker->name, ch->name);
STRFREE( locker->name);
locker->name = STRALLOC(buf);
sprintf(buf, locker->short_descr, ch->name);
STRFREE( locker->short_descr);
locker->short_descr = STRALLOC(buf);
sprintf(buf, locker->description, ch->name);
STRFREE( locker->description);
locker->description = STRALLOC(buf);
obj_to_room( locker, ch->in_room );
}
act(AT_TELL, "$n opens $s locker.",ch, NULL, NULL, TO_ROOM);
act(AT_TELL, "You open your locker.",ch, NULL, NULL, TO_CHAR);
}
else if( ! str_cmp( arg, "close" ) )
{
if(ch->in_room->vnum != ROOM_LOCKER )
{
send_to_char( "You are not currently in the locker room.\r\n", ch );
return;
}
for( locker = ch->in_room->first_content; locker ; locker = locker->next_content )
{
if( locker->name == ch->name )
break;
}
if (!locker)
{
send_to_char("Your locker is not open.\n\r",ch);
return;
}
else
{
act(AT_TELL, "$n closes $s locker.",ch, NULL, NULL, TO_ROOM);
act(AT_TELL, "You close your locker.", ch, NULL, NULL, TO_CHAR);
fwrite_locker( ch, locker );
extract_obj(locker);
}
}
return;
}