/*
* Copyright (C) 1995-1997 Christopher D. Granz
*
* This header may not be removed.
*
* Refer to the file "License" included in this package for further
* information and before using any of the following.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "sapphire.h"
/*
* Functions
*/
void fwrite_npc_reset_list( FILE *pFile, NPC_RESET_DATA *pNPCReset )
{
bool b = FALSE;
for ( ; pNPCReset != NULL; pNPCReset = pNPCReset->pNext )
{
if ( b == TRUE )
putc( ',', pFile );
fprintf( pFile, "%ld[", pNPCReset->u1.pNPCIndex->iNumber );
fwrite_obj_reset_list( pFile, pNPCReset->pInvenResets );
fprintf( pFile, "][" );
fwrite_obj_reset_list( pFile, pNPCReset->pEqResets );
fprintf( pFile, "]%d", pNPCReset->iResetTime );
b = TRUE;
}
}
void fwrite_obj_reset_list( FILE *pFile, OBJ_RESET_DATA *pObjReset )
{
bool b = FALSE;
for ( ; pObjReset != NULL; pObjReset = pObjReset->pNext )
{
if ( b == TRUE )
putc( ',', pFile );
fprintf( pFile, "%ld[", pObjReset->u1.pObjIndex->iNumber );
fwrite_obj_reset_list( pFile, pObjReset->pContentResets );
fprintf( pFile, "]%d", pObjReset->iResetTime );
b = TRUE;
}
}
bool save_room( ROOM_INDEX_DATA *pRoom, char *pFilename )
{
FILE *pFile;
int i;
if ( ( pFile = open_file( pFilename, "w", FALSE ) ) == NULL )
return ( FALSE );
fprintf( pFile, "#%ld\n", pRoom->iNumber );
fprintf( pFile,
"*************************************************************\n"
"**** This file was generated by the Sapphire OLC system. ****\n"
"*************************************************************\n" );
if ( pRoom->sImageFilename[0] != '\0' )
{
fprintf( pFile, "image " );
fput_string( pFile, "%s", pRoom->sImageFilename );
fprintf( pFile, ";\n" );
}
if ( str_compare( pRoom->sTitle, "(no title)" ) != TRUE )
{
fprintf( pFile, "title " );
fput_string( pFile, "%s", pRoom->sTitle );
fprintf( pFile, ";\n" );
}
if ( str_compare( pRoom->sDesc, "(no description)" ) != TRUE )
{
fprintf( pFile, "desc\n " );
fput_string( pFile, "%s", pRoom->sDesc );
fprintf( pFile, "\n [ ];\n" );
}
for ( i = 0; i < 10; i++ )
{
if ( pRoom->sDirDescs[i][0] != '\0' )
{
fprintf( pFile, "%s_desc\n ",
uncapit( snDirTable[i].pName ) );
fput_string( pFile, "%s", pRoom->sDirDescs[i] );
fprintf( pFile, "\n [ ];\n" );
}
}
if ( pRoom->iSectorType != snSectorTable[0].iNumber )
fprintf( pFile, "sector %s;\n",
get_sector_string( pRoom->iSectorType ) );
if ( pRoom->fRoomFlags != 0 )
fprintf( pFile, "room_flags [%s];\n",
uncapit( room_flags_string( pRoom->fRoomFlags ) ) );
if ( pRoom->iTemperature != 60 )
fprintf( pFile, "temperature %d;\n", pRoom->iTemperature );
for ( i = 0; i < 10; i++ )
{
if ( pRoom->eExits[i].uRoom.pRoom != NULL )
{
fprintf( pFile, "%-9.9s %ld ",
uncapit( snDirTable[i].pName ),
pRoom->eExits[i].uRoom.pRoom->iNumber );
if ( pRoom->eExits[i].iExitType == NUMBER_EXIT_STANDARD )
fprintf( pFile, "standard;\n" );
else if ( pRoom->eExits[i].iExitType == NUMBER_EXIT_DOOR )
{
fprintf( pFile, "door " );
fput_string( pFile, "%s", pRoom->eExits[i].pDoorNames[0] );
fprintf( pFile, " [%s",
door_flags_string( pRoom->eExits[i].fOrigFlags ) );
if ( pRoom->eExits[i].iLevel > 0 )
fprintf( pFile, " level %d", pRoom->eExits[i].iLevel );
if ( pRoom->eExits[i].uKey.pObjKey != NULL )
fprintf( pFile, " key %ld",
pRoom->eExits[i].uKey.pObjKey->iNumber );
fprintf( pFile, "] %ld;\n", pRoom->eExits[i].iResetTime );
}
}
}
if ( pRoom->pNPCResets != NULL )
{
fprintf( pFile, "npcs [" );
fwrite_npc_reset_list( pFile, pRoom->pNPCResets );
fprintf( pFile, "];\n" );
}
if ( pRoom->pObjResets != NULL )
{
fprintf( pFile, "objects [" );
fwrite_obj_reset_list( pFile, pRoom->pObjResets );
fprintf( pFile, "];\n" );
}
fprintf( pFile, "end;\n" );
close_file( pFile );
return ( TRUE );
}
/*
* End of olc_save.c
*/