From 62759214f699a2630eefdf250db8b40fd12292b2 Mon Sep 17 00:00:00 2001 From: driAn Date: Sat, 9 Dec 2006 15:22:44 +0000 Subject: [PATCH] no message git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@775 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/client.cpp | 19 +++++++++++-------- source/src/clients2c.cpp | 2 +- source/src/protos.h | 2 +- source/src/server.cpp | 3 ++- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/source/src/client.cpp b/source/src/client.cpp index fedf18b8..b08d7196 100644 --- a/source/src/client.cpp +++ b/source/src/client.cpp @@ -61,15 +61,16 @@ int smallerteam() { int teamsize[2] = {0, 0}; loopv(players) if(players[i]) teamsize[team_int(players[i]->team)]++; - if(teamsize[0] == teamsize[1]) return -1; + teamsize[team_int(player1->team)]++; + if(teamsize[0] == teamsize[0]) return -1; return teamsize[0] < teamsize[1] ? 0 : 1; }; -void changeteam(char *name) // force team and respawn +void changeteam(int team) // force team and respawn { c2sinit = false; if(m_ctf) dropctfflags(); - s_strncpy(player1->team, name, MAXTEAMLEN+1); + s_strncpy(player1->team, team_string(team), MAXTEAMLEN+1); player1->lastaction = lastmillis; player1->state = CS_DEAD; }; @@ -80,22 +81,24 @@ void newteam(char *name) // save team changing { if(m_teammode) { - bool checkteam = autoteambalance && players.length() > 1; + bool checkteamsize = autoteambalance && players.length() >= 1; + int freeteam = smallerteam(); if(!strcmp(name, "RVSF") || !strcmp(name, "CLA")) { if(strcmp(name, player1->team)) { - if(checkteam && team_int(name) != smallerteam()) + int team = team_int(name); + if(team != freeteam) { conoutf("\f3the %s team is already full", name); return; }; - changeteam(name); + changeteam(team); } else return; // same team } - else changeteam(checkteam ? team_string(smallerteam()) : team_string(rnd(2))); // random assignement + else changeteam(checkteamsize ? (uint)freeteam : rnd(2)); // random assignement } else { c2sinit = false; s_strncpy(player1->team, name, MAXTEAMLEN+1); }; } @@ -263,7 +266,7 @@ bool netmapstart() { senditemstoserver = true; return clienthost!=NULL; }; void initclientnet() { newname("unnamed"); - changeteam("cube"); + changeteam(rnd(2)); }; void sendpackettoserv(int chan, ENetPacket *packet) diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index 0428ec8d..94e5790a 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -483,7 +483,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p) case SV_FORCETEAM: { - changeteam(team_string(getint(p))); + changeteam(getint(p)); break; }; diff --git a/source/src/protos.h b/source/src/protos.h index 7053eabe..3562c67e 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -86,7 +86,7 @@ extern void initclientnet(); extern bool netmapstart(); extern int getclientnum(); extern void changemapserv(char *name, int mode); -extern void changeteam(char *name); +extern void changeteam(int team); extern void newteam(char *name); extern bool sendpwd; diff --git a/source/src/server.cpp b/source/src/server.cpp index df63a11e..1270f00d 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -196,6 +196,7 @@ int freeteam() { int teamsize[2] = {0, 0}; loopv(clients) if(clients[i]->type!=ST_EMPTY) teamsize[team_int(clients[i]->team)]++; + if(teamsize[0] == teamsize[1]) return rnd(2); return teamsize[0] < teamsize[1] ? 0 : 1; }; @@ -507,7 +508,7 @@ void shuffleteams() loopv(clients) if(clients[i]->type!=ST_EMPTY) { int team = rnd(2); - if(teamsize[team] > numplayers/2) team = (team+1)%2; + if(teamsize[team] > numplayers/2) team = team_opposite(team); sendf(i, 1, "rii", SV_FORCETEAM, team); teamsize[team]++; };