version 1.1.0.3 (protocol update), inclusion of the auth things, server vote fixes, client side warning about version updates

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5671 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Rafael Barreto
2010-08-22 19:17:09 +00:00
parent 365ccbf2b3
commit 0c0cc2c97c
8 changed files with 44 additions and 56 deletions
+9 -2
View File
@@ -278,6 +278,13 @@ COMMANDN(disconnect, trydisconnect, ARG_NONE);
COMMAND(whereami, ARG_NONE);
COMMAND(go_to, ARG_2STR);
void current_version(char *text)
{
int version = atoi(text);
if (version < AC_VERSION) conoutf("UPDATE YOUR CLIENT\ngo to %s for more information",AC_MASTER_URI);
}
COMMAND(current_version, ARG_1STR);
void cleanupclient()
{
abortconnect();
@@ -571,7 +578,7 @@ void gets2c() // get updates from the server
}
// for AUTH:
/*
vector<authkey *> authkeys;
VARP(autoauth, 0, 1, 1);
@@ -632,7 +639,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
+2 -25
View File
@@ -632,7 +632,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
}
// for AUTH: WIP
/*
case SV_AUTHREQ:
{
extern int autoauth;
@@ -656,7 +656,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
}
break;
}
*/
// :for AUTH
case SV_GIBDAMAGE:
@@ -940,29 +940,6 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
break;
}
case SV_LMSITEM:
{
const char *names[] = { "no items", "pistol clips", "ammoboxes", "grenades", "health packs", "helmet", "armour", "akimbo" };
const int types[] = { NOTUSED, I_CLIPS, I_AMMO, I_GRENADE, I_HEALTH, I_HELMET, I_ARMOUR, I_AKIMBO }, types_n = sizeof(types) / sizeof(types[0]);
int cmd = getint(p), typ = getint(p);
int n = 0;
loopi(types_n) if(typ == types[i]) n = i;
switch(cmd)
{
case LMSITEM_CLEAR:
resetspawns(n > 0 ? typ : -1);
break;
case LMSITEM_ANNOUNCE:
hudoutf("%s will spawn%s", names[n], typ != NOTUSED ? " in 10 seconds" : ""); // sound?
break;
case LMSITEM_SPAWN:
loopv(ents) if(ents[i].type == typ) setspawn(i, true);
hudonlyf("\f3%s spawned", names[n]); // sound?
break;
}
break;
}
case SV_SPAWNDENY:
{
extern int spawnpermission;
+1 -1
View File
@@ -52,7 +52,7 @@ extern int verbose;
#include "protos.h" // external function decls
#define AC_VERSION 1102
#define AC_VERSION 1003
#define AC_MASTER_URI "assault.cubers.net"
#define AC_MASTER_PORT 28760
#define MAXCL 20
+2 -2
View File
@@ -329,8 +329,8 @@ public:
// just subtract damage here, can set death, etc. later in code calling this
int dodamage(int damage)
{
/* 4-level armor - continous approach: 20%, 28%, 36%, 44% */
int ad = damage * ( 1200 + 32 * armour ) / 10000; // let armour absorb when possible
/* 4-level armor - continous approach: 28%, 32%, 36%, 40% */
int ad = damage * ( 2400 + 16 * armour ) / 10000; // let armour absorb when possible
if(ad>armour) ad = armour;
armour -= ad;
damage -= ad;
+2 -2
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_AUTHT, 0, /*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,
@@ -329,7 +329,7 @@ static const int msgsizes[] = // size inclusive message token, 0 f
SV_SENDMAP, 0, SV_RECVMAP, 1, SV_REMOVEMAP, 0,
SV_SERVMSG, 0, SV_ITEMLIST, 0, SV_WEAPCHANGE, 2, SV_PRIMARYWEAP, 2,
SV_FLAGACTION, 3, SV_FLAGINFO, 0, SV_FLAGMSG, 0, SV_FLAGCNT, 3,
SV_ARENAWIN, 2, SV_LMSITEM, 3,
SV_ARENAWIN, 2,
SV_SETADMIN, 0, SV_SERVOPINFO, 3,
SV_CALLVOTE, 0, SV_CALLVOTESUC, 1, SV_CALLVOTEERR, 2, SV_VOTE, 2, SV_VOTERESULT, 2,
SV_SETTEAM, 3, SV_TEAMDENY, 2, SV_SERVERMODE, 2,
+3 -4
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 1130 // bump when protocol changes (use negative numbers for mods!)
#define PROTOCOL_VERSION 1131 // 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_AUTHT, /*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,
@@ -30,7 +30,7 @@ enum
SV_SENDMAP, SV_RECVMAP, SV_REMOVEMAP,
SV_SERVMSG, SV_ITEMLIST, SV_WEAPCHANGE, SV_PRIMARYWEAP,
SV_FLAGACTION, SV_FLAGINFO, SV_FLAGMSG, SV_FLAGCNT,
SV_ARENAWIN, SV_LMSITEM,
SV_ARENAWIN,
SV_SETADMIN, SV_SERVOPINFO,
SV_CALLVOTE, SV_CALLVOTESUC, SV_CALLVOTEERR, SV_VOTE, SV_VOTERESULT,
SV_SETTEAM, SV_TEAMDENY, SV_SERVERMODE,
@@ -58,7 +58,6 @@ enum { MM_OPEN = 0, MM_PRIVATE, MM_MATCH, MM_NUM }; enum { MM_MASK = 0x03 };
enum { AT_DISABLED = 0, AT_ENABLED = 1, AT_SHUFFLE = 2, AT_NUM };
enum { FA_PICKUP = 0, FA_STEAL, FA_DROP, FA_LOST, FA_RETURN, FA_SCORE, FA_NUM, FA_RESET };
enum { FM_PICKUP = 0, FM_DROP, FM_LOST, FM_RETURN, FM_SCORE, FM_KTFSCORE, FM_SCOREFAIL, FM_RESET, FM_NUM };
enum { LMSITEM_CLEAR = 0, LMSITEM_ANNOUNCE, LMSITEM_SPAWN, LMSITEM_NUM };
enum { FTR_INFO = 0, FTR_PLAYERWISH, FTR_AUTOTEAM, FTR_SILENTFORCE, FTR_NUM }; // forceteam-reasons
enum { SP_OK = 0, SP_REFILLMATCH, SP_OK_NUM, SP_WRONGMAP, SP_SPECT, SP_NUM }; // spawn permission (<OK_NUM && isspect: change to active team allowed)
enum { HE_COMBO, HE_COMBO2, HE_COMBO3, HE_COMBO4, HE_COMBO5, HE_TEAMWORK, HE_FLAGDEFENDED, HE_FLAGCOVERED, HE_COVER, HE_NUM };
+23 -18
View File
@@ -1925,8 +1925,9 @@ struct voteinfo
char text[MAXTRANS];
serveraction *action;
bool gonext;
enet_uint32 host;
voteinfo() : boot(0), owner(0), callmillis(0), result(VOTE_NEUTRAL), action(NULL), gonext(false) {}
voteinfo() : boot(0), owner(0), callmillis(0), result(VOTE_NEUTRAL), action(NULL), gonext(false), host(0) {}
~voteinfo() { delete action; }
void end(int result)
@@ -1961,13 +1962,16 @@ struct voteinfo
bool admin = clients[owner]->role==CR_ADMIN || (!isdedicated && clients[owner]->type==ST_LOCAL);
int total = stats[VOTE_NO]+stats[VOTE_YES]+stats[VOTE_NEUTRAL];
const float requiredcount = 0.51f;
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) || (boot && !valid_client(boot)) ||
stats[VOTE_NO] >= stats[VOTE_YES]+stats[VOTE_NEUTRAL] || adminvote == VOTE_NO)
end(VOTE_NO);
bool min_time = servmillis - callmillis > 10*1000;
#define yes_condition ((min_time && stats[VOTE_YES] - stats[VOTE_NO] > 0.34f*total && totalclients > 4) || stats[VOTE_YES] > requiredcount*total)
#define no_condition (forceend || !valid_client(owner) || stats[VOTE_NO] >= stats[VOTE_YES]+stats[VOTE_NEUTRAL] || adminvote == VOTE_NO)
#define boot_condition (!boot || (boot && valid_client(num) && clients[num]->peer->address.host == host))
if( (yes_condition || admin || adminvote == VOTE_YES) && boot_condition ) end(VOTE_YES);
else if( no_condition || (min_time && !boot_condition)) end(VOTE_NO);
else return;
#undef boot_condition
#undef no_condition
#undef yes_condition
}
};
@@ -2018,13 +2022,14 @@ bool scallvote(voteinfo *v, ENetPacket *msg) // true if a regular vote was calle
int area = isdedicated ? EE_DED_SERV : EE_LOCAL_SERV;
int error = -1;
client *c = clients[v->owner], *b = ( v->boot ? clients[cn2boot] : NULL );
v->host = v->boot ? b->peer->address.host : 0;
int time = servmillis - c->lastvotecall;
if ( c->nvotes > 0 && time > 4*60*1000 ) c->nvotes -= time/(4*60*1000);
if ( c->nvotes < 0 || c->role == CR_ADMIN ) c->nvotes = 0;
c->nvotes++;
if( !v || !v->isvalid() || (v->boot && !b) ) error = VOTEE_INVALID;
if( !v || !v->isvalid() || (v->boot && (!b || cn2boot == v->owner) ) ) error = VOTEE_INVALID;
else if( v->action->role > c->role ) error = VOTEE_PERMISSION;
else if( !(area & v->action->area) ) error = VOTEE_AREA;
else if( curvote && curvote->result==VOTE_NEUTRAL ) error = VOTEE_CUR;
@@ -2182,7 +2187,7 @@ void disconnect_client(int n, int reason)
}
// for AUTH: WIP
/*
client *findauth(uint id)
{
loopv(clients) if(clients[i]->authreq == id) return clients[i];
@@ -2240,7 +2245,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)
@@ -2416,11 +2421,11 @@ int checktype(int type, client *cl)
if(type < 0 || type >= SV_NUM) return -1;
// server only messages
static int servtypes[] = { SV_SERVINFO, SV_WELCOME, SV_INITCLIENT, SV_POSN, SV_CDIS, SV_GIBDIED, SV_DIED,
SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX,
SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX, SV_AUTHREQ, SV_AUTHCHAL,
SV_SPAWNSTATE, SV_SPAWNDENY, SV_FORCEDEATH, SV_RESUME,
SV_DISCSCORES, SV_TIMEUP, SV_ITEMACC, SV_MAPCHANGE, SV_ITEMSPAWN, SV_PONG,
SV_SERVMSG, SV_ITEMLIST, SV_FLAGINFO, SV_FLAGMSG, SV_FLAGCNT,
SV_ARENAWIN, SV_LMSITEM, SV_SERVOPINFO,
SV_ARENAWIN, SV_SERVOPINFO,
SV_CALLVOTESUC, SV_CALLVOTEERR, SV_VOTERESULT,
SV_SETTEAM, SV_TEAMDENY, SV_SERVERMODE, SV_WHOISINFO,
SV_SENDDEMOLIST, SV_SENDDEMO, SV_DEMOPLAYBACK,
@@ -2915,7 +2920,7 @@ void process(ENetPacket *packet, int sender, int chan)
}
// for AUTH:
/*
case SV_AUTHTRY:
{
string desc, name;
@@ -2934,13 +2939,13 @@ 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
// if (cl) disconnect_client(cl->clientnum, DISC_TAGT); // remove this in the future, when auth is complete
break;
}
// :for AUTH
@@ -3844,12 +3849,12 @@ void localconnect()
void processmasterinput(const char *cmd, int cmdlen, const char *args)
{
// AUTH WiP
// uint id;
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);
}
+2 -2
View File
@@ -407,7 +407,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_AUTHT", /*"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",
@@ -417,7 +417,7 @@ const char *messagenames[SV_NUM] =
"SV_SENDMAP", "SV_RECVMAP", "SV_REMOVEMAP",
"SV_SERVMSG", "SV_ITEMLIST", "SV_WEAPCHANGE", "SV_PRIMARYWEAP",
"SV_FLAGACTION", "SV_FLAGINFO", "SV_FLAGMSG", "SV_FLAGCNT",
"SV_ARENAWIN", "SV_LMSITEM",
"SV_ARENAWIN",
"SV_SETADMIN", "SV_SERVOPINFO",
"SV_CALLVOTE", "SV_CALLVOTESUC", "SV_CALLVOTEERR", "SV_VOTE", "SV_VOTERESULT",
"SV_SETTEAM", "SV_TEAMDENY", "SV_SERVERMODE",