| Posted by
| Zeno
USA (2,871 posts) Bio
|
| Message
| Already posted my hotboot_recover stuff to Samson a while ago...
void hotboot_recover( void )
{
DESCRIPTOR_DATA *d = NULL;
FILE *fp;
char name[100];
char host[MAX_STRING_LENGTH];
int desc, dcompress, room, dport, idle, maxp = 0;
bool fOld;
fp = fopen( HOTBOOT_FILE, "r" );
if (!fp) /* there are some descriptors open which will hang forever then ? */
{
perror( "hotboot_recover: fopen" );
bug( "%s", "Hotboot file not found. Exitting." );
exit( 1 );
}
unlink( HOTBOOT_FILE ); /* In case something crashes - doesn't prevent reading */
for( ; ; )
{
d = NULL;
fscanf( fp, "%d %d %d %d %d %s %s\n", &desc, &dcompress, &room, &dport, &idle, name, hos$
if (desc == -1 || feof(fp) )
break;
if( !str_cmp( name, "maxp" ) || !str_cmp( host, "maxp" ) )
{
maxp = idle;
continue;
}
/* Write something, and check if it goes error-free */
#ifdef MCCP
if( !dcompress && !write_to_descriptor_old( desc, "\n\rTime seems to change.\n\r", 0 ) )
#else
if( !write_to_descriptor( desc, "\n\rTime seems to change.\n\r", 0 ) )
#endif
{
close( desc ); /* nope */
continue;
}
CREATE( d, DESCRIPTOR_DATA, 1 );
d->next = NULL;
d->descriptor = desc;
d->connected = CON_GET_NAME;
d->outsize = 2000;
d->idle = 0;
d->lines = 0;
d->scrlen = 24;
d->newstate = 0;
d->prevcolor = 0x08;
CREATE( d->outbuf, char, d->outsize );
d->user = STRALLOC( "Unknown" );
d->host = STRALLOC( host );
d->port = dport;
d->idle = idle;
#ifdef MCCP
d->can_compress = dcompress;
if( d->can_compress )
compressStart( d );
#endif
LINK( d, first_descriptor, last_descriptor, next, prev );
d->connected = CON_COPYOVER_RECOVER; /* negative so close_socket will cut them off */
/* Now, find the pfile */
fOld = load_char_obj( d, name, FALSE, TRUE );
if( !fOld ) /* Player file not found?! */
{
#ifdef MCCP
write_to_descriptor( d, "\n\rSomehow, your character was lost during hotboot. Contac$
#else
write_to_descriptor( d->descriptor, "\n\rSomehow, your character was lost during$
#endif
close_socket( d, FALSE );
}
else /* ok! */
{
#ifdef MCCP
write_to_descriptor( d, "\n\rYour vision blurs back into view, and something seems d$
#else
write_to_descriptor( d->descriptor, "\n\rYour vision blurs back into view, and s$
#endif
d->character->in_room = get_room_index( room );
if( !d->character->in_room )
d->character->in_room = get_room_index( ROOM_VNUM_TEMPLE );
/* Insert in the char_list */
LINK( d->character, first_char, last_char, next, prev );
char_to_room( d->character, d->character->in_room );
act( AT_MAGIC, "A puff of ethereal smoke dissipates around you!", d->character, NU$
act( AT_MAGIC, "$n appears in a puff of ethereal smoke!", d->character, NULL, NULL, $
d->connected = CON_PLAYING;
if ( ++num_descriptors > sysdata.maxplayers )
sysdata.maxplayers = num_descriptors;
#ifdef AUTO_AUTH
check_auth_state( d->character ); /* new auth */
#endif
}
}
FCLOSE( fp );
if( maxp > sysdata.maxplayers )
sysdata.maxplayers = maxp;
log_string( "Hotboot recovery complete." );
return;
}
|
Zeno McDohl,
Owner of Bleached InuYasha Galaxy
http://www.biyg.org | | Top |
|