From 3ab87d5a5f2ce096fb5626ea9e6feade260fbbc1 Mon Sep 17 00:00:00 2001 From: driAn Date: Wed, 30 May 2007 21:24:55 +0000 Subject: [PATCH] no message git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@1031 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/clientgame.cpp | 11 +++++++---- source/src/clients2c.cpp | 3 ++- source/src/main.cpp | 11 ++++++----- source/src/protocol.cpp | 2 +- source/src/protocol.h | 4 ++-- source/src/protos.h | 2 +- source/src/scoreboard.cpp | 6 +++--- source/src/server.cpp | 29 ++++++++++++++++++++--------- 8 files changed, 42 insertions(+), 26 deletions(-) diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index c3fbf456..286c32d0 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -432,8 +432,11 @@ void dodamage(int damage, int actor, playerent *act, bool gib, playerent *pl) } } +VAR(minutesremaining, 1, 0, 0); + void timeupdate(int timeremain) { + minutesremaining = timeremain; if(!timeremain) { intermission = true; @@ -519,10 +522,8 @@ void startmap(char *name) // called just after a map load particlereset(); spawncycle = -1; spawnplayer(player1); - player1->frags = 0; - player1->flagscore = 0; - //if(m_teammode) newteam(player1->team); // ensure valid team // TESTME - loopv(players) if(players[i]) players[i]->frags = players[i]->flagscore = 0; + player1->frags = player1->flagscore = player1->lifesequence = 0; + loopv(players) if(players[i]) players[i]->frags = players[i]->flagscore = players[i]->lifesequence = 0; s_strcpy(clientmap, name); if(editmode) toggleedit(); setvar("gamespeed", 100); @@ -621,6 +622,7 @@ void removebans() { serveropcommand(SOPCMD_REMBANS, 0); } void autoteam(int enable) { serveropcommand(SOPCMD_AUTOTEAM, enable); } void mastermode(int mode) { serveropcommand(SOPCMD_MASTERMODE, mode); } void forceteam(int player) { serveropcommand(SOPCMD_FORCETEAM, player); } +void givemaster(int player) { serveropcommand(SOPCMD_GIVEMASTER, player); } COMMAND(setmaster, ARG_1INT); COMMAND(setadmin, ARG_2STR); @@ -630,6 +632,7 @@ COMMAND(removebans, ARG_NONE); COMMAND(autoteam, ARG_1INT); COMMAND(mastermode, ARG_1INT); COMMAND(forceteam, ARG_1INT); +COMMAND(givemaster, ARG_1INT); struct mline { string cmd; }; static vector mlines; diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index d2849085..79562643 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -337,12 +337,13 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) case SV_RESUME: { - int cn = getint(p), frags = getint(p), flags = getint(p); + int cn = getint(p), frags = getint(p), flags = getint(p), lseq = getint(p); playerent *d = cn==getclientnum() ? player1 : newclient(cn); if(d) { d->frags = frags; d->flagscore = flags; + d->lifesequence = lseq; } break; } diff --git a/source/src/main.cpp b/source/src/main.cpp index 626b1b17..38cfced4 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -161,7 +161,7 @@ VARF(gamespeed, 10, 100, 1000, if(multiplayer()) gamespeed = 100); int main(int argc, char **argv) { bool dedicated = false; - int fs = SDL_FULLSCREEN, depth = 0, bpp = 0, fsaa = 0, vsync = -1, par = 0, uprate = 0, maxcl = DEFAULTCLIENTS; + int fs = SDL_FULLSCREEN, depth = 0, bpp = 0, fsaa = 0, vsync = -1, par = 0, uprate = 0, maxcl = DEFAULTCLIENTS, tkthreshold = 2; char *sdesc = "", *ip = "", *master = NULL, *passwd = "", *maprot = NULL, *adminpwd = NULL, *srvmsg = NULL; #define initlog(s) puts("init: " s) @@ -189,6 +189,7 @@ int main(int argc, char **argv) case 'x' : adminpwd = a; break; case 'c': maxcl = atoi(a); break; case 'o': srvmsg = a; break; + case 'k': tkthreshold = atoi(a); break; default: conoutf("unknown commandline option"); } else conoutf("unknown commandline argument"); @@ -205,7 +206,7 @@ int main(int argc, char **argv) if(enet_initialize()<0) fatal("Unable to initialise network module"); initclient(); - initserver(dedicated, uprate, sdesc, ip, master, passwd, maxcl, maprot, adminpwd, srvmsg); // never returns if dedicated + initserver(dedicated, uprate, sdesc, ip, master, passwd, maxcl, maprot, adminpwd, srvmsg, tkthreshold); // never returns if dedicated initlog("world"); empty_world(7, true); @@ -256,9 +257,9 @@ int main(int argc, char **argv) initlog("cfg"); extern void *scoremenu, *teammenu, *ctfmenu, *servmenu, *kickmenu, *banmenu, *docmenu; - scoremenu = addmenu("score", "frags\tpj\tping\tname\tcn", false, renderscores); - teammenu = addmenu("team score", "frags\tpj\tping\tteam\tname\tcn", false, renderscores); - ctfmenu = addmenu("ctf score", "flags\tfrags\tpj\tping\tteam\tname\tcn", false, renderscores); + scoremenu = addmenu("score", "frags\tdeaths\tpj\tping\tname\tcn", false, renderscores); + teammenu = addmenu("team score", "frags\tdeaths\tpj\tping\tteam\tname\tcn", false, renderscores); + ctfmenu = addmenu("ctf score", "flags\tdeaths\tfrags\tpj\tping\tteam\tname\tcn", false, renderscores); servmenu = addmenu("server", "ping\tplr\tserver", true, refreshservers); kickmenu = addmenu("kick player", NULL, true, refreshmastermenu); banmenu = addmenu("ban player", NULL, true, refreshmastermenu); diff --git a/source/src/protocol.cpp b/source/src/protocol.cpp index cbd27cd9..4731b4bc 100644 --- a/source/src/protocol.cpp +++ b/source/src/protocol.cpp @@ -86,7 +86,7 @@ const char *modestr(int n) { return (n>=0 && (size_t)n < sizeof(modenames)/sizeo char msgsizesl[] = // size inclusive message token, 0 for variable or not-checked sizes { SV_INITS2C, 5, SV_INITC2S, 0, SV_POS, 0, SV_TEXT, 0, SV_TEAMTEXT, 0, SV_SOUND, 2, SV_CDIS, 2, - SV_GIBDIED, 2, SV_DIED, 2, SV_GIBDAMAGE, 4, SV_DAMAGE, 4, SV_SHOT, 9, SV_FRAGS, 2, SV_RESUME, 3, + SV_GIBDIED, 2, SV_DIED, 2, SV_GIBDAMAGE, 4, SV_DAMAGE, 4, SV_SHOT, 9, SV_FRAGS, 2, SV_RESUME, 4, SV_TIMEUP, 2, SV_EDITENT, 10, SV_MAPRELOAD, 2, SV_ITEMACC, 2, SV_MAPCHANGE, 0, SV_ITEMSPAWN, 2, SV_ITEMPICKUP, 3, SV_PING, 2, SV_PONG, 2, SV_CLIENTPING, 2, SV_GAMEMODE, 2, diff --git a/source/src/protocol.h b/source/src/protocol.h index a8335876..1d84d97c 100644 --- a/source/src/protocol.h +++ b/source/src/protocol.h @@ -17,7 +17,7 @@ enum SV_EDITH, SV_EDITT, SV_EDITS, SV_EDITD, SV_EDITE, SV_SENDMAP, SV_RECVMAP, SV_SERVMSG, SV_ITEMLIST, SV_WEAPCHANGE, SV_MODELSKIN, - SV_FLAGPICKUP, SV_FLAGDROP, SV_FLAGRETURN, SV_FLAGSCORE, SV_FLAGRESET, SV_FLAGINFO, SV_FLAGS, //EDIT: AH + SV_FLAGPICKUP, SV_FLAGDROP, SV_FLAGRETURN, SV_FLAGSCORE, SV_FLAGRESET, SV_FLAGINFO, SV_FLAGS, SV_ARENASPAWN, SV_ARENAWIN, SV_SETMASTER, SV_SETADMIN, SV_SERVOPINFO, SV_SERVOPCMD, SV_SERVOPCMDDENIED, SV_FORCETEAM, SV_AUTOTEAM, @@ -25,7 +25,7 @@ enum SV_CLIENT, }; -enum { SOPCMD_KICK = 0, SOPCMD_BAN, SOPCMD_REMBANS, SOPCMD_MASTERMODE, SOPCMD_AUTOTEAM, SOPCMD_FORCETEAM, SOPCMD_NUM}; +enum { SOPCMD_KICK = 0, SOPCMD_BAN, SOPCMD_REMBANS, SOPCMD_MASTERMODE, SOPCMD_AUTOTEAM, SOPCMD_FORCETEAM, SOPCMD_GIVEMASTER, SOPCMD_NUM}; #define DMF 16.0f #define DAF 1.0f diff --git a/source/src/protos.h b/source/src/protos.h index c7fe5529..ad248a93 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -277,7 +277,7 @@ extern char *hudgunnames[]; extern void renderhudgun(); // server -extern void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master, char *passwd, int maxcl, char *maprot, char *adminpwd, char *srvmsg); +extern void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master, char *passwd, int maxcl, char *maprot, char *adminpwd, char *srvmsg, int tkthreshold); extern void cleanupserver(); extern void localconnect(); extern void localdisconnect(); diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index 8d7858ea..fc7ddf07 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -22,9 +22,9 @@ void renderscore(void *menu, playerent *d, int cn) else if(d->state==CS_DEAD) status = "\f4"; s_sprintfd(lag)("%d", d->plag); string &s = scorelines.add().s; - if(m_ctf) s_sprintf(s)("%d\t%d\t%s\t%d\t%s\t%s%s\t%d", d->flagscore, d->frags, d->state==CS_LAGGED ? "LAG" : lag, d->ping, d->team, status, d->name, cn); - else if(m_teammode) s_sprintf(s)("%d\t%s\t%d\t%s\t%s%s\t%d", d->frags, d->state==CS_LAGGED ? "LAG" : lag, d->ping, m_teammode ? d->team : "", status, d->name, cn); - else s_sprintf(s)("%d\t%s\t%d\t%s%s\t%d", d->frags, d->state==CS_LAGGED ? "LAG" : lag, d->ping, status, d->name, cn); + if(m_ctf) s_sprintf(s)("%d\t%d\t%d\t%s\t%d\t%s\t%s%s\t%d", d->flagscore, d->frags, d->lifesequence, d->state==CS_LAGGED ? "LAG" : lag, d->ping, d->team, status, d->name, cn); + else if(m_teammode) s_sprintf(s)("%d\t%d\t%s\t%d\t%s\t%s%s\t%d", d->frags, d->lifesequence, d->state==CS_LAGGED ? "LAG" : lag, d->ping, m_teammode ? d->team : "", status, d->name, cn); + else s_sprintf(s)("%d\t%d\t%s\t%d\t%s%s\t%d", d->frags, d->lifesequence, d->state==CS_LAGGED ? "LAG" : lag, d->ping, status, d->name, cn); menumanual(menu, scorelines.length()-1, s); } diff --git a/source/src/server.cpp b/source/src/server.cpp index 037a7919..df07d61b 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -13,11 +13,11 @@ int mastermode = MM_OPEN; struct clientscore { - int frags, flags; + int frags, flags, lifesequence; void reset() { - frags = flags = 0; + frags = flags = lifesequence = 0; } }; @@ -181,7 +181,7 @@ bool buildworldstate() } } -int maxclients = DEFAULTCLIENTS; +int maxclients = DEFAULTCLIENTS, teamkillthreshold; string smapname; char *adminpasswd = NULL, *motd = NULL; @@ -652,11 +652,11 @@ void sendserveropinfo(int receiver) sendf(receiver, 1, "riii", SV_SERVOPINFO, op, op >= 0 ? clients[op]->role : -1); } -void changeclientrole(int client, int role, char *pwd = NULL) +void changeclientrole(int client, int role, char *pwd = NULL, bool force=false) { if(!isdedicated || !valid_client(client)) return; int serverop = serveroperator(); - if(role == CR_DEFAULT || (role == CR_MASTER && serverop < 0) || (role == CR_ADMIN && pwd && pwd[0] && adminpasswd && !strcmp(adminpasswd, pwd))) + if(force || role == CR_DEFAULT || (role == CR_MASTER && serverop < 0) || (role == CR_ADMIN && pwd && pwd[0] && adminpasswd && !strcmp(adminpasswd, pwd))) { if(role > CR_DEFAULT) loopv(clients) clients[i]->role = CR_DEFAULT; clients[client]->role = role; @@ -720,6 +720,13 @@ void serveropcmd(int sender, int cmd, int a) forceteam(a, team_opposite(team_int(clients[a]->team))); break; } + case SOPCMD_GIVEMASTER: + { + requirerole(CR_ADMIN); + if(!valid_client(a)) return; + changeclientrole(a, CR_MASTER, NULL, true); + break; + } } sendf(-1, 1, "riii", SV_SERVOPCMD, cmd, a); } @@ -831,7 +838,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 if(sc) { cl->score = *sc; - sendf(-1, 1, "ri4", SV_RESUME, sender, sc->frags, sc->flags); + sendf(-1, 1, "ri5", SV_RESUME, sender, sc->frags, sc->flags, sc->lifesequence); } } getstring(text, p); @@ -968,6 +975,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1 case SV_DIED: getint(p); if(m_arena) cl->arenadeath = true; + cl->score.lifesequence++; // FIXME QUEUE_MSG; break; @@ -1017,6 +1025,7 @@ void send_welcome(int n) putint(p, c.clientnum); putint(p, c.score.frags); putint(p, c.score.flags); + putint(p, c.score.lifesequence); } if(autoteam) { @@ -1214,7 +1223,7 @@ void localconnect() send_welcome(c.clientnum); } -void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master, char *passwd, int maxcl, char *maprot, char *adminpwd, char *srvmsg) +void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master, char *passwd, int maxcl, char *maprot, char *adminpwd, char *srvmsg, int tkthreshold) { if(passwd) s_strcpy(serverpassword, passwd); maxclients = maxcl > 0 ? min(maxcl, MAXCLIENTS) : DEFAULTCLIENTS; @@ -1231,6 +1240,7 @@ void initserver(bool dedicated, int uprate, char *sdesc, char *ip, char *master, readscfg(path(maprot)); if(adminpwd && adminpwd[0]) adminpasswd = adminpwd; if(srvmsg && srvmsg[0]) motd = srvmsg; + teamkillthreshold = tkthreshold; } resetserverifempty(); @@ -1254,7 +1264,7 @@ void fatal(char *s, char *o) { cleanupserver(); printf("fatal: %s\n", s); exit(E int main(int argc, char **argv) { - int uprate = 0, maxcl = DEFAULTCLIENTS; + int uprate = 0, maxcl = DEFAULTCLIENTS, tkthreshold = 2; char *sdesc = "", *ip = "", *master = NULL, *passwd = "", *maprot = "", *adminpasswd = NULL, *srvmsg = NULL; for(int i = 1; i