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
+39 -15
View File
@@ -47,18 +47,6 @@ void throttle()
enet_peer_throttle_configure(clienthost->peers, throttle_interval*1000, throttle_accel, throttle_decel);
};
void ctf_team(char *name)
{
bool isvalidteam = strcmp(name, "RVSF") == 0 || strcmp(name, "CLA") == 0;
if(strcmp(name, player1->team) == 0 && isvalidteam) return;
c2sinit = false;
ctf_death();
if(isvalidteam) strcpy(player1->team, name);
else strcpy(player1->team, rb_team_string(rnd(2)));
player1->lastaction = lastmillis;
player1->state = CS_DEAD;
};
void newname(char *name)
{
if(name[0])
@@ -69,11 +57,46 @@ void newname(char *name)
else conoutf("your name is: %s", player1->name);
};
void newteam(char *name)
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;
return teamsize[0] < teamsize[1] ? 0 : 1;
};
void changeteam(char *name) // force team and respawn
{
c2sinit = false;
if(m_ctf) dropctfflags();
s_strncpy(player1->team, name, MAXTEAMLEN+1);
player1->lastaction = lastmillis;
player1->state = CS_DEAD;
};
void newteam(char *name) // save team changing
{
if(name[0])
{
if(m_teammode) ctf_team(name);
if(m_teammode)
{
bool checkteam = autoteambalance && players.length() > 1;
if(!strcmp(name, "RVSF") || !strcmp(name, "CLA"))
{
if(strcmp(name, player1->team))
{
if(checkteam && team_int(name) != smallerteam())
{
conoutf("\f3the %s team is already full", name);
return;
};
changeteam(name);
}
else return; // same team
}
else changeteam(checkteam ? team_string(smallerteam()) : team_string(rnd(2))); // random assignement
}
else { c2sinit = false; s_strncpy(player1->team, name, MAXTEAMLEN+1); };
}
else conoutf("your team is: %s", player1->team);
@@ -153,6 +176,7 @@ void disconnect(int onlyclean, int async)
disconnecting = 0;
clientnum = -1;
c2sinit = false;
autoteambalance = false;
player1->lifesequence = 0;
if(m_botmode) BotManager.EndMap();
loopv(players) zapplayer(players[i]);
@@ -239,7 +263,7 @@ bool netmapstart() { senditemstoserver = true; return clienthost!=NULL; };
void initclientnet()
{
newname("unnamed");
ctf_team("cube");
changeteam("cube");
};
void sendpackettoserv(int chan, ENetPacket *packet)
+1 -1
View File
@@ -47,7 +47,7 @@ void renderplayer(playerent *d)
{
if(!d) return;
int team = rb_team_int(d->team);
int team = team_int(d->team);
s_sprintfd(mdl)("playermodels/%s/0%i", team==TEAM_CLA ? "terrorist" : "counterterrorist", 1 + max(0, min(d->skin, (team==TEAM_CLA ? 3 : 5))));
string vwep;
if(d->gunselect>=0 && d->gunselect<NUMGUNS) s_sprintf(vwep)("weapons/%s/world", hudgunnames[d->gunselect]);
+18 -12
View File
@@ -14,7 +14,8 @@ void mode(int n)
};
COMMAND(mode, ARG_1INT);
bool intermission = false;
bool intermission = false;
bool autoteambalance = false;
playerent *player1 = newplayerent(); // our client
vector<playerent *> players; // other clients
@@ -37,7 +38,7 @@ extern int dblend;
void setskin(playerent *pl, int skin)
{
if(!pl) return;
int maxskin = rb_team_int(pl->team) == TEAM_CLA ? 3 : 5;
int maxskin = team_int(pl->team) == TEAM_CLA ? 3 : 5;
pl->skin = max(0, skin % (maxskin+1));
};
@@ -93,9 +94,9 @@ void freebotent(botent *d)
};
};
void ctf_death() // EDIT: AH
void dropctfflags()
{
int flag = rb_opposite(rb_team_int(player1->team));
int flag = team_opposite(team_int(player1->team));
flaginfo &f = flaginfos[flag];
if(f.state==CTFF_STOLEN && f.actor==player1)
{
@@ -324,7 +325,7 @@ int findplayerstart(playerent *d)
{
int r = fixspawn-->0 ? 4 : rnd(10)+1;
if(m_teammode) loopi(r) spawncycle = findentity(PLAYERSTART, spawncycle+1, rb_team_int(d->team));
if(m_teammode) loopi(r) spawncycle = findentity(PLAYERSTART, spawncycle+1, team_int(d->team));
else if(m_arena) loopi(r) spawncycle = findentity(PLAYERSTART, spawncycle+1, 100);
else
{
@@ -481,7 +482,7 @@ void selfdamage(int damage, int actor, playerent *act, bool gib, playerent *pl)
};
if(pl==player1)
{
if(m_ctf) ctf_death();
if(m_ctf) dropctfflags();
showscores(true);
setscope(false);
addmsg(gib ? SV_GIBDIED : SV_DIED, "ri", actor);
@@ -616,7 +617,7 @@ void flagaction(int flag, int action)
{
flaginfo &f = flaginfos[flag];
if(!f.actor) return;
bool ownflag = flag == rb_team_int(player1->team);
bool ownflag = flag == team_int(player1->team);
switch(action)
{
case SV_FLAGPICKUP:
@@ -681,6 +682,15 @@ void mastercommand(int cmd, int a) // one of MCMD_*
void kick(int player) { mastercommand(MCMD_KICK, player); };
void ban(int player) { mastercommand(MCMD_BAN, player); };
void removebans() { mastercommand(MCMD_REMBANS, 0); };
void autoteam(int enable) { mastercommand(MCMD_AUTOTEAM, enable); };
void shuffle() { mastercommand(MCMD_SHUFFLETEAMS, 0); };
COMMAND(setmaster, ARG_2STR);
COMMAND(kick, ARG_1INT);
COMMAND(ban, ARG_1INT);
COMMAND(removebans, ARG_NONE);
COMMAND(autoteam, ARG_1INT);
COMMAND(shuffle, ARG_NONE);
struct mline { string cmd; };
static vector<mline> mlines;
@@ -702,8 +712,4 @@ void showmastermenu(int m) // 0=kick, 1=ban
menuset(menu);
};
COMMAND(setmaster, ARG_2STR);
COMMAND(kick, ARG_1INT);
COMMAND(ban, ARG_1INT);
COMMAND(removebans, ARG_NONE);
COMMAND(showmastermenu, ARG_1INT);
COMMAND(showmastermenu, ARG_1INT);
+13
View File
@@ -479,6 +479,19 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
};
break;
};
case SV_FORCETEAM:
{
changeteam(team_string(getint(p)));
break;
};
case SV_AUTOTEAM:
{
autoteambalance = getint(p) == 1;
conoutf("autoteam is %s", autoteambalance ? "enabled" : "disabled");
break;
};
/* demo recording compat */
case SV_PING:
+4 -4
View File
@@ -44,12 +44,12 @@ void renderentities()
if(f.state==CTFF_STOLEN && f.actor)
{
if(f.actor == player1) continue;
s_sprintfd(path)("pickups/flags/small_%s", rb_team_string(e.attr2));
s_sprintfd(path)("pickups/flags/small_%s", team_string(e.attr2));
rendermodel(path, ANIM_FLAG|ANIM_START, 0, 1.1f, f.actor->o.x, f.actor->o.z+0.3f+(sinf(lastmillis/100.0f)+1)/10, f.actor->o.y, lastmillis/2.5f, 0, 120.0f);
}
else
{
s_sprintfd(path)("pickups/flags/%s", rb_team_string(e.attr2));
s_sprintfd(path)("pickups/flags/%s", team_string(e.attr2));
rendermodel(path, ANIM_FLAG|ANIM_LOOP, 0, 4, e.x, f.state==CTFF_INBASE ? (float)S(e.x, e.y)->floor : e.z, e.y, (float)((e.attr1+7)-(e.attr1+7)%15), 0, 120.0f);
};
}
@@ -192,7 +192,7 @@ void pickup(int n, playerent *d)
if(d->type!=ENT_PLAYER) break;
int team = ents[n].attr2;
flaginfo &f = flaginfos[team];
bool isownflag = team == rb_team_int(d->team);
bool isownflag = team == team_int(d->team);
if(f.state == CTFF_STOLEN) break;
else if(isownflag && f.state == CTFF_DROPPED)
{
@@ -207,7 +207,7 @@ void pickup(int n, playerent *d)
f.state = CTFF_STOLEN;
f.pick_ack = false;
}
else if(isownflag && f.state == CTFF_INBASE && flaginfos[rb_opposite(team)].state == CTFF_STOLEN && flaginfos[rb_opposite(team)].actor == d) addmsg(SV_FLAGSCORE, "ri", rb_opposite(team));
else if(isownflag && f.state == CTFF_INBASE && flaginfos[team_opposite(team)].state == CTFF_STOLEN && flaginfos[team_opposite(team)].actor == d) addmsg(SV_FLAGSCORE, "ri", team_opposite(team));
break;
};
};
+3 -3
View File
@@ -35,9 +35,9 @@ enum { GUN_KNIFE = 0, GUN_PISTOL, GUN_SHOTGUN, GUN_SUBGUN, GUN_SNIPER, GUN_ASSAU
#define TEAM_CLA 0 //
#define TEAM_RVSF 1 //
// rb means red/blue
#define rb_team_string(t) ((t) ? "RVSF" : "CLA")
#define rb_team_int(t) (strcmp((t), "CLA") == 0 ? TEAM_CLA : TEAM_RVSF)
#define rb_opposite(o) ((o) == TEAM_CLA ? TEAM_RVSF : TEAM_CLA)
#define team_string(t) ((t) ? "RVSF" : "CLA")
#define team_int(t) (strcmp((t), "CLA") == 0 ? TEAM_CLA : TEAM_RVSF)
#define team_opposite(o) ((o) == TEAM_CLA ? TEAM_RVSF : TEAM_CLA)
struct itemstat { int add, start, max, sound; };
// End add
+2 -1
View File
@@ -19,11 +19,12 @@ enum
SV_MODELSKIN,
SV_FLAGPICKUP, SV_FLAGDROP, SV_FLAGRETURN, SV_FLAGSCORE, SV_FLAGINFO, SV_FLAGS, //EDIT: AH
SV_SETMASTER, SV_SETMASTERLOGIN, SV_MASTERINFO, SV_MASTERCMD,
SV_FORCETEAM, SV_AUTOTEAM,
SV_PWD,
SV_CLIENT,
};
enum { MCMD_KICK = 0, MCMD_BAN, MCMD_REMBANS, MCMD_MASTERMODE };
enum { MCMD_KICK = 0, MCMD_BAN, MCMD_REMBANS, MCMD_MASTERMODE, MCMD_AUTOTEAM, MCMD_SHUFFLETEAMS };
#define DMF 16.0f
#define DAF 1.0f
+4 -2
View File
@@ -86,11 +86,13 @@ extern void initclientnet();
extern bool netmapstart();
extern int getclientnum();
extern void changemapserv(char *name, int mode);
extern void changeteam(char *name);
extern void newteam(char *name);
extern bool sendpwd;
// clientgame
extern flaginfo flaginfos[2];
extern bool autoteambalance;
extern void mousemove(int dx, int dy);
extern void updateworld(int curtime, int lastmillis);
extern void startmap(char *name);
@@ -108,8 +110,8 @@ extern playerent *getclient(int cn);
extern playerent *newclient(int cn);
extern void timeupdate(int timeremain);
extern void fixcamerarange(physent *cam = camera1);
extern void respawnself(); // EDIT: AH
extern void ctf_death();
extern void respawnself();
extern void dropctfflags();
extern void setskin(playerent *pl, int skin);
//game mode extras
extern void arenarespawn();
+3 -3
View File
@@ -447,11 +447,11 @@ void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwat
if(flaginfos[TEAM_RVSF].state == CTFF_INBASE) glDisable(GL_BLEND); else glEnable(GL_BLEND);
drawicon(0, 0, 1820, 1650, flagtex, 1.0f/4.0f);
glDisable(GL_BLEND);
drawicon((float)(rb_team_int(player1->team)*64*ctf_scl), (float)(64*ctf_scl), VIRTW-128-10, 10, flagtex, 1.0/4.0); // shows which team you are
drawicon((float)(team_int(player1->team)*64*ctf_scl), (float)(64*ctf_scl), VIRTW-128-10, 10, flagtex, 1.0/4.0); // shows which team you are
glPopMatrix();
// big flag icon
flaginfo &f = flaginfos[rb_opposite(rb_team_int(player1->team))];
flaginfo &f = flaginfos[team_opposite(team_int(player1->team))];
if(f.state==CTFF_STOLEN && f.actor == player1 && f.pick_ack )
{
glPushMatrix();
@@ -459,7 +459,7 @@ void gl_drawhud(int w, int h, int curfps, int nquads, int curvert, bool underwat
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glColor4f(1.0f, 1.0f, 1.0f, (sinf(lastmillis / 100.0f) + 1.0f) / 2.0f);
glEnable(GL_BLEND);
drawicon((float)(rb_opposite(rb_team_int(player1->team))*128*ctf_scl),(float)(128*ctf_scl), 1065, VIRTH/2/3*2, flagtex, 1.0/2.0);
drawicon((float)(team_opposite(team_int(player1->team))*128*ctf_scl),(float)(128*ctf_scl), 1065, VIRTH/2/3*2, flagtex, 1.0/2.0);
glPopMatrix();
};
};
+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);
};
+1
View File
@@ -95,6 +95,7 @@ char msgsizesl[] = // size inclusive message token, 0 for variable
SV_MODELSKIN, 2,
SV_FLAGPICKUP, 2, SV_FLAGDROP, 2, SV_FLAGRETURN, 2, SV_FLAGSCORE, 2, SV_FLAGINFO, 0, SV_FLAGS, 2, // EDIT: AH
SV_SETMASTER, 2, SV_SETMASTERLOGIN, 0, SV_MASTERINFO, 2, SV_MASTERCMD, 3,
SV_FORCETEAM, 2, SV_AUTOTEAM, 2,
SV_PWD, 0,
SV_CLIENT, 0,
-1