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:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user