proto 1129 : demos now have speaking names
git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@3836 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
@@ -817,6 +817,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p)
|
||||
|
||||
void receivefile(uchar *data, int len)
|
||||
{
|
||||
static char text[MAXTRANS];
|
||||
ucharbuf p(data, len);
|
||||
int type = getint(p);
|
||||
data += p.length();
|
||||
@@ -826,7 +827,15 @@ void receivefile(uchar *data, int len)
|
||||
case SV_SENDDEMO:
|
||||
{
|
||||
systemtime();
|
||||
s_sprintfd(fname)("demos/%d.dmo", now_utc);
|
||||
getstring(text, p);
|
||||
s_sprintfd(fname)("demos/%s.dmo", text);
|
||||
data += strlen(text);
|
||||
int demosize = getint(p);
|
||||
if(p.remaining() < demosize)
|
||||
{
|
||||
p.forceoverread();
|
||||
break;
|
||||
}
|
||||
path(fname);
|
||||
FILE *demo = openfile(fname, "wb");
|
||||
if(!demo)
|
||||
@@ -835,14 +844,13 @@ void receivefile(uchar *data, int len)
|
||||
return;
|
||||
}
|
||||
conoutf("received demo \"%s\"", fname);
|
||||
fwrite(data, 1, len, demo);
|
||||
fwrite(&p.buf[p.len], 1, demosize, demo); // data
|
||||
fclose(demo);
|
||||
break;
|
||||
}
|
||||
|
||||
case SV_RECVMAP:
|
||||
{
|
||||
static char text[MAXTRANS];
|
||||
getstring(text, p);
|
||||
conoutf("received map \"%s\" from server, reloading..", text);
|
||||
int mapsize = getint(p);
|
||||
|
||||
@@ -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 1128 // bump when protocol changes
|
||||
#define PROTOCOL_VERSION 1129 // bump when protocol changes
|
||||
#define DEMO_VERSION 1 // bump when demo format changes
|
||||
#define DEMO_MAGIC "ASSAULTCUBE_DEMO"
|
||||
#define MAXMAPSENDSIZE 65536
|
||||
@@ -51,7 +51,7 @@ const static char *messagenames[] =
|
||||
"SV_TIMEUP", "SV_EDITENT", "SV_MAPRELOAD", "SV_NEXTMAP", "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",
|
||||
"SV_EDITMODE", "SV_EDITH", "SV_EDITT", "SV_EDITS", "SV_EDITD", "SV_EDITE", "SV_NEWMAP",
|
||||
"SV_SENDMAP", "SV_RECVMAP", "SV_SERVMSG", "SV_ITEMLIST", "SV_WEAPCHANGE", "SV_PRIMARYWEAP",
|
||||
"SV_MODELSKIN",
|
||||
"SV_FLAGACTION", "SV_FLAGINFO", "SV_FLAGMSG", "SV_FLAGCNT",
|
||||
|
||||
+22
-1
@@ -599,6 +599,7 @@ void sendspawn(client *c)
|
||||
struct demofile
|
||||
{
|
||||
string info;
|
||||
string file;
|
||||
uchar *data;
|
||||
int len;
|
||||
};
|
||||
@@ -636,6 +637,16 @@ char *asctime()
|
||||
return timestr;
|
||||
}
|
||||
|
||||
char fmttimestr[15]; // flowtron assumes "%b" is always 3 chars (true at least for DE and EN)
|
||||
char *strftime()
|
||||
{
|
||||
time_t t = time(NULL);
|
||||
struct tm * timeinfo;
|
||||
timeinfo = localtime (&t);
|
||||
strftime(fmttimestr, 15, "%Y%b%d_%H%M", timeinfo); // 14 + "\0"
|
||||
return fmttimestr;
|
||||
}
|
||||
|
||||
void enddemorecord()
|
||||
{
|
||||
if(!demorecord) return;
|
||||
@@ -659,6 +670,7 @@ void enddemorecord()
|
||||
}
|
||||
demofile &d = demos.add();
|
||||
s_sprintf(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");
|
||||
s_sprintf(d.file)("%s_%s_%s", modestr(gamemode, true), behindpath(smapname), strftime());
|
||||
s_sprintfd(msg)("Demo \"%s\" recorded\nPress F10 to download it from the server..", d.info);
|
||||
sendservmsg(msg);
|
||||
logger->writeline(log::info, "Demo \"%s\" recorded.", d.info);
|
||||
@@ -800,7 +812,16 @@ void senddemo(int cn, int num)
|
||||
return;
|
||||
}
|
||||
demofile &d = demos[num-1];
|
||||
sendf(cn, 2, "rim", SV_SENDDEMO, d.len, d.data);
|
||||
//sendf(cn, 2, "rim", SV_SENDDEMO, d.len, d.data);
|
||||
ENetPacket *packet = enet_packet_create(NULL, MAXTRANS + d.len, ENET_PACKET_FLAG_RELIABLE);
|
||||
ucharbuf p(packet->data, packet->dataLength);
|
||||
putint(p, SV_SENDDEMO);
|
||||
sendstring(d.file, p);
|
||||
putint(p, d.len);
|
||||
p.put(d.data, d.len);
|
||||
enet_packet_resize(packet, p.length());
|
||||
sendpacket(cn, 2, packet);
|
||||
if(!packet->referenceCount) enet_packet_destroy(packet);
|
||||
}
|
||||
|
||||
void enddemoplayback()
|
||||
|
||||
Reference in New Issue
Block a user