#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;
}