no message

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@773 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
driAn
2006-12-09 13:56:50 +00:00
parent 40bbc3040b
commit 7a8221ed3c
11 changed files with 134 additions and 44 deletions
+46 -3
View File
@@ -36,7 +36,7 @@ struct client // server side version of "dynent" type
ENetPeer *peer;
string hostname;
string mapvote;
string name;
string name, team;
int modevote;
uint pos[3];
clientscore score;
@@ -192,6 +192,13 @@ void zapclient(int c)
clients[c]->ismaster = clients[c]->isauthed = false;
};
int freeteam()
{
int teamsize[2] = {0, 0};
loopv(clients) if(clients[i]->type!=ST_EMPTY) teamsize[team_int(clients[i]->team)]++;
return teamsize[0] < teamsize[1] ? 0 : 1;
};
clientscore *findscore(client &c, bool insert)
{
if(c.type!=ST_TCPIP) return NULL;
@@ -241,7 +248,7 @@ void restoreserverstate(vector<entity> &ents) // hack: called from savegame co
};
int interm = 0, minremain = 0, mapend = 0;
bool mapreload = false;
bool mapreload = false, autoteam = true;
string serverpassword = "";
@@ -493,6 +500,19 @@ bool isbanned(int cn)
return false;
};
void shuffleteams()
{
int numplayers = numclients();
int teamsize[2] = {0, 0};
loopv(clients) if(clients[i]->type!=ST_EMPTY)
{
int team = rnd(2);
if(teamsize[team] > numplayers/2) team = (team+1)%2;
sendf(i, 1, "rii", SV_FORCETEAM, team);
teamsize[team]++;
};
};
int master()
{
loopv(clients) if(clients[i]->type!=ST_EMPTY && clients[i]->ismaster) return i;
@@ -557,6 +577,20 @@ void mastercmd(int sender, int cmd, int a)
sendservmsg(msg);
break;
};
case MCMD_AUTOTEAM:
{
if(a < 0 || a > 1) return;
autoteam = a == 1;
sendf(-1, 1, "rii", SV_AUTOTEAM, a);
break;
};
case MCMD_SHUFFLETEAMS:
{
if(!m_teammode) return;
shuffleteams();
sendservmsg("teams were shuffled");
break;
};
};
};
@@ -628,6 +662,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
};
};
getstring(text, p);
s_strncpy(cl->team, text, MAXTEAMLEN+1);
getint(p);
getint(p);
QUEUE_MSG;
@@ -854,6 +889,13 @@ void send_welcome(int n)
putint(p, c.score.frags);
putint(p, c.score.flags);
};
if(autoteam)
{
putint(p, SV_FORCETEAM);
putint(p, freeteam());
};
putint(p, SV_AUTOTEAM);
putint(p, autoteam);
enet_packet_resize(packet, p.length());
sendpacket(n, 1, packet);
if(smapname[0] && m_ctf) loopi(2) sendflaginfo(i, -1, n); // EDIT: AH
@@ -906,6 +948,7 @@ void resetserverifempty()
//clients.setsize(0);
resetmap("", 0, 10, false);
mastermode = MM_OPEN;
autoteam = true;
};
int refuseconnect(int i)
@@ -947,7 +990,7 @@ void serverslice(int seconds, unsigned int timeout) // main server update, cal
{
f.state=CTFF_INBASE;
sendflaginfo(i, -1);
s_sprintfd(msg)("the server reset the %s flag", rb_team_string(i));
s_sprintfd(msg)("the server reset the %s flag", team_string(i));
sendservmsg(msg);
sendf(-1, 1, "rii", SV_SOUND, S_FLAGRETURN);
};