legend/
legend/area/
legend/player/
#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;
}