diff --git a/source/src/server.cpp b/source/src/server.cpp index 542a4dba..a636c331 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -574,7 +574,11 @@ void arenacheck() if(arenaround) { arenaround = 0; - loopv(clients) if(clients[i]->type!=ST_EMPTY) sendspawn(clients[i]); + loopv(clients) if(clients[i]->type!=ST_EMPTY) + { + clients[i]->state.respawn(); + sendspawn(clients[i]); + } return; } @@ -1442,9 +1446,8 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 case SV_SPAWN: { int ls = getint(p), gunselect = getint(p); - if(cl->state.state!=CS_DEAD || ls!=cl->state.lifesequence || cl->state.lastspawn<0) break; + if((cl->state.state!=CS_ALIVE && cl->state.state!=CS_DEAD) || ls!=cl->state.lifesequence || cl->state.lastspawn<0) break; cl->state.lastspawn = -1; - if(cl->state.lastdeath) cl->state.respawn(); cl->state.state = CS_ALIVE; cl->state.gunselect = gunselect; QUEUE_MSG; diff --git a/source/src/servercontroller.h b/source/src/servercontroller.h index 2f0c5048..ceedf3c4 100644 --- a/source/src/servercontroller.h +++ b/source/src/servercontroller.h @@ -5,6 +5,7 @@ struct servercontroller virtual void start() = 0; virtual void keepalive() = 0; virtual void stop() = 0; + virtual ~servercontroller() {} int argc; char **argv; }; @@ -145,6 +146,6 @@ winservice *winservice::callbacks::svc = (winservice *)NULL; struct unixdaemon : servercontroller { // UNDONE, AH -} +}; -#endif \ No newline at end of file +#endif