diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 344adc17..2ed52259 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -460,8 +460,8 @@ void dokill(playerent *pl, playerent *act, bool gib) } deathstate(pl); + pl->deaths++; playsound(S_DIE1+rnd(2), NULL, NULL, pl == player1 ? NULL : &pl->o); - if(pl->type==ENT_BOT) pl->lifesequence++; } VAR(minutesremaining, 1, 0, 0); @@ -558,8 +558,8 @@ void startmap(const char *name) // called just after a map load suicided = -1; spawncycle = -1; respawnself(); - player1->frags = player1->flagscore = player1->lifesequence = 0; - loopv(players) if(players[i]) players[i]->frags = players[i]->flagscore = players[i]->lifesequence = 0; + player1->frags = player1->flagscore = player1->deaths = player1->lifesequence = 0; + loopv(players) if(players[i]) players[i]->frags = players[i]->flagscore = players[i]->deaths = players[i]->lifesequence = 0; s_strcpy(clientmap, name); if(editmode) toggleedit(); setvar("gamespeed", 100); diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index 39ebdfc0..f0fc39e2 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -393,13 +393,14 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) { int cn = getint(p); if(cn<0) break; - int state = getint(p), lifesequence = getint(p), gunselect = getint(p), flagscore = getint(p), frags = getint(p); + int state = getint(p), lifesequence = getint(p), gunselect = getint(p), flagscore = getint(p), frags = getint(p), deaths = getint(p); playerent *d = (cn == getclientnum() ? player1 : newclient(cn)); if(!d) continue; if(d!=player1) d->state = state; d->lifesequence = lifesequence; d->flagscore = flagscore; d->frags = frags; + d->deaths = deaths; d->selectweapon(gunselect); } break; diff --git a/source/src/entity.h b/source/src/entity.h index 856f49a4..195174ef 100644 --- a/source/src/entity.h +++ b/source/src/entity.h @@ -331,8 +331,7 @@ struct playerent : dynent, playerstate { int clientnum, lastupdate, plag, ping; int lifesequence; // sequence id for each respawn, used in damage test - int frags, flagscore; - virtual int deaths() { return lifesequence + (state==CS_DEAD ? 1 : 0); } // lifeseq gets increment after respawn + int frags, flagscore, deaths; int lastaction, lastmove, lastpain, lastvoicecom; int clientrole; bool attacking; @@ -353,7 +352,7 @@ struct playerent : dynent, playerstate float deltayaw, deltapitch, newyaw, newpitch; int smoothmillis; - playerent() : clientnum(-1), plag(0), ping(0), lifesequence(0), frags(0), flagscore(0), lastpain(0), lastvoicecom(0), clientrole(CR_DEFAULT), + playerent() : clientnum(-1), plag(0), ping(0), lifesequence(0), frags(0), flagscore(0), deaths(0), lastpain(0), lastvoicecom(0), clientrole(CR_DEFAULT), skin(0), nextskin(0), spectating(SM_NONE), followplayercn(0), weaponsel(NULL), nextweaponsel(NULL), primweap(NULL), nextprimweap(NULL), lastattackweapon(NULL), smoothmillis(-1) diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index e390212a..911666be 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -32,7 +32,7 @@ struct teamscore if(!d) return; teammembers.add(d); frags += d->frags; - deaths += d->deaths(); + deaths += d->deaths; if(m_ctf) flagscore += d->flagscore; } }; @@ -54,6 +54,8 @@ static int scorecmp(const playerent **x, const playerent **y) if((*x)->flagscore < (*y)->flagscore) return 1; if((*x)->frags > (*y)->frags) return -1; if((*x)->frags < (*y)->frags) return 1; + if((*x)->deaths > (*y)->deaths) return 1; + if((*x)->deaths < (*y)->deaths) return -1; if((*x)->lifesequence > (*y)->lifesequence) return 1; if((*x)->lifesequence < (*y)->lifesequence) return -1; return strcmp((*x)->name, (*y)->name); @@ -90,10 +92,10 @@ void renderscore(void *menu, playerent *d) line.bgcolor = d==player1 ? &localplayerc : NULL; string &s = line.s; scoreratio sr; - sr.calc(d->frags, d->deaths()); - if(m_ctf) s_sprintf(s)("%d\t%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->flagscore, d->frags, d->deaths(), sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); - else if(m_teammode) s_sprintf(s)("%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->frags, d->deaths(), sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); - else s_sprintf(s)("%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->frags, d->deaths(), sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); + sr.calc(d->frags, d->deaths); + if(m_ctf) s_sprintf(s)("%d\t%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->flagscore, d->frags, d->deaths, sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); + else if(m_teammode) s_sprintf(s)("%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->frags, d->deaths, sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); + else s_sprintf(s)("%d\t%d\t%.*f\t%s\t%s\t%d\t%s%s", d->frags, d->deaths, sr.precision, sr.ratio, d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); } void renderteamscore(void *menu, teamscore *t) diff --git a/source/src/server.cpp b/source/src/server.cpp index 09b6384d..8dc8591e 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -169,12 +169,13 @@ struct savedscore { string name; uint ip; - int frags, flagscore, lifesequence; + int frags, flagscore, deaths, lifesequence; void save(clientstate &cs) { frags = cs.frags; flagscore = cs.flagscore; + deaths = cs.deaths; lifesequence = cs.lifesequence; } @@ -182,6 +183,7 @@ struct savedscore { cs.frags = frags; cs.flagscore = flagscore; + cs.deaths = deaths; cs.lifesequence = lifesequence; } }; @@ -1764,7 +1766,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 if(sc) { sc->restore(cl->state); - sendf(-1, 1, "ri8", SV_RESUME, sender, cl->state.state, cl->state.lifesequence, cl->state.gunselect, sc->flagscore, sc->frags, -1); + sendf(-1, 1, "ri8", SV_RESUME, sender, cl->state.state, cl->state.lifesequence, cl->state.gunselect, sc->flagscore, sc->frags, sc->deaths, -1); } } getstring(text, p);