reduced client-side maprot to a singleplayer maprot

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4563 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
ac_stef
2009-07-02 23:01:10 +00:00
parent 9c12bd01d5
commit e0bfc59ecf
10 changed files with 41 additions and 73 deletions
+3 -13
View File
@@ -33,6 +33,8 @@ extern int framesinmap;
char *getclientmap() { return clientmap; }
int getclientmode() { return gamemode; }
extern bool c2sinit, sendmapidenttoserver;
void setskin(playerent *pl, uint skin)
@@ -140,7 +142,6 @@ VARNP(skin_rvsf, nextskin_rvsf, 0, 0, 1000);
int curteam() { return player1->team; }
int currole() { return player1->clientrole; }
int curmode() { return gamemode; }
void curmap(int cleaned) { result(cleaned ? behindpath(getclientmap()) : getclientmap()); }
int curmodeattr(char *attr)
@@ -156,7 +157,7 @@ COMMANDN(team, newteam, ARG_1STR);
COMMANDN(name, newname, ARG_1STR);
COMMAND(curteam, ARG_IVAL);
COMMAND(currole, ARG_IVAL);
COMMAND(curmode, ARG_IVAL);
COMMAND(getclientmode, ARG_IVAL);
COMMAND(curmodeattr, ARG_1EST);
COMMAND(curmap, ARG_1INT);
VARP(showscoresondeath, 0, 1, 1);
@@ -1067,17 +1068,6 @@ void setadmin(char *claim, char *password)
COMMAND(setadmin, ARG_2STR);
void changemap(const char *name) // silently request map change, server may ignore
{
ENetPacket *packet = enet_packet_create(NULL, MAXTRANS, ENET_PACKET_FLAG_RELIABLE);
ucharbuf p(packet->data, packet->dataLength);
putint(p, SV_NEXTMAP);
sendstring(name, p);
putint(p, nextmode);
enet_packet_resize(packet, p.length());
sendpackettoserv(1, packet);
}
struct mline { string name, cmd; };
static vector<mline> mlines;
-16
View File
@@ -308,15 +308,6 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
break;
}
case SV_MAPRELOAD: // server requests next map
{
getint(p);
s_sprintfd(nextmapalias)("nextmap_%s", getclientmap());
const char *map = getalias(nextmapalias); // look up map in the cycle
changemap(map ? map : getclientmap());
break;
}
case SV_INITC2S: // another client either connected or changed name/team
{
d = newclient(cn);
@@ -862,13 +853,6 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
}
}
// check if joining here so as not to interrupt welcomepacket
if(joining<0 && getclientmap()[0]) // we are the first client on this server, set map
{
nextmode = gamemode;
changemap(getclientmap());
}
#ifdef _DEBUG
protocoldebug(false);
#endif
+2 -1
View File
@@ -724,8 +724,9 @@ int main(int argc, char **argv)
persistidents = true;
initlog("localconnect");
extern string clientmap;
s_strcpy(clientmap, "ac_complex");
localconnect();
changemap("maps/ac_complex");
if(initscript) execute(initscript);
+1 -1
View File
@@ -211,7 +211,7 @@ char msgsizesl[] = // size inclusive message token, 0 for variable
SV_SHOOT, 0, SV_EXPLODE, 0, SV_SUICIDE, 1, SV_AKIMBO, 2, SV_RELOAD, 3, SV_SCOPE, 3,
SV_GIBDIED, 4, SV_DIED, 4, SV_GIBDAMAGE, 6, SV_DAMAGE, 6, SV_HITPUSH, 6, SV_SHOTFX, 9, SV_THROWNADE, 8,
SV_TRYSPAWN, 1, SV_SPAWNSTATE, 23, SV_SPAWN, 3, SV_FORCEDEATH, 2, SV_RESUME, 0,
SV_TIMEUP, 2, SV_EDITENT, 10, SV_MAPRELOAD, 2, SV_NEXTMAP, 0, SV_ITEMACC, 2,
SV_TIMEUP, 2, SV_EDITENT, 10, SV_ITEMACC, 2,
SV_MAPCHANGE, 0, SV_ITEMSPAWN, 2, SV_ITEMPICKUP, 2,
SV_PING, 2, SV_PONG, 2, SV_CLIENTPING, 2, SV_GAMEMODE, 2,
SV_EDITMODE, 2, SV_EDITH, 7, SV_EDITT, 7, SV_EDITS, 6, SV_EDITD, 6, SV_EDITE, 6, SV_NEWMAP, 2,
+2 -2
View File
@@ -21,7 +21,7 @@ enum
SV_SHOOT, SV_EXPLODE, SV_SUICIDE, SV_AKIMBO, SV_RELOAD, SV_SCOPE,
SV_GIBDIED, SV_DIED, SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX, SV_THROWNADE,
SV_TRYSPAWN, SV_SPAWNSTATE, SV_SPAWN, SV_FORCEDEATH, SV_RESUME,
SV_TIMEUP, SV_EDITENT, SV_MAPRELOAD, SV_NEXTMAP, SV_ITEMACC,
SV_TIMEUP, SV_EDITENT, SV_ITEMACC,
SV_MAPCHANGE, SV_ITEMSPAWN, SV_ITEMPICKUP,
SV_PING, SV_PONG, SV_CLIENTPING, SV_GAMEMODE,
SV_EDITMODE, SV_EDITH, SV_EDITT, SV_EDITS, SV_EDITD, SV_EDITE, SV_NEWMAP,
@@ -51,7 +51,7 @@ const static char *messagenames[] =
"SV_SHOOT", "SV_EXPLODE", "SV_SUICIDE", "SV_AKIMBO", "SV_RELOAD", "SV_SCOPE",
"SV_GIBDIED", "SV_DIED", "SV_GIBDAMAGE", "SV_DAMAGE", "SV_HITPUSH", "SV_SHOTFX", "SV_THROWNADE",
"SV_TRYSPAWN", "SV_SPAWNSTATE", "SV_SPAWN", "SV_FORCEDEATH", "SV_RESUME",
"SV_TIMEUP", "SV_EDITENT", "SV_MAPRELOAD", "SV_NEXTMAP", "SV_ITEMACC",
"SV_TIMEUP", "SV_EDITENT", "SV_ITEMACC",
"SV_MAPCHANGE", "SV_ITEMSPAWN", "SV_ITEMPICKUP",
"SV_PING", "SV_PONG", "SV_CLIENTPING", "SV_GAMEMODE",
"SV_EDITMODE", "SV_EDITH", "SV_EDITT", "SV_EDITS", "SV_EDITD", "SV_EDITE", "SV_NEWMAP",
+1
View File
@@ -361,6 +361,7 @@ extern playerent *newplayerent();
extern botent *newbotent();
extern void freebotent(botent *d);
extern char *getclientmap();
extern int getclientmode();
extern void zapplayer(playerent *&d);
extern playerent *getclient(int cn);
extern playerent *newclient(int cn);
+19 -36
View File
@@ -42,7 +42,6 @@ vector<demofile> demofiles;
int mastermode = MM_OPEN;
static bool autoteam = true;
static bool mapreload = false;
static bool forceintermission = false;
string servdesc_current;
@@ -1003,10 +1002,14 @@ void arenacheck()
{ // start new arena round
arenaround = 0;
distributespawns();
loopv(clients) if(clients[i]->type!=ST_EMPTY && clients[i]->isauthed && clients[i]->isonrightmap)
loopv(clients) if(clients[i]->type!=ST_EMPTY && clients[i]->isauthed && team_isactive(clients[i]->team))
{
clients[i]->state.respawn();
sendspawn(clients[i]);
if(clients[i]->isonrightmap)
{
clients[i]->state.respawn();
sendspawn(clients[i]);
}
else sendservmsg("\f3you have to be on the right map to spawn: type /getmap", i); // FIXME
}
return;
}
@@ -1417,7 +1420,6 @@ void resetserver(const char *newname, int newmode, int newtime)
gamemillis = 0;
gamelimit = minremain*60000;
mapreload = false;
interm = 0;
if(!laststatus) laststatus = servmillis-61*1000;
lastfillup = servmillis;
@@ -1426,7 +1428,7 @@ void resetserver(const char *newname, int newmode, int newtime)
ctfreset();
}
void resetmap(const char *newname, int newmode, int newtime, bool notify)
void startgame(const char *newname, int newmode, int newtime, bool notify)
{
bool lastteammode = m_teammode;
resetserver(newname, newmode, newtime);
@@ -1760,7 +1762,7 @@ void welcomepacket(ucharbuf &p, int n, ENetPacket *packet, bool forcedeath)
} \
}
if(!smapname[0] && maprot.configsets.length()) maprot.next(false);
if(!smapname[0]) maprot.next(false);
client *c = valid_client(n) ? clients[n] : NULL;
int numcl = numclients();
@@ -1903,7 +1905,7 @@ int checktype(int type, client *cl)
static int servtypes[] = { SV_INITS2C, SV_WELCOME, SV_CDIS, SV_GIBDIED, SV_DIED,
SV_GIBDAMAGE, SV_DAMAGE, SV_HITPUSH, SV_SHOTFX,
SV_SPAWNSTATE, SV_FORCEDEATH, SV_RESUME, SV_TIMEUP,
SV_MAPRELOAD, SV_ITEMACC, SV_MAPCHANGE, SV_ITEMSPAWN, SV_PONG,
SV_ITEMACC, SV_MAPCHANGE, SV_ITEMSPAWN, SV_PONG,
SV_SERVMSG, SV_ITEMLIST, SV_FLAGINFO, SV_FLAGMSG, SV_FLAGCNT,
SV_ARENAWIN, SV_SERVOPINFO,
SV_CALLVOTESUC, SV_CALLVOTEERR, SV_VOTERESULT,
@@ -2354,15 +2356,6 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
break;
}
case SV_NEXTMAP:
{
getstring(text, p);
filtertext(text, text);
int mode = getint(p);
if(mapreload || numclients() == 1) resetmap(text, mode);
break;
}
case SV_SENDMAP:
{
getstring(text, p);
@@ -2444,7 +2437,7 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
{
getstring(text, p);
filtertext(text, text);
string oldname, newname;
string filename;
const char *rmmap = behindpath(text), *reject = NULL;
int mp = findmappath(rmmap);
int reqrole = strchr(scl.mapperm, 'D') ? CR_ADMIN : (strchr(scl.mapperm, 'd') ? CR_DEFAULT : CR_ADMIN + 100);
@@ -2452,18 +2445,14 @@ void process(ENetPacket *packet, int sender, int chan) // sender may be -1
else if(readonlymap(mp)) reject = "map is readonly";
else if(mp == MAP_NOTFOUND) reject = "map not found";
else
{ // don't really delete - just rename
s_sprintf(oldname)(SERVERMAP_PATH_INCOMING "%s.cgz", rmmap);
s_sprintf(newname)(SERVERMAP_PATH_INCOMING "%s.cgz.%d.deleted", rmmap, servmillis);
remove(newname);
rename(oldname, newname);
s_sprintf(oldname)(SERVERMAP_PATH_INCOMING "%s.cfg", rmmap);
s_sprintf(newname)(SERVERMAP_PATH_INCOMING "%s.cfg.%d.deleted", rmmap, servmillis);
remove(newname);
rename(oldname, newname);
{
s_sprintf(filename)(SERVERMAP_PATH_INCOMING "%s.cgz", rmmap);
remove(filename);
s_sprintf(filename)(SERVERMAP_PATH_INCOMING "%s.cfg", rmmap);
remove(filename);
s_sprintfd(msg)("map '%s' deleted", rmmap);
sendservmsg(msg, sender);
logline(ACLOG_INFO,"[%s] deleted map %s, backup %d", clients[sender]->hostname, rmmap, servmillis);
logline(ACLOG_INFO,"[%s] deleted map %s", clients[sender]->hostname, rmmap);
}
if (reject)
{
@@ -2780,14 +2769,8 @@ void serverslice(uint timeout) // main server update, called from cube main lo
interm = 0;
//start next game
if(nextmapname[0]) resetmap(nextmapname, nextgamemode);
else if(maprot.configsets.length()) maprot.next();
else loopv(clients) if(clients[i]->type!=ST_EMPTY)
{
sendf(i, 1, "rii", SV_MAPRELOAD, 0); // ask a client to trigger map reload
mapreload = true;
break;
}
if(nextmapname[0]) startgame(nextmapname, nextgamemode);
else maprot.next();
}
resetserverifempty();
+1 -1
View File
@@ -295,7 +295,7 @@ struct demofile
int len;
};
void resetmap(const char *newname, int newmode, int newtime = -1, bool notify = true);
void startgame(const char *newname, int newmode, int newtime = -1, bool notify = true);
void disconnect_client(int n, int reason = -1);
int clienthasflag(int cn);
bool refillteams(bool now = false, bool notify = true);
+2 -2
View File
@@ -37,7 +37,7 @@ struct mapaction : serveraction
}
else
{
resetmap(map, mode);
startgame(map, mode);
}
}
bool isvalid() { return serveraction::isvalid() && mode != GMODE_DEMO && mapok && !(isdedicated && !m_mp(mode)); }
@@ -99,7 +99,7 @@ struct mapaction : serveraction
struct demoplayaction : serveraction
{
char *map;
void perform() { resetmap(map, GMODE_DEMO); }
void perform() { startgame(map, GMODE_DEMO); }
demoplayaction(char *map) : map(map)
{
area = EE_LOCAL_SERV; // only local
+10 -1
View File
@@ -296,6 +296,15 @@ struct servermaprot : serverconfigfile
int next(bool notify = true, bool nochange = false) // load next maprotation set
{
#ifndef STANDALONE
if(!isdedicated)
{
s_sprintfd(nextmapalias)("nextmap_%s", getclientmap());
const char *map = getalias(nextmapalias); // look up map in the cycle
startgame(map && notify ? map : getclientmap(), getclientmode(), -1, notify);
return -1;
}
#endif
int n = numclients();
int csl = configsets.length();
int ccs = curcfgset;
@@ -316,7 +325,7 @@ struct servermaprot : serverconfigfile
if(!nochange)
{
curcfgset = ccs;
resetmap(c->mapname, c->mode, c->time, notify);
startgame(c->mapname, c->mode, c->time, notify);
}
return ccs;
}