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:
@@ -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);
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user