/***************************************************************************** Name: save_mobiles Purpose: Save #MOBILES secion of an area file. Called by: save_area(olc_save.c). Notes: Changed for ROM OLC. ****************************************************************************/ void save_mobiles( FILE *fp, AREA_DATA *pArea ) { int i; MOB_INDEX_DATA *pMob; fprintf( fp, "#MOBILES\n" ); for( i = pArea->min_vnum; i <= pArea->max_vnum; i++ ) { if ( (pMob = get_mob_index( i )) ) save_mobile( fp, pMob ); } fprintf( fp, "#0\n\n\n\n" ); return; }
void save_world( CHAR_DATA * ch ) { FILE *mobfp; FILE *objfp; FILE *shipfp; int mobfile = 0; int shipfile = 0; char filename[256]; CHAR_DATA *rch; ROOM_INDEX_DATA *pRoomIndex; int iHash; log_string( "Preserving world state...." ); snprintf( filename, 256, "%s%s", SYSTEM_DIR, MOB_FILE ); if( ( mobfp = fopen( filename, "w" ) ) == NULL ) { bug( "%s", "save_world: fopen mob file" ); perror( filename ); } else mobfile++; snprintf( filename, 256, "%s%s", SYSTEM_DIR, SHIP_FILE ); if( ( shipfp = fopen( filename, "w" ) ) == NULL ) { bug( "%s", "save_world: fopen ship file" ); perror( filename ); } else shipfile++; for( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for( pRoomIndex = room_index_hash[iHash]; pRoomIndex; pRoomIndex = pRoomIndex->next ) { if( pRoomIndex ) { if( !pRoomIndex->first_content /* Skip room if nothing in it */ || IS_SET( pRoomIndex->room_flags, ROOM_CLANSTOREROOM ) /* These rooms save on their own */ ) continue; snprintf( filename, 256, "%s%d", HOTBOOT_DIR, pRoomIndex->vnum ); if( ( objfp = fopen( filename, "w" ) ) == NULL ) { bug( "save_world: fopen %d", pRoomIndex->vnum ); perror( filename ); continue; } fwrite_obj( NULL, pRoomIndex->last_content, objfp, 0, OS_CARRY, TRUE ); fprintf( objfp, "%s", "#END\n" ); FCLOSE( objfp ); } } } if( mobfile ) { for( rch = first_char; rch; rch = rch->next ) { if( !IS_NPC( rch ) || rch == supermob || IS_SET( rch->act, ACT_PROTOTYPE ) || IS_SET( rch->act, ACT_PET ) ) continue; else save_mobile( mobfp, rch ); } fprintf( mobfp, "%s", "#END\n" ); FCLOSE( mobfp ); } if( shipfile ) { SHIP_DATA *ship = NULL; for( ship = first_ship; ship; ship = ship->next ) { write_ship( shipfp, ship ); } fprintf( shipfp, "%s", "#END\n" ); FCLOSE( shipfp ); } return; }