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