/* * 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 */