*** empty log message ***
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@897 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
@@ -6,10 +6,9 @@
|
||||
ENetHost *clienthost = NULL;
|
||||
ENetPeer *curpeer = NULL, *connpeer = NULL;
|
||||
int connmillis = 0, connattempts = 0, discmillis = 0;
|
||||
int clientnum = -1; // our client id in the game
|
||||
bool c2sinit = false; // whether we need to tell the other clients our stats
|
||||
|
||||
int getclientnum() { return clientnum; }
|
||||
int getclientnum() { return player1 ? player1->clientnum : -1; }
|
||||
|
||||
bool multiplayer()
|
||||
{
|
||||
@@ -189,8 +188,8 @@ void disconnect(int onlyclean, int async)
|
||||
if(cleanup)
|
||||
{
|
||||
stop();
|
||||
clientnum = -1;
|
||||
c2sinit = false;
|
||||
player1->clientnum = -1;
|
||||
player1->lifesequence = 0;
|
||||
player1->ismaster = false;
|
||||
if(m_botmode) BotManager.EndMap();
|
||||
@@ -293,15 +292,15 @@ void c2skeepalive()
|
||||
|
||||
extern string masterpwd;
|
||||
|
||||
void c2sinfo(dynent *d) // send update to the server
|
||||
void c2sinfo(playerent *d) // send update to the server
|
||||
{
|
||||
if(clientnum<0) return; // we haven't had a welcome message from the server yet
|
||||
if(d->clientnum<0) return; // we haven't had a welcome message from the server yet
|
||||
if(lastmillis-lastupdate<40) return; // don't update faster than 25fps
|
||||
ENetPacket *packet = enet_packet_create(NULL, 100, 0);
|
||||
ucharbuf q(packet->data, packet->dataLength);
|
||||
|
||||
putint(q, SV_POS);
|
||||
putint(q, clientnum);
|
||||
putint(q, d->clientnum);
|
||||
putuint(q, (int)(d->o.x*DMF)); // quantize coordinates to 1/16th of a cube, between 1 and 3 bytes
|
||||
putuint(q, (int)(d->o.y*DMF));
|
||||
putuint(q, (int)(d->o.z*DMF));
|
||||
|
||||
@@ -64,11 +64,11 @@ void renderclients()
|
||||
|
||||
// creation of scoreboard pseudo-menu
|
||||
|
||||
void *scoremenu = NULL, *ctfmenu = NULL;
|
||||
void *scoremenu = NULL, *teammenu = NULL, *ctfmenu = NULL;
|
||||
|
||||
void showscores(bool on)
|
||||
{
|
||||
menuset(on ? (m_ctf ? ctfmenu : scoremenu) : NULL);
|
||||
menuset(on ? (m_ctf ? ctfmenu : (m_teammode ? teammenu : scoremenu)) : NULL);
|
||||
}
|
||||
|
||||
struct sline { string s; };
|
||||
@@ -80,9 +80,11 @@ void renderscore(void *menu, playerent *d, int cn)
|
||||
if(d->ismaster) status = "\f0";
|
||||
if(d->state==CS_DEAD) status = "\f4";
|
||||
s_sprintfd(lag)("%d", d->plag);
|
||||
if(m_ctf) s_sprintf(scorelines.add().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 s_sprintf(scorelines.add().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);
|
||||
menumanual(menu, scorelines.length()-1, scorelines.last().s);
|
||||
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);
|
||||
menumanual(menu, scorelines.length()-1, s);
|
||||
}
|
||||
|
||||
struct teamscore
|
||||
@@ -102,6 +104,15 @@ static int teamscorecmp(const teamscore *x, const teamscore *y)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int scorecmp(const playerent **x, const playerent **y)
|
||||
{
|
||||
if((*x)->flagscore > (*y)->flagscore) return -1;
|
||||
if((*x)->flagscore < (*y)->flagscore) return 1;
|
||||
if((*x)->frags > (*y)->frags) return -1;
|
||||
if((*x)->frags < (*y)->frags) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
vector<teamscore> teamscores;
|
||||
|
||||
void addteamscore(playerent *d)
|
||||
@@ -118,12 +129,15 @@ void addteamscore(playerent *d)
|
||||
|
||||
void renderscores()
|
||||
{
|
||||
void *menu = m_ctf ? ctfmenu : scoremenu;
|
||||
void *menu = m_ctf ? ctfmenu : (m_teammode ? teammenu : scoremenu);
|
||||
scorelines.setsize(0);
|
||||
if(!demoplayback) renderscore(menu, player1, getclientnum());
|
||||
loopv(players) if(players[i]) renderscore(menu, players[i], i);
|
||||
|
||||
sortmenu(menu, 0, scorelines.length());
|
||||
vector<playerent *> scores;
|
||||
if(!demoplayback) scores.add(player1);
|
||||
loopv(players) if(players[i]) scores.add(players[i]);
|
||||
scores.sort(scorecmp);
|
||||
loopv(scores) renderscore(menu, scores[i], scores[i]->clientnum);
|
||||
|
||||
if(m_teammode)
|
||||
{
|
||||
menumanual(menu, scorelines.length(), "");
|
||||
|
||||
@@ -50,7 +50,6 @@ void deathstate(playerent *pl)
|
||||
pl->lastaction = lastmillis;
|
||||
pl->attacking = false;
|
||||
pl->state = CS_DEAD;
|
||||
pl->oldpitch = pl->pitch;
|
||||
pl->pitch = 0;
|
||||
pl->roll = 60;
|
||||
pl->strafe = 0;
|
||||
@@ -532,7 +531,12 @@ playerent *newclient(int cn) // ensure valid entity
|
||||
return NULL;
|
||||
}
|
||||
while(cn>=players.length()) players.add(NULL);
|
||||
return players[cn] ? players[cn] : (players[cn] = newplayerent());
|
||||
playerent *d = players[cn];
|
||||
if(d) return d;
|
||||
d = newplayerent();
|
||||
players[cn] = d;
|
||||
d->clientnum = cn;
|
||||
return d;
|
||||
}
|
||||
|
||||
playerent *getclient(int cn) // ensure valid entity
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
|
||||
#include "cube.h"
|
||||
|
||||
extern int clientnum;
|
||||
extern bool c2sinit, senditemstoserver;
|
||||
extern string clientpassword;
|
||||
|
||||
@@ -115,7 +114,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
|
||||
disconnect();
|
||||
return;
|
||||
}
|
||||
clientnum = mycn; // we are now fully connected
|
||||
player1->clientnum = mycn; // we are now fully connected
|
||||
joining = getint(p);
|
||||
if(getint(p) > 0) conoutf("INFO: this server is password protected");
|
||||
if(joining<0 && getclientmap()[0]) changemap(getclientmap()); // we are the first client on this server, set map
|
||||
@@ -234,7 +233,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
|
||||
int target = getint(p);
|
||||
int damage = getint(p);
|
||||
int ls = getint(p);
|
||||
if(target==clientnum) { if(ls==player1->lifesequence) selfdamage(damage, cn, d, gib); }
|
||||
if(target==getclientnum()) { if(ls==player1->lifesequence) selfdamage(damage, cn, d, gib); }
|
||||
else
|
||||
{
|
||||
playerent *victim = getclient(target);
|
||||
@@ -262,7 +261,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
|
||||
conoutf("\f2%s suicided", d->name);
|
||||
act = d;
|
||||
}
|
||||
else if(actor==clientnum)
|
||||
else if(actor==getclientnum())
|
||||
{
|
||||
act = player1;
|
||||
int frags;
|
||||
@@ -313,7 +312,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
|
||||
case SV_RESUME:
|
||||
{
|
||||
int cn = getint(p), frags = getint(p), flags = getint(p);
|
||||
playerent *d = cn==clientnum ? player1 : newclient(cn);
|
||||
playerent *d = cn==getclientnum() ? player1 : newclient(cn);
|
||||
if(d)
|
||||
{
|
||||
d->frags = frags;
|
||||
|
||||
+2
-3
@@ -144,8 +144,7 @@ struct poshist
|
||||
|
||||
struct playerent : dynent
|
||||
{
|
||||
float oldpitch;
|
||||
int lastupdate, plag, ping;
|
||||
int clientnum, lastupdate, plag, ping;
|
||||
int lifesequence; // sequence id for each respawn, used in damage test
|
||||
int frags, flagscore;
|
||||
int health, armour;
|
||||
@@ -171,7 +170,7 @@ struct playerent : dynent
|
||||
|
||||
poshist history; // Previous stored locations of this player
|
||||
|
||||
playerent() : plag(0), ping(0), lifesequence(0), frags(0), flagscore(0), lastpain(0), lastteamkill(0), ismaster(false),
|
||||
playerent() : clientnum(-1), plag(0), ping(0), lifesequence(0), frags(0), flagscore(0), lastpain(0), lastteamkill(0), ismaster(false),
|
||||
shots(0), reloading(false), primary(GUN_ASSAULT), nextprimary(GUN_ASSAULT),
|
||||
skin(0), nextskin(0), inhandnade(NULL)
|
||||
{
|
||||
|
||||
+3
-2
@@ -300,8 +300,9 @@ int main(int argc, char **argv)
|
||||
initsound();
|
||||
|
||||
log("cfg");
|
||||
extern void *scoremenu, *servmenu, *ctfmenu, *kickmenu, *banmenu;
|
||||
scoremenu = addmenu("frags\tpj\tping\tteam\tname\tcn", false, false, renderscores);
|
||||
extern void *scoremenu, *teammenu, *servmenu, *ctfmenu, *kickmenu, *banmenu;
|
||||
scoremenu = addmenu("frags\tpj\tping\tname\tcn", false, false, renderscores);
|
||||
teammenu = addmenu("frags\tpj\tping\tteam\tname\tcn", false, false, renderscores);
|
||||
servmenu = addmenu("ping\tplr\tserver", true, false, refreshservers);
|
||||
ctfmenu = addmenu("flags\tfrags\tpj\tping\tteam\tname\tcn", false, false, renderscores);
|
||||
kickmenu = addmenu("kick player", true, false);
|
||||
|
||||
@@ -41,15 +41,6 @@ void showmenu(char *name)
|
||||
menuset(m);
|
||||
}
|
||||
|
||||
int menucompare(mitem *a, mitem *b)
|
||||
{
|
||||
int x = atoi(a->text);
|
||||
int y = atoi(b->text);
|
||||
if(x>y) return -1;
|
||||
if(x<y) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void drawarrow(int dir, int x, int y, int size, float r = 1.0f, float g = 1.0f, float b = 1.0f)
|
||||
{
|
||||
glDisable(GL_BLEND);
|
||||
@@ -177,12 +168,6 @@ void menumanual(void *menu, int n, char *text, char *action)
|
||||
mitem.hoveraction = NULL;
|
||||
}
|
||||
|
||||
void sortmenu(void *menu, int start, int num)
|
||||
{
|
||||
gmenu &m = *(gmenu *)menu;
|
||||
m.items.sort(menucompare, start, num);
|
||||
}
|
||||
|
||||
void menuitem(char *text, char *action, char *hoveraction)
|
||||
{
|
||||
if(!lastmenu) return;
|
||||
|
||||
+1
-2
@@ -28,7 +28,6 @@ extern void conoutf(const char *s, ...);
|
||||
// menus
|
||||
extern bool rendermenu();
|
||||
extern void menumanual(void *menu, int n, char *text, char *action=NULL);
|
||||
extern void sortmenu(void *menu, int start, int num);
|
||||
extern bool menukey(int code, bool isdown);
|
||||
extern void *addmenu(char *name, bool allowinput = true, bool hastitle = true, void (__cdecl *refreshfunc)() = NULL);
|
||||
extern void rendermenumdl();
|
||||
@@ -82,7 +81,7 @@ extern bool multiplayer();
|
||||
extern bool allowedittoggle();
|
||||
extern void sendpackettoserv(int chan, struct _ENetPacket *packet);
|
||||
extern void gets2c();
|
||||
extern void c2sinfo(dynent *d);
|
||||
extern void c2sinfo(playerent *d);
|
||||
extern void c2skeepalive();
|
||||
extern void neterr(char *s);
|
||||
extern void initclientnet();
|
||||
|
||||
@@ -357,7 +357,7 @@ void drawradarent(float x, float y, float yaw, int col, int row, float iconsize,
|
||||
glTranslatef(iconsize/2, iconsize/2, 0);
|
||||
glScalef(1/2.0f, 1/2.0f, 1/2.0f);
|
||||
s_sprintfdv(lbl, label);
|
||||
draw_text(lbl, x*2, y*2);
|
||||
draw_text(lbl, (int)(x*2), (int)(y*2));
|
||||
glDisable(GL_BLEND);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user