sorting takes deaths into account, restore deaths on reconnects, protocol change

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1885 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
driAn
2008-05-06 17:59:04 +00:00
parent 921e2ef792
commit ae91a2bcc9
5 changed files with 18 additions and 14 deletions
+3 -3
View File
@@ -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);
+2 -1
View File
@@ -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;
+2 -3
View File
@@ -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)
+7 -5
View File
@@ -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)
+4 -2
View File
@@ -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);