Crossfire Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
My savecode diffs
- To: crossfire (at) ifi.uio.no
- Subject: My savecode diffs
- From: (Douglas Melamed)
- Date: Mon, 21 Sep 92 09:34:08 EDT
Only a couple of people asked me for these, But I thought I'd go ahead
and post them to the group anyway. They are diffed with version 0.86.
diff -c crossfire/config.h ./config.h
*** crossfire/config.h Fri Sep 4 03:31:40 1992
- --- ./config.h Fri Sep 18 18:22:40 1992
***************
*** 28,34 ****
* There is still a calloc() call in player.c which is not affected by this
* definition due to a bug which hasn't been found yet.
*/
! /* #define USE_CALLOC */
/*
* This define exchanges some functions with macros. If defined, a lot less
- --- 28,34 ----
* There is still a calloc() call in player.c which is not affected by this
* definition due to a bug which hasn't been found yet.
*/
! #define USE_CALLOC
/*
* This define exchanges some functions with macros. If defined, a lot less
***************
*** 62,68 ****
* archetype file to be.
*/
! #define LIBDIR "/hom/frankj/src/crossfire/lib"
/*
* If you want the players to be able to save their characters between
- --- 62,68 ----
* archetype file to be.
*/
! #define LIBDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/games/cfire/lib"
/*
* If you want the players to be able to save their characters between
***************
*** 70,78 ****
* where the player-files will be put.
*/
! /* #define SAVE_PLAYER */
! #define PLAYERDIR "/hom/frankj/src/crossfire/lib/players"
/*
* It shouldn't be needed to change the following constants.
*/
- --- 70,82 ----
* where the player-files will be put.
*/
! #define SAVE_PLAYER
! #define PLAYERDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/News/.comp.src"
+ /* SCOREDIR is the directory were you want the highscores kept */
+
+ #define SCOREDIR "/afs/acpub.duke.edu/users6/yr_95/mel1/News/.comp.src"
+
/*
* It shouldn't be needed to change the following constants.
*/
***************
*** 80,86 ****
#define STARTMAX 500 /* How big array of objects to start with */
#define OBJ_EXPAND 100 /* How big steps to use when expanding array */
! #define HIGHSCORE_LENGTH 100
#define TABLESIZE 947 /* Used in the shared strings library */
- --- 84,90 ----
#define STARTMAX 500 /* How big array of objects to start with */
#define OBJ_EXPAND 100 /* How big steps to use when expanding array */
! #define HIGHSCORE_LENGTH 25
#define TABLESIZE 947 /* Used in the shared strings library */
diff -c crossfire/hiscore.c ./hiscore.c
*** crossfire/hiscore.c Fri Sep 4 03:31:44 1992
- --- ./hiscore.c Fri Sep 18 18:18:06 1992
***************
*** 90,96 ****
new_score->position=HIGHSCORE_LENGTH+1;
old_score.position= -1;
! sprintf(filename,"%s/highscore",LIBDIR);
if((fp=fopen(filename,"r"))!=NULL) {
while(fgets(buf,MAX_BUF,fp)!=NULL&&nrofscores<HIGHSCORE_LENGTH) {
if((tmp_score=get_score(buf))==NULL) break;
- --- 90,96 ----
new_score->position=HIGHSCORE_LENGTH+1;
old_score.position= -1;
! sprintf(filename,"%s/highscore",SCOREDIR);
if((fp=fopen(filename,"r"))!=NULL) {
while(fgets(buf,MAX_BUF,fp)!=NULL&&nrofscores<HIGHSCORE_LENGTH) {
if((tmp_score=get_score(buf))==NULL) break;
***************
*** 203,209 ****
int i=0,j=0,maxchar=(op==NULL?80:INFOCHARS);
score *sc;
! sprintf(filename,"%s/highscore",LIBDIR);
if((fp=fopen(filename,"r"))==NULL) {
perror("Couldn't open highscore file");
if(op!=NULL)
- --- 203,209 ----
int i=0,j=0,maxchar=(op==NULL?80:INFOCHARS);
score *sc;
! sprintf(filename,"%s/highscore",SCOREDIR);
if((fp=fopen(filename,"r"))==NULL) {
perror("Couldn't open highscore file");
if(op!=NULL)
diff -c crossfire/input.c ./input.c
*** crossfire/input.c Fri Sep 4 03:31:45 1992
- --- ./input.c Fri Sep 18 18:22:33 1992
***************
*** 592,626 ****
return 1;
}
#ifdef SAVE_PLAYER
if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='~')) {
! draw_info(op,op->contr->write_buf);
! if(op->contr->writing<2) {
! op->contr->write_buf[0]='>';
! draw_info(op,"What is your name ");
return 0;
- - }
- - if(op->name!=NULL)
- - free_string(op->name);
- - op->name=add_string(op->contr->write_buf+1);
- - draw_stats(op);
- - op->contr->write_buf[0]='\0';
- - op->contr->writing=0;
- - draw_info(op,"What is your password ");
- - write_ch(op,'>');
- - op->contr->password[0]='!';
- - op->contr->no_echo=1;
- - op->contr->name_changed=1;
- - return 0;
}
! if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='!')) {
strncpy(op->contr->password,op->contr->write_buf+1,7);
op->contr->password[8]='\0';
op->contr->writing=0;
! op->state=2;
! op->contr->no_echo=0;
check_login(op);
return 0;
}
#endif
if(op->contr->write_buf[0]=='"') {
write_ch(op,'"');
- --- 592,646 ----
return 1;
}
#ifdef SAVE_PLAYER
+ if(op->state==6) {
if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='~')) {
! player *pl;
! int used_name = 0; /* to keep from having multiple logins */
!
! if(op->name!=NULL)
! free_string(op->name);
! op->name=add_string(op->contr->write_buf+1);
! op->contr->name_changed=1;
! op->contr->last_value= -1;
! op->contr->writing = 0;
! for(pl=first_player;pl!=NULL;pl=pl->next) /* check for multy login */
! if (strcmp(pl->ob->name,op->name) == 0)
! used_name++;
! if(used_name > 1) {
! clear_win_info(op);
! draw_info(op,"******* NOT SO FAST *******");
! draw_info(op,"** That names already in use **");
! draw_info(op,"******* TRY AGAIN *******");
! draw_info(op,"############# FIRST #############");
! draw_info(op," ");
! op->contr->writing=1;
! op->contr->password[0]='~';
! op->contr->write_buf[0]='?';
! op->contr->write_buf[1]='\0';
! draw_info(op,"By what name shalt thou be known");
! return 0;
! }
! draw_stats(op);
! draw_info(op,"####### NOW #######");
! draw_info(op," ");
! op->contr->writing=1;
! op->contr->write_buf[0]='?';
! op->contr->write_buf[1]='\0';
! draw_info(op,"What is your password ");
! op->contr->name_changed=1;
! op->contr->password[0]='%';
return 0;
}
! if((op->contr->write_buf[0]=='?')&&(op->contr->password[0]=='%')) { /* DMM */
strncpy(op->contr->password,op->contr->write_buf+1,7);
op->contr->password[8]='\0';
op->contr->writing=0;
! op->contr->write_buf[0] = '\0';
check_login(op);
return 0;
}
+ return 0;
+ }
#endif
if(op->contr->write_buf[0]=='"') {
write_ch(op,'"');
***************
*** 657,662 ****
- --- 677,685 ----
draw_info(op," peaceful - Toggles player attack.");
draw_info(op," scroll - Toggles scroll here.");
draw_info(op," dm - Enters cheat mode.");
+ #ifdef SAVE_PLAYER
+ draw_info(op," quit - QUITS & SAVES character!");
+ #endif
if(!IS_WIZ(op))
return 0;
draw_info(op,"Cheat mode commands:");
***************
*** 682,692 ****
info_flush();
strncpy(op->contr->killer,"quit",MAX_NAME);
#ifdef SAVE_PLAYER
! if(!save_player(op))
! check_score(op);
! #else
! check_score(op);
#endif
draw_info(op,"Do you want to play again (a/q)?");
return 0;
}
- --- 705,713 ----
info_flush();
strncpy(op->contr->killer,"quit",MAX_NAME);
#ifdef SAVE_PLAYER
! save_player(op);
#endif
+ check_score(op);
draw_info(op,"Do you want to play again (a/q)?");
return 0;
}
***************
*** 813,819 ****
return 0;
}
if(op->contr->no_echo) {
! if(!strcmp(op->contr->write_buf,">firecross")){
SET_WIZ(op);
draw_info(op, "Ok, you are the DUNGEON MASTER!");
info_all("The Dungeon Master has arrived!",1);
- --- 834,840 ----
return 0;
}
if(op->contr->no_echo) {
! if(!strcmp(op->contr->write_buf,">naughty")){
SET_WIZ(op);
draw_info(op, "Ok, you are the DUNGEON MASTER!");
info_all("The Dungeon Master has arrived!",1);
***************
*** 1278,1285 ****
look_at(op,0,0);
pl->last_cmd=2;
break;
! case 'Q':
draw_info(op,"Type 'quit to quit.");
break;
case '>':
rotate_right(op);
- --- 1299,1310 ----
look_at(op,0,0);
pl->last_cmd=2;
break;
! case 'Q':
! #ifndef SAVE_PLAYER
draw_info(op,"Type 'quit to quit.");
+ #else
+ draw_info(op,"Type 'quit to quit & SAVE.");
+ #endif
break;
case '>':
rotate_right(op);
diff -c crossfire/login.c ./login.c
*** crossfire/login.c Fri Sep 4 03:31:46 1992
- --- ./login.c Fri Sep 18 18:18:06 1992
***************
*** 28,41 ****
FILE *fp;
char filename[MAX_BUF];
object *tmp;
if(!op->contr->name_changed||!op->stats.exp||WAS_WIZ(op)) {
! draw_info(op,"Your name is not valid,");
! draw_info(op,"Game not saved.");
return 0;
}
sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
fp=fopen(filename, "w");
fprintf(fp,"%s\n",op->contr->password);
save_object(fp,op);
op->contr->freeze_inv=1;
- --- 28,51 ----
FILE *fp;
char filename[MAX_BUF];
object *tmp;
+ int loop;
if(!op->contr->name_changed||!op->stats.exp||WAS_WIZ(op)) {
! draw_info(op,"** No experience, or no name! **");
! draw_info(op,"** Game not saved. **");
return 0;
}
sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
fp=fopen(filename, "w");
+ if(fp == NULL) { /* DMM So disk errors won't seg. fault us */
+ draw_info(op,"*** Disk full or protected ***");
+ draw_info(op,"*** Unable to save character ***");
+ return 0;
+ }
+
fprintf(fp,"%c%c%c",op->contr->digestion,op->contr->gen_hp,op->contr->ge
n_sp);/*DMM*/
+ for(loop = 0; loop < 11; loop++)
+ fprintf(fp,"%c%c",op->contr->levhp[loop],op->contr->levsp[loop]);
+ fprintf(fp,"%c",op->contr->last_level); /* DMM */
fprintf(fp,"%s\n",op->contr->password);
save_object(fp,op);
op->contr->freeze_inv=1;
***************
*** 48,53 ****
- --- 58,64 ----
fclose(fp);
op->contr->freeze_inv=0;
draw_all_inventory(op);
+ draw_info(op,"******* THY CHARACTER HAS BEEN SAVED *******");
chmod(filename,0660);
return 1;
}
***************
*** 58,64 ****
char filename[MAX_BUF];
char buf[MAX_BUF];
object *tmp;
! int i,j,flag;
mapstruct *m;
sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
- --- 69,75 ----
char filename[MAX_BUF];
char buf[MAX_BUF];
object *tmp;
! int i,j,flag,loop;
mapstruct *m;
sprintf(filename,"%s/%s.pl",PLAYERDIR,op->name);
***************
*** 71,93 ****
op->state = 2;
}
else{
fgets(buf,MAX_BUF,fp);
buf[strlen(buf)-1]='\0';
if (strcmp(buf,op->contr->password)){
draw_info(op," ");
! draw_info(op,"Wrong Password!");
! draw_info(op," ");
! draw_info(op,"What is your name ");
! op->state = 0;
if(op->name!=NULL)
free_string(op->name);
op->name=NULL;
- - op->contr->writing=0;
- - write_ch(op,'>');
- - op->contr->password[0]='~';
} else {
op->contr->name_changed=1;
load_object(fp,op);
m=ready_map(1,0);
i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
- --- 82,110 ----
op->state = 2;
}
else{
+
fscanf(fp,"%c%c%c",&(op->contr->digestion),&(op->contr->gen_hp),&(op->co
ntr->gen_sp));
+ for(loop = 0; loop < 11; loop++)
+ fscanf(fp,"%c%c",&(op->contr->levhp[loop]),&(op->contr->levsp[loop]));
+ fscanf(fp,"%c",&(op->contr->last_level)); /* DMM */
fgets(buf,MAX_BUF,fp);
buf[strlen(buf)-1]='\0';
if (strcmp(buf,op->contr->password)){
+ clear_win_info(op);
+ draw_info(op,"#### Invalid Password! ####");
draw_info(op," ");
! op->state = 6;
! op->contr->writing=1;
! op->contr->password[0]='~';
! op->contr->write_buf[0]='?';
! op->contr->write_buf[1]='\0';
! draw_info(op,"By what name shalt thou be known");
if(op->name!=NULL)
free_string(op->name);
op->name=NULL;
} else {
op->contr->name_changed=1;
load_object(fp,op);
+ op->state=0;
m=ready_map(1,0);
i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
***************
*** 110,116 ****
draw_all_inventory(op);
draw_all_look(op);
draw_all_message(op);
! if (op->stats.hp<0||op->stats.food<0){
clear_win_info(op);
draw_info(op,"Your character was dead, when you quit.");
draw_info(op," ");
- --- 127,133 ----
draw_all_inventory(op);
draw_all_look(op);
draw_all_message(op);
! if (op->stats.hp<0||op->stats.food<0){ /* DMM MAKE THIS OBSOLETE */
clear_win_info(op);
draw_info(op,"Your character was dead, when you quit.");
draw_info(op," ");
***************
*** 127,133 ****
draw_all_inventory(op);
draw_all_look(op);
draw_all_message(op);
! draw_info(op,"Welcome Back!");
op->carrying=0;
op->contr->freeze_inv=1;
tmp=get_object();
- --- 144,152 ----
draw_all_inventory(op);
draw_all_look(op);
draw_all_message(op);
! draw_info(op,"*** Welcome Back! ***");
! draw_info(op," ");
! start_info(op);
op->carrying=0;
op->contr->freeze_inv=1;
tmp=get_object();
diff -c crossfire/main.c ./main.c
*** crossfire/main.c Fri Sep 4 03:31:47 1992
- --- ./main.c Fri Sep 18 18:18:07 1992
***************
*** 1238,1243 ****
- --- 1238,1247 ----
void do_some_living(object *op) {
char buf[MAX_BUF];
+ #ifdef SAVE_PLAYER
+ int i;
+ mapstruct *m;
+ #endif
object *tmp;
int last_food=op->stats.food;
int gen_hp=(op->contr->gen_hp+1)*op->stats.maxhp;
***************
*** 1254,1274 ****
}
if(!op->state&&--op->last_heal<0) {
if(op->stats.hp<op->stats.maxhp)
! op->stats.hp++,op->stats.food--;
op->last_heal=1200/(gen_hp<20 ? 30 : gen_hp+10);
! op->stats.food--;
if(op->contr->digestion<0)
op->stats.food+=op->contr->digestion;
else if(op->contr->digestion>0&&RANDOM()%op->contr->digestion)
op->stats.food=last_food;
}
if(op->contr->digestion<0)
while(op->stats.food<0&&op->stats.hp>0)
op->stats.food++,op->stats.hp--;
! if (!op->state&&!IS_WIZ(op)&&(op->stats.hp<0||op->stats.food<0)) {
! if(op->stats.food<0) {
sprintf(buf,"%s starved to death.",op->name);
strcpy(op->contr->killer,"starvation");
}
- --- 1258,1284 ----
}
if(!op->state&&--op->last_heal<0) {
if(op->stats.hp<op->stats.maxhp)
! if(op->stats.food > 0) /*DMM */
! op->stats.hp++,op->stats.food--;
op->last_heal=1200/(gen_hp<20 ? 30 : gen_hp+10);
! if(op->stats.food > 0)
! op->stats.food--;
! else
! op->stats.hp--;
if(op->contr->digestion<0)
op->stats.food+=op->contr->digestion;
else if(op->contr->digestion>0&&RANDOM()%op->contr->digestion)
op->stats.food=last_food;
}
+
+
if(op->contr->digestion<0)
while(op->stats.food<0&&op->stats.hp>0)
op->stats.food++,op->stats.hp--;
! if (!op->state&&!IS_WIZ(op)&&(op->stats.hp<0/*||op->stats.food<0 */)) {
! if(op->stats.food==0) {
sprintf(buf,"%s starved to death.",op->name);
strcpy(op->contr->killer,"starvation");
}
***************
*** 1283,1297 ****
- --- 1293,1349 ----
op->contr->golem=NULL;
}
remove_ob(op);
+
+ #ifndef SAVE_PLAYER
op->state=1;
op->direction=0;
check_score(op);
draw_info(op,"Do you want to play again (a/q)?");
+ #endif
+
tmp=arch_to_object(find_archetype("gravestone"));
sprintf(buf,"%s's gravestone",op->name);
tmp->name=add_string(buf);
tmp->x=op->x,tmp->y=op->y;
insert_ob_in_map(tmp,op->map);
+
+ #ifdef SAVE_PLAYER /* if players dies they lose posessions permanently */
+ op->state = 6; /* so monsters won't attack */
+ m=ready_map(1,0);
+ i=find_free_spot(NULL,m,m->startx,m->starty,0,SIZEOFFREE);
+ op->x=m->startx+freearr_x[i],op->y=m->starty+freearr_y[i];
+ insert_ob_in_map(op,m);
+ tmp = op->inv;
+ while (tmp != NULL) {
+ if (IS_APPLIED(tmp))
+ apply_special(op,tmp);
+ op->inv=tmp->below;
+ remove_ob(tmp);
+ free_object(tmp);
+ tmp = op->inv;
+ }
+ fix_player(op); /* give them 1 hp and 500 food and put them back at start */
+ op->stats.hp = 1;
+ op->stats.food = 500;
+ draw_stats(op);
+ draw_all_info(op);
+ draw_all_inventory(op);
+ draw_all_look(op);
+ draw_all_message(op);
+ clear_win_info(op);
+ draw_info(op,"******* YOU ARE AMAZINGLY REINCARNATED *******");
+ draw_info(op,"******* TOO BAD YOUR ITEMS WEREN'T :) *******");
+ if (roll_stat() > 10) { /* DMM give % chance of losing a Con point */
+ op->stats.Con -= 1;
+ draw_info(op,"******* YOU DON'T QUITE RECOVER FULLY *******");
+ draw_info(op,"******* YOU FEEL LESS HEALTHY *******");
+ draw_stats(op);
+ }
+ save_player(op);
+ op->state = 0; /* player back in game */
+ check_score(op);
+ #endif
+
}
}
***************
*** 1513,1518 ****
- --- 1565,1573 ----
break;
case KeyPress:
op->contr->count_left=0;
+ #ifdef SAVE_PLAYER /* DMM Keeps ctrl characters from printing '&' */
+ if(op->state != 6)
+ #endif
if(!XLookupString(&op->contr->gevent.xkey,text,10,
&op->contr->gkey,NULL)) {
text[0]='&';
***************
*** 1530,1543 ****
return;
}
else if(text[0]=='a'||text[0]=='A') {
op->contr->ob=get_player(op->contr,op->map);
tmp=op->contr->ob;
! #ifdef SAVE_PLAYER
! tmp->state=0;
tmp->contr->writing=1;
tmp->contr->password[0]='~';
tmp->contr->write_buf[0]='?';
! draw_info(tmp,"What is your name ");
#else
tmp->state=2;
draw_info(tmp,"Welcome back!");
- --- 1585,1602 ----
return;
}
else if(text[0]=='a'||text[0]=='A') {
+
op->contr->ob=get_player(op->contr,op->map);
tmp=op->contr->ob;
! #ifdef SAVE_PLAYER /* DMM CHANGE TO RESURRECTION CODE */
! tmp->state=6;
! clear_win_info(tmp);
! draw_info(tmp,"############# FIRST #############");
! draw_info(tmp," ");
tmp->contr->writing=1;
tmp->contr->password[0]='~';
tmp->contr->write_buf[0]='?';
! draw_info(tmp,"By what name shalt thou be known");
#else
tmp->state=2;
draw_info(tmp,"Welcome back!");
***************
*** 1638,1643 ****
- --- 1697,1711 ----
op->contr->fire_on=0;
op->contr->run_on=0;
break;
+ #ifdef SAVE_PLAYER
+ case 6: /* DMM the login case! This is needed badly */
+ if ((XLookupString(&op->contr->gevent.xkey,text,10,
+ &op->contr->gkey,NULL)) && op->contr->writing && text[0] !=' ') {
+ op->contr->last_cmd=0;
+ repeat = parse_writing(op,text[0]);
+ }
+ break;
+ #endif
default:
fprintf(stderr,"Illegal state: %d\n",op->state);
}
diff -c crossfire/object.c ./object.c
*** crossfire/object.c Fri Sep 4 03:31:47 1992
- --- ./object.c Fri Sep 18 18:18:07 1992
***************
*** 635,642 ****
where->carrying+=op->weight*op->nrof; /* I assume combined
objects have no inventory */
} else
where->carrying+=op->weight+op->carrying;
- - if(where->type==PLAYER)
- - fix_player(where);
UNSET_REMOVED(op);
op->map=where->map;
op->env=where;
- --- 635,640 ----
***************
*** 649,656 ****
else
op->below=NULL;
where->inv=op;
! if(where->type==PLAYER)
draw_inventory(where);
}
void check_walk_on(object *op) {
- --- 647,656 ----
else
op->below=NULL;
where->inv=op;
! if(where->type==PLAYER) {
! fix_player(where);
draw_inventory(where);
+ }
}
void check_walk_on(object *op) {
diff -c crossfire/player.c ./player.c
*** crossfire/player.c Fri Sep 4 03:31:47 1992
- --- ./player.c Fri Sep 18 18:18:08 1992
***************
*** 114,134 ****
free_string(p->ob->name);
p->ob->name=add_string(cp);
#ifdef SAVE_PLAYER
! p->write_buf[0]='\0';
! p->writing=0;
draw_info(p->ob,"What is your password ");
! write_ch(p->ob,'>');
! p->password[0]='!';
! p->no_echo=1;
#endif
p->name_changed=1;
} else {
#ifdef SAVE_PLAYER
! p->ob->state=0;
p->ob->contr->writing=1;
p->password[0]='~';
p->write_buf[0]='?';
! draw_info(p->ob,"What is your name ");
#endif
cp=strchr(buf,'.');
if(cp!=NULL) *cp='\0';
- --- 114,139 ----
free_string(p->ob->name);
p->ob->name=add_string(cp);
#ifdef SAVE_PLAYER
! p->ob->state=6;
! draw_info(p->ob,"####### NOW #######");
! draw_info(p->ob," ");
! p->writing=1;
! p->write_buf[0]='?';
! p->write_buf[1]='\0';
draw_info(p->ob,"What is your password ");
! p->password[0]='%';
#endif
p->name_changed=1;
} else {
#ifdef SAVE_PLAYER
! p->ob->state=6;
! draw_info(p->ob,"############# FIRST #############");
! draw_info(p->ob," ");
p->ob->contr->writing=1;
p->password[0]='~';
p->write_buf[0]='?';
! p->write_buf[1]='\0';
! draw_info(p->ob,"By what name shalt thou be known");
#endif
cp=strchr(buf,'.');
if(cp!=NULL) *cp='\0';
diff -c crossfire/xio.c ./xio.c
*** crossfire/xio.c Fri Sep 4 03:31:48 1992
- --- ./xio.c Fri Sep 18 18:18:09 1992
***************
*** 174,179 ****
- --- 174,182 ----
(void) sprintf(buf,"%s lost connection.",pl->name);
if(pl->ob->state==0||pl->ob->state==3||pl->ob->state==5)
remove_ob(pl->ob);
+ #ifdef SAVE_PLAYER
+ save_player(pl->ob); /* DMM */
+ #endif
free_object(pl->ob);
free_player(pl);
if(first_player==NULL)
------- End of Forwarded Message