#include "ctype.h" #include "stdio.h" #include "stdlib.h" #include "sys/types.h" #include "syslog.h" #include "define.h" #include "struct.h" bool view_file ( char_data*, char* ); void add_log ( const char*, const char*, char_data*, const char* ); /* * SUPPORT FUNCTIONS */ void add_log( const char* function, const char* file, char_data* ch, const char* string ) { char tmp [ MAX_INPUT_LENGTH+20 ]; FILE* fp; if( ( fp = fopen( file, "a" ) ) == NULL ) { bug( "%s: Could not open file.", function ); return; } sprintf( tmp, "[%s] %s", ltime( current_time )+4, string ); tmp[15] = toupper( tmp[15] ); if( strlen( tmp ) > 60 ) { sprintf( tmp+60, "... %s\n\r", ch->real_name( ) ); fprintf( fp, tmp ); } else fprintf( fp, "%-65s%s\n\r", tmp, ch->real_name( ) ); fclose( fp ); return; } bool view_file( char_data* ch, char* file ) { FILE* fp; char tmp [ MAX_INPUT_LENGTH ]; int length; if( ( fp = fopen( file, "r" ) ) == NULL ) return FALSE; for( length = 0; ; ) { tmp[ length ] = getc( fp ); if( tmp[ length++ ] == EOF ) { tmp[ length ] = '\0'; page( ch, tmp ); page( ch, "\n\r" ); break; } if( length == MAX_INPUT_LENGTH-1 ) { tmp[ MAX_INPUT_LENGTH-1 ] = '\0'; page( ch, tmp ); length = 0; } } fclose( fp ); return TRUE; } /* * MOB LOG ROUTINES */ void mob_log( char_data* ch, int i, const char* string ) { char file [ ONE_LINE ]; if( string != empty_string ) { sprintf( file, "%smob.%d", MOB_LOG_DIR, i ); add_log( "Mob_Log", file, ch, string ); } return; } void do_mlog( char_data* ch, char* argument ) { char tmp [ ONE_LINE ]; pfile_data* pfile; char_data* victim = NULL; species_data* species; if( is_number( argument ) ) { if( ( species = get_species( atoi( argument ) ) ) == NULL ) { send( ch, "There is no mob with that vnum.\n\r" ); return; } } else { if( ( pfile = find_pfile_exact( argument ) ) == NULL ) { if( ( victim = one_character( ch, argument, "mlog", (thing_array*) &player_list, (thing_array*) &mob_list ) ) == NULL ) return; if( victim->pcdata != NULL ) pfile = victim->pcdata->pfile; } if( pfile != NULL ) { sprintf( tmp, "%s%s", PLAYER_LOG_DIR, pfile->name ); if( !view_file( ch, tmp ) ) send( ch, "%s has no log.\n\r", pfile->name ); return; } species = victim->species; } sprintf( tmp, "%smob.%d", MOB_LOG_DIR, species->vnum ); if( !view_file( ch, tmp ) ) send( ch, "%s has no log.\n\r", species->Name( ) ); return; } /* * OBJECT LOG FILES */ void obj_log( char_data* ch, int i, const char* string ) { char file [ ONE_LINE ]; if( string != empty_string ) { sprintf( file, "%sobj.%d", OBJ_LOG_DIR, i ); add_log( "Obj_Log", file, ch, string ); } return; } void do_olog( char_data* ch, char* argument ) { char* tmp = static_string( ); wizard_data* wizard = (wizard_data*) ch; obj_clss_data* obj_clss; int i; if( *argument == '\0' ) { if( ( obj_clss = wizard->obj_edit ) == NULL ) { send( ch, "You are not editting an object so must specify a vnum.\n\r" ); return; } i = obj_clss->vnum; } else { if( get_obj_index( i = atoi( argument ) ) == NULL ) { send( ch, "There is no object with that vnum.\n\r" ); return; } } sprintf( tmp, "%sobj.%d", OBJ_LOG_DIR, i ); if( !view_file( ch, tmp ) ) send( ch, "That object has no log.\n\r" ); return; } /* * ROOM LOG FUNCTIONS */ void room_log( char_data* ch, int i, const char* string ) { char file [ ONE_LINE ]; if( string != empty_string ) { sprintf( file, "%sroom.%d", ROOM_LOG_DIR, i ); add_log( "Room_Log", file, ch, string ); } return; } void do_rlog( char_data* ch, char* ) { char tmp [ ONE_LINE ]; sprintf( tmp, "%sroom.%d", ROOM_LOG_DIR, ch->in_room->vnum ); if( !view_file( ch, tmp ) ) send( "There is no log for this room.\n\r", ch ); return; } /* * PLAYER LOG FILES */ void player_log( char_data* ch, const char* string ) { char file [ ONE_LINE ]; FILE* fp; if( ch->pcdata == NULL || string == empty_string ) return; sprintf( file, "%s%s", PLAYER_LOG_DIR, ch->real_name( ) ); if( ( fp = open_file( file, "a" ) ) == NULL ) return; fprintf( fp, "[%s] %s\n\r", ltime( current_time )+4, string ); fclose( fp ); return; } /* * GENERAL LOG FILES */ void immortal_log( char_data* ch, char* cmd, char* arg ) { char file [ ONE_LINE ]; FILE* fp; sprintf( file, "%s%s", IMMORTAL_LOG_DIR, ch->real_name( ) ); if( ( fp = fopen( file, "a" ) ) != NULL ) { fprintf( fp, "[%s] %s %s\n", ltime( current_time )+4, cmd, arg ); fclose( fp ); } return; }