diff -r -N -u swfotefuss/src//act_comm.c allhopegone/src/act_comm.c --- swfotefuss/src//act_comm.c 2006-02-05 17:36:07.000000000 -0500 +++ allhopegone/src/act_comm.c 2009-06-22 11:55:42.000000000 -0400 @@ -2098,6 +2098,7 @@ OBJ_DATA *obj_next; int x, y; int level; + struct tm *tms; char qbuf[MAX_INPUT_LENGTH]; CHAR_DATA *fch; @@ -2154,6 +2155,14 @@ sportschan( qbuf ); } + if( ch->desc && ch->desc->account && !IS_IMMORTAL( ch ) ) + { + tms = localtime( ¤t_time ); + tms->tm_min += ACCOUNT_TIMER; + ch->desc->account->timer = mktime( tms ); + account_save( ch->desc->account ); + } + for( fch = first_char; fch; fch = fch->next ) { if( IS_NPC( fch ) ) @@ -2182,6 +2191,8 @@ saving_char = NULL; level = get_trust( ch ); + if( ch->desc ) + ch->desc->connected = CON_ACCOUNT_PENDING; /* * After extract_char the ch is no longer valid! */ diff -r -N -u swfotefuss/src//comm.c allhopegone/src/comm.c --- swfotefuss/src//comm.c 2007-03-19 00:02:42.000000000 -0400 +++ allhopegone/src/comm.c 2009-07-17 06:13:52.000000000 -0400 @@ -116,6 +116,10 @@ void set_pager_input( DESCRIPTOR_DATA * d, char *argument ); bool pager_output( DESCRIPTOR_DATA * d ); void mail_count( CHAR_DATA * ch ); +void account_dispose args( ( ACCOUNT_DATA *account ) ); +void account_nanny args( ( DESCRIPTOR_DATA *d, char *argument ) ); +void account_save args( ( ACCOUNT_DATA *account ) ); +bool account_add_character args ( ( ACCOUNT_DATA *account, char *name, bool pending, bool newcharacter ) ); int main( int argc, char **argv ) { @@ -260,7 +264,7 @@ { dnew->next = NULL; dnew->descriptor = desc; - dnew->connected = CON_GET_NAME; + dnew->connected = CON_GET_ACCOUNT; dnew->outsize = 2000; dnew->idle = 0; dnew->lines = 0; @@ -485,8 +489,9 @@ close_socket( d, TRUE ); continue; } - else if( ( !d->character && d->idle > 360 ) /* 2 mins */ - || ( d->connected != CON_PLAYING && d->idle > 1200 ) /* 5 mins */ + else if( ( !d->character && d->connected != CON_ACCOUNT_PENDING && d->idle > 360 ) /* 2 mins */ + || ( d->connected != CON_PLAYING && d->connected != CON_ACCOUNT_PENDING && d->idle > 1200 ) /* 5 mins */ + || ( d->connected == CON_ACCOUNT_PENDING && d->idle > 12000) || d->idle > 28800 ) /* 2 hrs */ { write_to_descriptor( d, "Idle timeout... disconnecting.\r\n", 0 ); @@ -546,6 +551,15 @@ case CON_EDITING: edit_buffer( d->character, cmdline ); break; + case CON_GET_OLD_ACCOUNT_PASSWORD: + case CON_COMFIRM_NEW_ACCOUNT: + case CON_ACCOUNT_ADD_CHARACTER_PASSWORD: + case CON_GET_NEW_ACCOUNT_PASSWORD: + case CON_COMFIRM_ACCOUNT_PASSWORD: + case CON_GET_ACCOUNT: + case CON_ACCOUNT_PENDING: + account_nanny( d, cmdline ); + break; } } } @@ -790,6 +804,11 @@ void free_desc( DESCRIPTOR_DATA * d ) { close( d->descriptor ); + if( d->account ) + { + account_save( d->account ); + account_dispose( d->account ); + } if( d->host ) STRFREE( d->host ); if( d->outbuf ) @@ -1472,6 +1491,13 @@ return; } + if( !str_cmp( argument, "account" ) ) + { + write_to_buffer( d, "Enter account name: ", 0 ); + d->connected = CON_GET_ACCOUNT; + return; + } + argument[0] = UPPER( argument[0] ); if( !check_parse_name( argument ) ) { @@ -2170,6 +2196,10 @@ { */ sprintf( log_buf, "%s@%s new %s.", ch->name, d->host, race_table[ch->race].race_name ); + + account_add_character(d->account, ch->name, FALSE, TRUE); + account_save( d->account ); + log_string_plus( log_buf, LOG_COMM, sysdata.log_level ); to_channel( log_buf, CHANNEL_MONITOR, "Monitor", LEVEL_IMMORTAL ); send_to_desc_color( "\r\n&R&zWelcome to &RFall of the Empire&z. Press enter to continue.&w\r\n\r\n", d ); diff -r -N -u swfotefuss/src//handler.c allhopegone/src/handler.c --- swfotefuss/src//handler.c 2008-01-12 17:25:34.000000000 -0500 +++ allhopegone/src/handler.c 2009-06-22 11:59:56.000000000 -0400 @@ -1697,6 +1697,15 @@ if( ch->desc ) { + if( ch->desc->account ) + { + account_menu( ch->desc ); + send_to_desc_color( "\n&WAccount&z:&W", ch->desc ); + ch->desc->character = NULL; + ch->desc = NULL; + return; + } + if( ch->desc->character != ch ) bug( "%s: char's descriptor points to another char", __FUNCTION__ ); else diff -r -N -u swfotefuss/src//hotboot.c allhopegone/src/hotboot.c --- swfotefuss/src//hotboot.c 2008-01-12 17:28:02.000000000 -0500 +++ allhopegone/src/hotboot.c 2009-06-22 12:37:46.000000000 -0400 @@ -70,6 +70,9 @@ extern ROOM_INDEX_DATA *room_index_hash[MAX_KEY_HASH]; extern int port; /* Port number to be used */ +void account_save args( ( ACCOUNT_DATA *account ) ); +ACCOUNT_DATA *account_fread( char *name ); + /* * Save the world's ship files @@ -427,6 +430,7 @@ void save_world( CHAR_DATA * ch ) { + ACCOUNT_DATA *account; FILE *mobfp; FILE *objfp; FILE *shipfp; @@ -439,6 +443,9 @@ log_string( "Preserving world state...." ); + for( account = first_account; account; account = account->next ) + account_save( account ); + snprintf( filename, 256, "%s%s", SYSTEM_DIR, MOB_FILE ); if( ( mobfp = fopen( filename, "w" ) ) == NULL ) { @@ -1040,8 +1047,8 @@ } else { - fprintf( fp, "%d %d %d %d %d %s %s\n", d->descriptor, - d->can_compress, och->in_room->vnum, d->port, d->idle, och->name, d->host ); + fprintf( fp, "%d %d %d %d %d %s %s %s\n", d->descriptor, + d->can_compress, och->in_room->vnum, d->port, d->idle, och->name, d->account ? d->account->name : "None", d->host ); /* * One of two places this gets changed */ @@ -1108,6 +1115,7 @@ FILE *fp; char name[100]; char host[MAX_STRING_LENGTH]; + char account[MAX_STRING_LENGTH]; int desc, dcompress, room, dport, idle, maxp = 0; bool fOld; @@ -1125,7 +1133,7 @@ { d = NULL; - fscanf( fp, "%d %d %d %d %d %s %s\n", &desc, &dcompress, &room, &dport, &idle, name, host ); + fscanf( fp, "%d %d %d %d %d %s %s %s\n", &desc, &dcompress, &room, &dport, &idle, name, account, host ); if( desc == -1 || feof( fp ) ) break; @@ -1148,7 +1156,7 @@ CREATE( d, DESCRIPTOR_DATA, 1 ); d->next = NULL; d->descriptor = desc; - d->connected = CON_GET_NAME; + d->connected = CON_GET_ACCOUNT; d->outsize = 2000; d->idle = 0; d->lines = 0; @@ -1161,6 +1169,7 @@ if( d->can_compress ) compressStart( d ); d->host = STRALLOC( host ); + d->account = account_fread( account ); d->port = dport; d->idle = idle; LINK( d, first_descriptor, last_descriptor, next, prev ); diff -r -N -u swfotefuss/src//Makefile allhopegone/src/Makefile --- swfotefuss/src//Makefile 2006-12-30 17:39:36.000000000 -0500 +++ allhopegone/src/Makefile 2009-06-21 22:27:24.000000000 -0400 @@ -27,7 +27,7 @@ force.c fskills.c functions.c handler.c hashstr.c hotboot.c hunter.c interp.c \ magic.c makeobjs.c marriage.c mccp.c misc.c mud_comm.c mud_prog.c newarena.c \ pfiles.c planets.c player.c reset.c save.c sha256.c ships.c shops.c skills.c slicers.c \ - space.c special.c swskills.c tables.c track.c tech.c update.c + space.c special.c swskills.c tables.c track.c tech.c update.c account.c ifdef IMC C_FILES := imc.c $(C_FILES) diff -r -N -u swfotefuss/src//mud.h allhopegone/src/mud.h --- swfotefuss/src//mud.h 2008-01-12 17:28:43.000000000 -0500 +++ allhopegone/src/mud.h 2009-07-17 06:14:18.000000000 -0400 @@ -142,6 +142,8 @@ typedef struct member_list MEMBER_LIST; /* List of members in clan */ typedef struct membersort_data MS_DATA; /* List for sorted roster list */ typedef struct specfun_list SPEC_LIST; +typedef struct account_character_data ACCOUNT_CHARACTER_DATA; +typedef struct account_data ACCOUNT_DATA; /* * Function types. @@ -251,6 +253,7 @@ #include "pfiles.h" #include "color.h" #include "hotboot.h" +#include "account.h" #ifdef IMC #include "imc.h" #endif @@ -490,8 +493,14 @@ CON_GET_NEW_EMAIL, CON_GET_MSP, CON_GET_NEW_CLASS, CON_GET_NEW_SECOND, CON_ROLL_STATS, CON_STATS_OK, CON_GET_PUEBLO, CON_GET_HEIGHT, CON_GET_BUILD, - CON_GET_DROID, - CON_COPYOVER_RECOVER, CON_PLAYING = 0, CON_EDITING + CON_GET_DROID, CON_COPYOVER_RECOVER, CON_PLAYING = 0, + CON_EDITING, + + CON_COMFIRM_NEW_ACCOUNT, CON_GET_OLD_ACCOUNT_PASSWORD, + CON_ACCOUNT_PENDING, CON_ACCOUNT_ADD_CHARACTER_PASSWORD, + CON_GET_NEW_ACCOUNT_PASSWORD, CON_COMFIRM_ACCOUNT_PASSWORD, + CON_GET_ACCOUNT + } connection_types; /* @@ -524,6 +533,7 @@ DESCRIPTOR_DATA *snoop_by; CHAR_DATA *character; CHAR_DATA *original; + ACCOUNT_DATA *account; struct mccp_data *mccp; /* Mud Client Compression Protocol */ bool can_compress; char *host; @@ -3901,6 +3911,9 @@ extern BMARKET_DATA *first_market_ship; extern BMARKET_DATA *last_market_ship; +extern ACCOUNT_DATA *first_account; +extern ACCOUNT_DATA *last_account; + /* * Command functions. @@ -4668,6 +4681,7 @@ */ #define PLAYER_DIR "../player/" /* Player files */ #define BACKUP_DIR "../backup/" /* Backup Player files */ +#define ACCOUNT_DIR "../accounts/" /* Directory for accounts */ #define GOD_DIR "../gods/" /* God Info Dir */ #define BOARD_DIR "../boards/" /* Board data dir */ #define CLAN_DIR "../clans/" /* Clan data dir */ diff -r -N -u swfotefuss/src//shutdown.txt allhopegone/src/shutdown.txt --- swfotefuss/src//shutdown.txt 1969-12-31 19:00:00.000000000 -0500 +++ allhopegone/src/shutdown.txt 2009-06-22 12:45:09.000000000 -0400 @@ -0,0 +1 @@ +Unable to open area list