checking if file system has space to write (linux only), reverting the protocol to make it compatible with 1.1.0.1, tagging AUTH as WiP, tunning the player/bot collision... preparing to release patch

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5656 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Rafael Barreto
2010-08-19 19:46:56 +00:00
parent d1f4c1fd83
commit 01c24f0228
9 changed files with 59 additions and 18 deletions
+2
View File
@@ -571,6 +571,7 @@ void gets2c() // get updates from the server
}
// for AUTH:
/*
vector<authkey *> authkeys;
VARP(autoauth, 0, 1, 1);
@@ -631,6 +632,7 @@ ICOMMANDF(hasauthkey, ARG_2EST, (char *name, char *desc) { return (_hasauthkey(n
COMMAND(genauthkey, ARG_1STR);
COMMAND(saveauthkeys, ARG_NONE);
ICOMMANDF(auth, ARG_1EST, (char *desc) { return tryauth(desc); });
*/
// :for AUTH
// sendmap/getmap commands, should be replaced by more intuitive map downloading
+3 -1
View File
@@ -631,7 +631,8 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
break;
}
// for AUTH:
// for AUTH: WIP
/*
case SV_AUTHREQ:
{
extern int autoauth;
@@ -655,6 +656,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
}
break;
}
*/
// :for AUTH
case SV_GIBDAMAGE:
+2 -2
View File
@@ -527,8 +527,8 @@ void moveplayer(physent *pl, int moveres, bool local, int curtime)
if(pl->type!=ENT_BOUNCE && hitplayer)
{
vec dr(hitplayer->o.x-pl->o.x,hitplayer->o.y-pl->o.y,0);
float dist = dr.ufmagxy(),
push = (dist > 0.1f ? dr.dotxy(d)*1.1f/dist : dr.dotxy(d) * 11.0f);
float invdist = ufInvSqrt(dr.sqrxy()),
push = (invdist < 10.0f ? dr.dotxy(d)*1.1f*invdist : dr.dotxy(d) * 11.0f);
pl->o.x -= f*d.x*push;
pl->o.y -= f*d.y*push;
+1 -1
View File
@@ -319,7 +319,7 @@ static const int msgsizes[] = // size inclusive message token, 0 f
{
SV_SERVINFO, 5, SV_WELCOME, 2, SV_INITCLIENT, 0, SV_POS, 0, SV_POSC, 0, SV_POSN, 0, SV_TEXT, 0, SV_TEAMTEXT, 0, SV_TEXTME, 0, SV_TEAMTEXTME, 0,
SV_SOUND, 2, SV_VOICECOM, 2, SV_VOICECOMTEAM, 2, SV_CDIS, 2,
SV_SHOOT, 0, SV_EXPLODE, 0, SV_SUICIDE, 1, SV_AKIMBO, 2, SV_RELOAD, 3, SV_AUTHREQ, 0, SV_AUTHTRY, 0, SV_AUTHANS, 0, SV_AUTHCHAL, 0,
SV_SHOOT, 0, SV_EXPLODE, 0, SV_SUICIDE, 1, SV_AKIMBO, 2, SV_RELOAD, 3, SV_AUTHT, 0, /*SV_AUTHREQ, 0, SV_AUTHTRY, 0, SV_AUTHANS, 0, SV_AUTHCHAL, 0,*/
SV_GIBDIED, 5, SV_DIED, 5, SV_GIBDAMAGE, 6, SV_DAMAGE, 6, SV_HITPUSH, 6, SV_SHOTFX, 6, SV_THROWNADE, 8,
SV_TRYSPAWN, 1, SV_SPAWNSTATE, 23, SV_SPAWN, 3, SV_SPAWNDENY, 2, SV_FORCEDEATH, 2, SV_RESUME, 0,
SV_DISCSCORES, 0, SV_TIMEUP, 2, SV_EDITENT, 10, SV_ITEMACC, 2,
+2 -2
View File
@@ -5,7 +5,7 @@
#define CUBE_SERVINFO_PORT_LAN 28762
#define CUBE_SERVINFO_PORT(serverport) (serverport+1)
#define CUBE_SERVINFO_TO_SERV_PORT(servinfoport) (servinfoport-1)
#define PROTOCOL_VERSION 1131 // bump when protocol changes (use negative numbers for mods!)
#define PROTOCOL_VERSION 1130 // bump when protocol changes (use negative numbers for mods!)
#define DEMO_VERSION 2 // bump when demo format changes
#define DEMO_MAGIC "ASSAULTCUBE_DEMO"
#define DEMO_MINTIME 10000 // don't keep demo recordings with less than 10 seconds
@@ -20,7 +20,7 @@ enum
{
SV_SERVINFO = 0, SV_WELCOME, SV_INITCLIENT, SV_POS, SV_POSC, SV_POSN, SV_TEXT, SV_TEAMTEXT, SV_TEXTME, SV_TEAMTEXTME,
SV_SOUND, SV_VOICECOM, SV_VOICECOMTEAM, SV_CDIS,
SV_SHOOT, SV_EXPLODE, SV_SUICIDE, SV_AKIMBO, SV_RELOAD, SV_AUTHREQ, SV_AUTHTRY, SV_AUTHANS, SV_AUTHCHAL,
SV_SHOOT, SV_EXPLODE, SV_SUICIDE, SV_AKIMBO, SV_RELOAD, SV_AUTHT, /*SV_AUTHREQ, SV_AUTHTRY, SV_AUTHANS, SV_AUTHCHAL,*/
SV_GIBDIED, SV_DIED, SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX, SV_THROWNADE,
SV_TRYSPAWN, SV_SPAWNSTATE, SV_SPAWN, SV_SPAWNDENY, SV_FORCEDEATH, SV_RESUME,
SV_DISCSCORES, SV_TIMEUP, SV_EDITENT, SV_ITEMACC,
+10 -5
View File
@@ -184,7 +184,9 @@ void renderscore(playerent *d)
}
}
void renderteamscore(teamscore *t)
int totalplayers = 0;
int renderteamscore(teamscore *t)
{
if(!scorelines.empty()) // space between teams
{
@@ -192,7 +194,8 @@ void renderteamscore(teamscore *t)
space.s[0] = 0;
}
sline &line = scorelines.add();
defformatstring(plrs)("(%d %s)", t->teammembers.length(), t->teammembers.length() == 1 ? "player" : "players");
int n = t->teammembers.length();
defformatstring(plrs)("(%d %s)", n, n == 1 ? "player" : "players");
// float ratio = SCORERATIO(t->frags, t->deaths);
switch(orderscorecolumns)
{
@@ -213,6 +216,7 @@ void renderteamscore(teamscore *t)
static color teamcolors[2] = { color(1.0f, 0, 0, 0.2f), color(0, 0, 1.0f, 0.2f) };
line.bgcolor = &teamcolors[team_base(t->team)];
loopv(t->teammembers) renderscore(t->teammembers[i]);
return n;
}
extern bool watchingdemo;
@@ -227,7 +231,8 @@ void renderscores(void *menu, bool init)
vector<playerent *> scores;
if(!watchingdemo) scores.add(player1);
loopv(players) if(players[i]) scores.add(players[i]);
totalplayers = 1;
loopv(players) if(players[i]) { scores.add(players[i]); totalplayers++; }
scores.sort(scorecmp);
discscores.sort(discscorecmp);
@@ -356,8 +361,8 @@ const char *asciiscores(bool destjpg)
if(s)
{
string sdesc;
filtertext(sdesc, s->sdesc, 1);
formatstring(text)(", %s:%d %s", s->name, s->port, sdesc);
filtertext(sdesc, s->sdesc, 1);
formatstring(text)(", %s:%d %s", s->name, s->port, sdesc);
addstr(buf, text);
}
}
+19 -6
View File
@@ -463,7 +463,7 @@ void enddemorecord()
demofile &d = demofiles.add();
formatstring(d.info)("%s: %s, %s, %.2f%s", asctime(), modestr(gamemode), smapname, len > 1024*1024 ? len/(1024*1024.f) : len/1024.0f, len > 1024*1024 ? "MB" : "kB");
//formatstring(d.file)("%s_%s_%s", timestring(), behindpath(smapname), modestr(gamemode, true)); // 20100522_10.08.48_ac_mines_DM.dmo
formatstring(d.file)( "%s_%s_%s", modestr(gamemode, true), behindpath(smapname), timestring( true, "%Y.%m.%d_%H%M")); // DM_ac_mines.2010.05.22_1008.dmo
formatstring(d.file)( "%s_%s_%s", modestr(gamemode, true), behindpath(smapname), timestring( true, "%Y.%m.%d_%H%M")); // DM_ac_mines.2010.05.22_1008.dmo
if(mr) { concatformatstring(d.info, ", %d mr", mr); concatformatstring(d.file, "_%dmr", mr); }
defformatstring(msg)("Demo \"%s\" recorded\nPress F10 to download it from the server..", d.info);
sendservmsg(msg);
@@ -1964,7 +1964,7 @@ struct voteinfo
if( ( servmillis - callmillis > 10*1000 && stats[VOTE_YES] - stats[VOTE_NO] > 0.34f*total && totalclients > 4 ) ||
stats[VOTE_YES] > requiredcount*total || admin || adminvote == VOTE_YES )
end(VOTE_YES);
else if(forceend || !valid_client(owner) || stats[VOTE_NO] > requiredcount * total ||
else if(forceend || !valid_client(owner) || (boot && !valid_client(boot)) ||
stats[VOTE_NO] >= stats[VOTE_YES]+stats[VOTE_NEUTRAL] || adminvote == VOTE_NO)
end(VOTE_NO);
else return;
@@ -2181,7 +2181,8 @@ void disconnect_client(int n, int reason)
if(*scoresaved && mastermode == MM_MATCH) senddisconnectedscores(-1);
}
// for AUTH:
// for AUTH: WIP
/*
client *findauth(uint id)
{
loopv(clients) if(clients[i]->authreq == id) return clients[i];
@@ -2239,6 +2240,7 @@ void answerchallenge(client *cl, uint id, char *val)
sendf(cl->clientnum, 1, "ris", SV_SERVMSG, "not connected to authentication server");
}
}
*/
// :for AUTH
void sendwhois(int sender, int cn)
@@ -2911,6 +2913,7 @@ void process(ENetPacket *packet, int sender, int chan)
}
// for AUTH:
/*
case SV_AUTHTRY:
{
string desc, name;
@@ -2929,6 +2932,15 @@ void process(ENetPacket *packet, int sender, int chan)
if(!desc[0]) answerchallenge(cl, id, ans);
break;
}
*/
case SV_AUTHT:
{
/* int n = getint(p);
loopi(n) getint(p);*/
if (cl) disconnect_client(cl->clientnum, DISC_TAGT); // remove this in the future, when auth is complete
break;
}
// :for AUTH
case SV_PING:
@@ -3828,12 +3840,13 @@ void localconnect()
void processmasterinput(const char *cmd, int cmdlen, const char *args)
{
uint id;
// AUTH WiP
// uint id;
string val;
if(sscanf(cmd, "failauth %u", &id) == 1) authfailed(id);
/* if(sscanf(cmd, "failauth %u", &id) == 1) authfailed(id);
else if(sscanf(cmd, "succauth %u", &id) == 1) authsucceeded(id);
else if(sscanf(cmd, "chalauth %u %s", &id, val) == 2) authchallenged(id, val);
else if(!strncmp(cmd, "cleargbans", cmdlen)) cleargbans();
else*/ if(!strncmp(cmd, "cleargbans", cmdlen)) cleargbans();
else if(sscanf(cmd, "addgban %s", val) == 1) addgban(val);
}
+1 -1
View File
@@ -405,7 +405,7 @@ const char *messagenames[SV_NUM] =
{
"SV_SERVINFO", "SV_WELCOME", "SV_INITCLIENT", "SV_POS", "SV_POSC", "SV_POSN", "SV_TEXT", "SV_TEAMTEXT", "SV_TEXTME", "SV_TEAMTEXTME",
"SV_SOUND", "SV_VOICECOM", "SV_VOICECOMTEAM", "SV_CDIS",
"SV_SHOOT", "SV_EXPLODE", "SV_SUICIDE", "SV_AKIMBO", "SV_RELOAD", "SV_AUTHREQ", "SV_AUTHTRY", "SV_AUTHANS", "SV_AUTHCHAL",
"SV_SHOOT", "SV_EXPLODE", "SV_SUICIDE", "SV_AKIMBO", "SV_RELOAD", "SV_AUTHT", /*"SV_AUTHREQ", "SV_AUTHTRY", "SV_AUTHANS", "SV_AUTHCHAL",*/
"SV_GIBDIED", "SV_DIED", "SV_GIBDAMAGE", "SV_DAMAGE", "SV_HITPUSH", "SV_SHOTFX", "SV_THROWNADE",
"SV_TRYSPAWN", "SV_SPAWNSTATE", "SV_SPAWN", "SV_SPAWNDENY", "SV_FORCEDEATH", "SV_RESUME",
"SV_DISCSCORES", "SV_TIMEUP", "SV_EDITENT", "SV_ITEMACC",
+19
View File
@@ -360,9 +360,16 @@ bool stream::getline(char *str, int len)
return true;
}
#ifdef __linux__
#include <sys/statvfs.h>
#define MINFSSIZE 50000000 // 50MB
#endif
struct filestream : stream
{
FILE *file;
u_long f_frsize;
fsblkcnt_t f_bavail;
filestream() : file(NULL) {}
~filestream() { close(); }
@@ -371,6 +378,18 @@ struct filestream : stream
{
if(file) return false;
file = fopen(name, mode);
#ifdef __linux__
struct statvfs buf;
if(file && strchr(mode,'w'))
{
int fail = fstatvfs(fileno(file), &buf);
if (fail || buf.f_frsize * (buf.f_bavail / 1000) < MINFSSIZE)
{
close();
return false;
}
}
#endif
return file!=NULL;
}