Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: game.h
- ===================================================================
- --- game.h (revision 2062)
- +++ game.h (working copy)
- @@ -602,6 +602,7 @@
- extern string clientmap;
- extern int minremain;
- extern bool intermission;
- + extern int maptimeleft;
- extern int maptime, maprealtime;
- extern fpsent *player1;
- extern vector<fpsent *> players, clients;
- @@ -722,6 +723,7 @@
- // scoreboard
- extern void showscores(bool on);
- + extern int getscores(vector<int> &v);
- extern void getbestplayers(vector<fpsent *> &best);
- extern void getbestteams(vector<const char *> &best);
- Index: client.cpp
- ===================================================================
- --- client.cpp (revision 2062)
- +++ client.cpp (working copy)
- @@ -579,6 +579,7 @@
- {
- connected = true;
- remote = _remote;
- + maptimeleft = remote ? -1 : 0;
- if(editmode) toggleedit();
- }
- Index: render.cpp
- ===================================================================
- --- render.cpp (revision 2062)
- +++ render.cpp (working copy)
- @@ -10,6 +10,7 @@
- VARP(ragdollfade, 0, 1000, 300000);
- VARFP(playermodel, 0, 0, 4, { if(player1->clientnum < 0) player1->playermodel = playermodel; });
- VARP(forceplayermodels, 0, 0, 1);
- + VARP(overridemodel, -1, -1, 4);
- vector<fpsent *> ragdolls;
- @@ -65,6 +66,7 @@
- const playermodelinfo *getplayermodelinfo(int n)
- {
- + if(overridemodel != -1) return &playermodels[overridemodel];
- if(size_t(n) >= sizeof(playermodels)/sizeof(playermodels[0])) return NULL;
- return &playermodels[n];
- }
- Index: scoreboard.cpp
- ===================================================================
- --- scoreboard.cpp (revision 2062)
- +++ scoreboard.cpp (working copy)
- @@ -10,7 +10,96 @@
- VARP(showspectators, 0, 1, 1);
- VARP(highlightscore, 0, 1, 1);
- VARP(showconnecting, 0, 0, 1);
- + VARP(colorclans, 0, 1, 1);
- + VARP(showfrags, 0, 1, 1);
- + int createname(const char *name, char *gclan, char *gname) {
- + // Automatic colors go here
- + int colors[] = {0xFFD300, 0x787EB7, 0x759536, 0x6B8775, 0xF5F5B3, 0xFB000D, 0x61D7A4, 0x532881, 0xF08BCB, 0xDC9630, 0xFEFCFF, 0x99A1DE};
- + int colorsCount = 12;
- + // Custom colors go here
- + int customColors[] = { 0x679FD2 };
- + const char *customNames[] = { "mVa", 0 };
- +
- + if(strchr(name, ' ') != NULL) // Fail on bot [128]
- + return -1;
- +
- + int clannamestart = 0;
- + int clannameend = 0;
- + int clantagstart = 0;
- + int clantagend = 0;
- + int realnamestart = 0;
- + int realnameend = 0;
- + int len = strlen(name);
- + char clanname[250], realname[250];
- + const char *startchars = "[|{}=<(/\\.";
- + const char *endchars = "]|{}=>):/\\.";
- +
- + while(strchr(startchars, name[clannamestart]) != NULL) // Move clannamestart up
- + clannamestart ++;
- + if(clannamestart == 0) {
- + int p = len-1;
- + while(strchr(endchars, name[p]) != NULL) // Check for name|tag|
- + p --;
- + if(p != len-1) { // name|tag| found
- + clannameend = len;
- + clannamestart = p;
- + while(strchr(startchars, name[clannamestart]) == NULL) // Move clannamestart back
- + clannamestart --;
- + realnamestart = 0;
- + realnameend = clannamestart;
- + clannamestart ++;
- + while(strchr(startchars, name[realnameend]) != NULL)
- + realnameend --;
- + realnameend ++;
- + }
- + }
- + if(clannameend == 0) { // name|tag| not found, look for |tag|name
- + clannameend = clannamestart;
- + while(strchr(endchars, name[clannameend]) == NULL)
- + clannameend ++;
- + clantagend = clannameend;
- + while(strchr(endchars, name[clantagend]) != NULL)
- + clantagend ++;
- + realnamestart = clantagend;
- + realnameend = len;
- + }
- + if(clannameend == len) {
- + clannameend = 0;
- + realnamestart = 0;
- + }
- + if(realnameend == len && clannamestart == 0 && len < clannameend+realnamestart) {
- + int a = clannameend, b = clannamestart;
- + clannameend = realnameend;
- + clannamestart = realnamestart;
- + realnameend = a;
- + realnamestart = b;
- + }
- + if(realnamestart > strlen(name)) // Todo: Why does this happen. <name>
- + return -1;
- + strlcpy(clanname, name+clannamestart, clannameend-clannamestart+1);
- + strlcpy(realname, name+realnamestart, realnameend+1);
- + if(!strlen(clanname) || !strlen(realname))
- + return -1;
- +
- + // Pick a color
- + int color = 0xFFFFFF;
- + int i = 0;
- + while(customNames[i] && strcmp(customNames[i], clanname))
- + i ++;
- + if(customNames[i])
- + color = customColors[i];
- + else {
- + int c = 0;
- + for(int i = 1; i < strlen(clanname); i ++)
- + c += clanname[i] ^ clanname[i-1];
- + color = colors[c % colorsCount];
- + }
- + strcpy(gclan, clanname);
- + strcpy(gname, realname);
- + return color;
- + }
- +
- static int playersort(const fpsent **a, const fpsent **b)
- {
- if((*a)->state==CS_SPECTATOR)
- @@ -183,13 +272,27 @@
- g.pushlist(); // horizontal
- }
- - if(!cmode || !cmode->hidefrags())
- + if(showfrags)
- {
- g.pushlist();
- - g.strut(7);
- - g.text("frags", fgcolor);
- - loopscoregroup(o, g.textf("%d", 0xFFFFDD, NULL, o->frags));
- + g.strut(3);
- + g.text("K", fgcolor);
- + loopv(sg.players)
- + {
- + fpsent *o = sg.players[i];
- + g.textf("%d", 0xFFFFDD, NULL, o->frags);
- + }
- g.poplist();
- +
- + g.pushlist();
- + g.strut(5);
- + g.text("D", fgcolor);
- + loopv(sg.players)
- + {
- + fpsent *o = sg.players[i];
- + g.textf("%d", 0xFFFFDD, NULL, o->deaths);
- + }
- + g.poplist();
- }
- if(multiplayer(false) || demoplayback)
- @@ -226,6 +329,9 @@
- g.pushlist();
- g.text("name", fgcolor);
- g.strut(10);
- +
- + char *name = (char *)calloc(250, 1);
- + char *clan = (char *)calloc(250, 1);
- loopscoregroup(o,
- {
- int status = o->state!=CS_DEAD ? 0xFFFFDD : 0x606060;
- @@ -234,8 +340,25 @@
- status = o->privilege>=PRIV_ADMIN ? 0xFF8000 : 0x40FF80;
- if(o->state==CS_DEAD) status = (status>>1)&0x7F7F7F;
- }
- - g.text(colorname(o), status);
- + g.pushlist();
- + if(colorclans)
- + {
- + int color = createname(colorname(o), clan, name);
- + if(color != -1)
- + {
- + g.text(clan, color);
- + g.text(" ", 0xFFFFFF);
- + g.text(name, status);
- + }
- + else
- + g.text(colorname(o), status);
- + }
- + else
- + g.text(colorname(o), status);
- + g.poplist();
- });
- + free(name);
- + free(clan);
- g.poplist();
- if(showclientnum || player1->privilege>=PRIV_MASTER)
- @@ -268,19 +391,36 @@
- g.pushlist();
- g.text("spectator", 0xFFFF80, "server");
- + g.strut(10);
- + char *name = (char *)calloc(250, 1);
- + char *clan = (char *)calloc(250, 1);
- loopv(spectators)
- {
- fpsent *o = spectators[i];
- int status = 0xFFFFDD;
- if(o->privilege) status = o->privilege>=PRIV_ADMIN ? 0xFF8000 : 0x40FF80;
- + g.pushlist();
- if(o==player1 && highlightscore)
- + g.background(0x808080, 3);
- + g.text("", 0xFFFFFF, "spectator");
- + if(colorclans)
- {
- - g.pushlist();
- - g.background(0x808080, 3);
- + int color = createname(colorname(o), clan, name);
- + if(color != -1)
- + {
- + g.text(clan, color);
- + g.text(" ", 0xFFFFFF);
- + g.text(name, status);
- + }
- + else
- + g.text(colorname(o), status);
- }
- - g.text(colorname(o), status, "spectator");
- - if(o==player1 && highlightscore) g.poplist();
- + else
- + g.text(colorname(o), status);
- + g.poplist();
- }
- + free(clan);
- + free(name);
- g.poplist();
- g.space(1);
- @@ -289,6 +429,21 @@
- loopv(spectators) g.textf("%d", 0xFFFFDD, NULL, spectators[i]->clientnum);
- g.poplist();
- + if(showping)
- + {
- + g.space(1);
- + g.pushlist();
- + g.text("ping", 0xFFFF80);
- + loopv(spectators)
- + {
- + fpsent *p = spectators[i];
- + if(!showpj && p->state==CS_LAGGED) g.text("LAG", 0xFFFFDD);
- + else g.textf("%d", 0xFFFFDD, NULL, p->ping);
- + };
- + g.poplist();
- + }
- +
- +
- g.poplist();
- }
- else
- @@ -318,6 +473,29 @@
- }
- }
- + static int scoresort(const int *a, const int *b)
- + {
- + return *b-*a;
- + }
- + int getscores(vector<int> &v)
- + {
- + int numgroups = groupplayers();
- + loopk(numgroups)
- + {
- + scoregroup &sg = *groups[k];
- + if(sg.team && m_teammode)
- + v.add(sg.score);
- + }
- + v.sort(scoresort);
- + loopk(numgroups)
- + {
- + scoregroup &sg = *groups[k];
- + if(isteam(player1->team, sg.team))
- + return k;
- + }
- + return -1;
- + }
- +
- struct scoreboardgui : g3d_callback
- {
- bool showing;
- Index: fps.cpp
- ===================================================================
- --- fps.cpp (revision 2062)
- +++ fps.cpp (working copy)
- @@ -3,7 +3,7 @@
- namespace game
- {
- bool intermission = false;
- - int maptime = 0, maprealtime = 0, minremain = 0;
- + int maptime = 0, maprealtime = 0, minremain = 0, maptimeleft = 0;
- int respawnent = -1;
- int lasthit = 0, lastspawnattempt = 0;
- @@ -378,6 +378,7 @@
- else
- {
- d->move = d->strafe = 0;
- + d->deaths ++;
- d->resetinterp();
- d->smoothmillis = 0;
- playsound(S_DIE1+rnd(2), &d->o);
- @@ -443,6 +444,7 @@
- {
- conoutf(CON_GAMEINFO, "\f2time remaining: %d %s", timeremain, timeremain==1 ? "minute" : "minutes");
- }
- + maptimeleft = (lastmillis+timeremain*60000)*(maptimeleft==-1 ? -1 : 1);
- }
- vector<fpsent *> clients;
- @@ -813,6 +815,48 @@
- return 0;
- }
- + VAR(showtimeleft, 0, 1, 1);
- +
- + void rendertimeleft(int w, int h, int fonth)
- + {
- + if(showtimeleft && !m_sp && hudplayer()->state!=CS_EDITING)
- + {
- + int remain = maptimeleft;
- + if(maptimeleft<0) remain*=-1;
- + int t = intermission ? 0 : m_edit ? lastmillis/1000 : (remain+1000-lastmillis)/1000;
- + int m = t/60, s = t%60;
- + if(!m_edit && !m && s && s<30 && lastmillis%1000>=500) return; // Blinking in last 30 seconds
- + if(maptimeleft>-1 || m_edit) draw_textf("%s%d:%-2.2d", w*3-9*fonth, h*3-fonth*3/2, (!m_edit && !m) ? "\f3" : (!s) ? "\f1" : "", m, s);
- + else draw_textf("%s<%d min", w*3-9*fonth, h*3-fonth*3/2, (!m_edit && !m) ? "\f3" : (!s) ? "\f1" : "", m+1);
- + }
- + }
- +
- + VARP(showscorehud, 0, 0, 1);
- +
- + void renderscorehud(int w, int h, int fonth)
- + {
- + if(showscorehud && !m_sp && hudplayer()->state!=CS_EDITING)
- + {
- + vector<int> scores;
- + int n = getscores(scores);
- + char str[50];
- + int c = 0;
- + loopv(scores)
- + c += sprintf(str+c, "%s%s%d\f7", !c ? "" : "-", n == i ? "\f1" : "\f7", scores[i]);
- + draw_textf(str, w*3-13*fonth,h*3-fonth*3/2);
- + }
- + }
- +
- + VARP(showpinghud, 0, 0, 1);
- +
- + void renderpinghud(int w, int h, int fonth)
- + {
- + if(showpinghud && !m_sp && hudplayer()->state!=CS_EDITING)
- + {
- + draw_textf("%d", w*3-16*fonth, h*3-fonth*3/2, player1->ping);
- + }
- + }
- +
- VARP(teamcrosshair, 0, 1, 1);
- VARP(hitcrosshair, 0, 425, 1000);
Add Comment
Please, Sign In to add comment