From cf993c56cf1def608125fe7f294eab4d03785115 Mon Sep 17 00:00:00 2001 From: driAn Date: Sat, 3 May 2008 21:07:31 +0000 Subject: [PATCH] grenadiers frags/deaths ratio git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1849 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/main.cpp | 6 +++--- source/src/scoreboard.cpp | 33 ++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/source/src/main.cpp b/source/src/main.cpp index 9be60657..c1df5641 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -515,9 +515,9 @@ int main(int argc, char **argv) initlog("cfg"); extern void *scoremenu, *teammenu, *ctfmenu, *servmenu, *kickmenu, *banmenu, *forceteammenu, *giveadminmenu, *docmenu; - scoremenu = addmenu("score", "frags\tdeath\tpj\tping\tcn\tname", false, renderscores, false, true); - teammenu = addmenu("team score", "frags\tdeath\tpj\tping\tcn\tname", false, renderscores, false, true); - ctfmenu = addmenu("ctf score", "flags\tfrags\tdeath\tpj\tping\tcn\tname", false, renderscores, false, true); + scoremenu = addmenu("score", "frags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); + teammenu = addmenu("team score", "frags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); + ctfmenu = addmenu("ctf score", "flags\tfrags\tdeath\tratio\tpj\tping\tcn\tname", false, renderscores, false, true); servmenu = addmenu("server", "ping\tplr\tserver", true, refreshservers); kickmenu = addmenu("kick player", NULL, true, refreshsopmenu); banmenu = addmenu("ban player", NULL, true, refreshsopmenu); diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index cb852d45..e390212a 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -59,6 +59,25 @@ static int scorecmp(const playerent **x, const playerent **y) return strcmp((*x)->name, (*y)->name); } +struct scoreratio +{ + float ratio; + int precision; + + void calc(int frags, int deaths) + { + // ratio + if(frags>=0 && deaths>0) ratio = (float)frags/(float)deaths; + else if(frags>=0 && deaths==0) ratio = frags; + else ratio = 0.0f; + + // precision + if(ratio<10.0f) precision = 2; + else if(ratio>=10.0f && ratio<100.0f) precision = 1; + else precision = 0; + } +}; + void renderscore(void *menu, playerent *d) { const char *status = ""; @@ -70,9 +89,11 @@ void renderscore(void *menu, playerent *d) sline &line = scorelines.add(); line.bgcolor = d==player1 ? &localplayerc : NULL; string &s = line.s; - if(m_ctf) s_sprintf(s)("%d\t%d\t%d\t%s\t%s\t%d\t%s%s", d->flagscore, d->frags, d->deaths(), 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%s\t%s\t%d\t%s%s", d->frags, d->deaths(), d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); - else s_sprintf(s)("%d\t%d\t%s\t%s\t%d\t%s%s", d->frags, d->deaths(), d->state==CS_LAGGED ? "LAG" : lag, colorping(d->ping), d->clientnum, status, colorname(d)); + 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)); } void renderteamscore(void *menu, teamscore *t) @@ -84,8 +105,10 @@ void renderteamscore(void *menu, teamscore *t) } sline &line = scorelines.add(); s_sprintfd(plrs)("(%d %s)", t->teammembers.length(), t->teammembers.length() == 1 ? "player" : "players"); - if(m_ctf) s_sprintf(line.s)("%d\t%d\t%d\t\t\t\t%s\t\t%s", t->flagscore, t->frags, t->deaths, team_string(t->team), plrs); - else if(m_teammode) s_sprintf(line.s)("%d\t%d\t\t\t\t%s\t\t%s", t->frags, t->deaths, team_string(t->team), plrs); + scoreratio sr; + sr.calc(t->frags, t->deaths); + if(m_ctf) s_sprintf(line.s)("%d\t%d\t%d\t%.*f\t\t\t\t%s\t\t%s", t->flagscore, t->frags, t->deaths, sr.precision, sr.ratio, team_string(t->team), plrs); + else if(m_teammode) s_sprintf(line.s)("%d\t%d\t%.*f\t\t\t\t%s\t\t%s", t->frags, t->deaths, sr.precision, sr.ratio, team_string(t->team), plrs); static color teamcolors[2] = { color(1.0f, 0, 0, 0.2f), color(0, 0, 1.0f, 0.2f) }; line.bgcolor = &teamcolors[t->team]; loopv(t->teammembers) renderscore(menu, t->teammembers[i]);