#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include "merc.h" //local fuctions void call_all args( ( CHAR_DATA *ch ) ); void do_backup( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int backup_number; if ( IS_NPC(ch) ) return; argument = one_argument(argument, arg); if ( ch->mkill < 100 ) { if( !IS_IMMORTAL(ch) ) { send_to_char( "You must kill at least 100 mobs before you can backup.\n\r",ch); return; } else { ch->mkill = 100; } } if( !arg || !arg[0] ) { backup_number = (ch->pcdata->curr_backup++ < 10 ? ch->pcdata->curr_backup : 1); } else if( (backup_number = atoi(arg)) == 0 ) { backup_number = (ch->pcdata->curr_backup++ < 10 ? ch->pcdata->curr_backup : 1); } ch->pcdata->curr_backup = backup_number; get_totalscore(ch); save_char_obj_backup( ch, backup_number ); send_to_char( "Your playerfile has been backed up.\n\r", ch ); return; } void do_silentbackup( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int backup_number; if ( IS_NPC(ch) ) return; argument = one_argument(argument, arg); if ( ch->mkill < 100 ) { if( !IS_IMMORTAL(ch) ) return; else ch->mkill = 100; } if( !arg || !arg[0] ) { backup_number = (ch->pcdata->curr_backup++ < 10 ? ch->pcdata->curr_backup : 1); } else if( (backup_number = atoi(arg)) == 0 ) { backup_number = (ch->pcdata->curr_backup++ < 10 ? ch->pcdata->curr_backup : 1); } ch->pcdata->curr_backup = backup_number; get_totalscore(ch); save_char_obj_backup( ch, backup_number ); return; } void do_reloadp( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char crash[MAX_STRING_LENGTH]; int backup_number; CHAR_DATA *victim = NULL, *mount = NULL; OBJ_DATA *obj, *obj_next; if( IS_NPC(ch) || !IS_IMPLEMENTOR(ch) ) { send_to_char("Huh?\r\n", ch); return; } argument = one_argument(argument, arg); argument = one_argument(argument, arg2); if ( !arg || !arg[0] ) { send_to_char("Reload whose backup?\r\n", ch); return; } if( (victim = get_char_world(ch, arg)) == NULL ) { send_to_char("They are not here.\r\n", ch); return; } if( IS_NPC(victim) ) { send_to_char("Not on NPC's.\r\n", ch); return; } if( !arg2 || !arg2[0] ) { backup_number = (victim->pcdata->curr_backup > 0 ? victim->pcdata->curr_backup : 1); } else if( (backup_number = atoi(arg2)) == 0 ) { backup_number = (victim->pcdata->curr_backup > 0 ? victim->pcdata->curr_backup : 1); } sprintf(crash, "%s.%d", capitalize(victim->name), backup_number); if( !fexist(crash) ) { send_to_char("They have no backup under that number...\r\n", ch); return; } // do_call(victim, "all"); do_save(victim, ""); if ( (mount = victim->mount) != NULL ) do_dismount(victim,""); for ( obj = victim->carrying; obj != NULL; obj = obj_next ) { obj_next = obj->next_content; extract_obj( obj ); } if( victim != ch ) sprintf(buf, "Reloading %s's playerfile backup..\r\n", victim->name); send_to_char(buf, ch); send_to_char("Your playerfile backup is being reloaded..\r\n", victim); if( reload_backup(victim, backup_number) ) { if( victim != ch ) send_to_char("Restore successful.\r\n", ch); send_to_char("Restore successful.\r\n", victim); } else { if( victim != ch ) send_to_char("Restore failed. Perhaps they did not backup?\r\n", ch); send_to_char("Restore failed. Did you backup lately?", victim); } } void do_backlist( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int i, counter = 0, pbackup; CHAR_DATA *victim; if( IS_NPC(ch) ) { send_to_char("Huh?\r\n", ch); return; } argument = one_argument( argument, arg ); if( !arg || !arg[0] ) { send_to_char("View whose backup list?\r\n", ch); return; } if( (victim = get_char_world(ch, arg)) == NULL ) { send_to_char("They are not here.\r\n", ch); return; } if( IS_NPC(victim) ) { send_to_char("Not on NPC's!\r\n", ch); return; } sprintf(buf, "List of backups for %s:\r\n", victim->name); send_to_char( buf, ch ); pbackup = victim->pcdata->curr_backup; if ( pbackup < 1 ) pbackup = 1; for( i = 1; i <= MAX_BACKUPS; ++i ) { sprintf(buf, "%s.%d", capitalize(victim->name), i); if( fexist(buf) ) { ++counter; sprintf(buf, "[%02d] - #r[#gAVAILABLE#r]#b %s#n\r\n", i, (i == pbackup ? "*" : "")); send_to_char( buf, ch ); } } sprintf(buf, "%d backup files found.\r\n", counter); if( !counter ) send_to_char("No backup files found.\r\n", ch); else send_to_char( buf, ch ); return; } bool fexist( char *f_name ) { char buf[MAX_STRING_LENGTH]; FILE *fp; if( !f_name || !f_name[0] ) return FALSE; sprintf(buf, "%s%s", BACKUP_DIR, f_name); if( (fp = fopen(buf, "r")) != NULL ) { fflush(fp); fclose(fp); return TRUE; } else return FALSE; }