Date: Wednesday November 15, 2000 @ 0:47 Author: ahn Update of /home/netrek/cvsroot/Vanilla/ntserv In directory swashbuckler.fortress.real-time.com:/var/tmp/cvs-serv14988/ntserv Modified Files: daemonII.c enter.c Log Message: Fix no-quit bug. **************************************** Index: Vanilla/ntserv/daemonII.c diff -u Vanilla/ntserv/daemonII.c:1.34 Vanilla/ntserv/daemonII.c:1.35 --- Vanilla/ntserv/daemonII.c:1.34 Sun Jul 2 22:03:35 2000 +++ Vanilla/ntserv/daemonII.c Wed Nov 15 00:47:01 2000 @@ -54,6 +54,7 @@ static void move(int ignored); static void udplayersight(void); static void udplayers(void); +static void udplayerpause(void); static void changedir(struct player *sp); static void udcloak(void); static void torp_track_target(struct torp *t); @@ -456,6 +457,9 @@ } if (status->gameup & GU_PAUSED){ /* Game is paused */ + if (fuse(PLAYERFUSE)) + udplayerpause(); + signal_servers(); (void) SIGNAL(SIGALRM, move); return; @@ -708,6 +712,70 @@ } } + +/* update players during pause */ +static void udplayerpause(void) { + int i; + struct player *j; + + for (i=0; i<MAXPLAYER; i++) { + int kill_player = 0; /* 1 = QUIT during pause */ + /* 2 = ghostbust during pause */ + j = &players[i]; + + switch(j->p_status) { + case PFREE: /* reset ghostbuster and continue */ + j->p_ghostbuster = 0; + continue; + break; + case PEXPLODE: + if (j->p_whydead == KQUIT) + j->p_status = PDEAD; + break; + case PDEAD: + if (j->p_whydead == KQUIT) + kill_player = 1; + break; + } + + if (++(j->p_ghostbuster) > GHOSTTIME) { + ERROR(4,("daemonII/udplayerpause: %s: ship ghostbusted (wd=%d)\n", + j->p_mapchars, j->p_whydead)); + +#ifdef OBSERVERS + /* observer hack */ + if (j->p_status == POBSERV) + j->p_armies = 0; +#endif + + ghostmess(j); + + /* temporary */ + fflush(stdout); + + j->p_status = PDEAD; + j->p_whydead = KGHOST; + j->p_whodead = i; + + /* Force the player out of the game */ + kill_player = 2; + } + + if (kill_player && (j->p_process > 1)) { + j->p_ghostbuster = 0; + + saveplayer(j); + ERROR(8,("daemonII/udplayerpause: %s: sending SIGTERM to %d\n", + j->p_mapchars, j->p_process)); + + if (kill (j->p_process, SIGTERM) < 0) + ERROR(1,("daemonII/udplayerpause: kill failed!\n")); + + /* let's be safe */ + freeslot(j); + } + } +} static void udplayers(void) Index: Vanilla/ntserv/enter.c diff -u Vanilla/ntserv/enter.c:1.7 Vanilla/ntserv/enter.c:1.8 --- Vanilla/ntserv/enter.c:1.7 Fri Feb 25 21:44:00 2000 +++ Vanilla/ntserv/enter.c Wed Nov 15 00:47:01 2000 @@ -129,7 +129,7 @@ me->p_ship.s_plasmacost = -1; } me->p_updates = 0; - me->p_flags = PFSHIELD; + me->p_flags = PFSHIELD|PFGREEN; if (s_type==STARBASE) me->p_flags |= PFDOCKOK; me->p_dir = 0; me->p_desdir = 0;