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:
flowtron
2008-12-02 23:35:56 +00:00
parent 9cd52ad87e
commit d7afbfdffc
3 changed files with 35 additions and 6 deletions
+11 -3
View File
@@ -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);
+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 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
View File
@@ -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()