X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sv_demo.c;h=f6f00d33102ec3c30968a30ff05e0c9a3e446b5a;hb=853f7fe77fd4e7a79e682cf964e4ad863a1a60e7;hp=d8f2bea90772bd07be69aecd71a30a6fbee1b6ee;hpb=ffffe657727890724cd57beecc8d34cf33154746;p=xonotic%2Fdarkplaces.git diff --git a/sv_demo.c b/sv_demo.c index d8f2bea9..f6f00d33 100644 --- a/sv_demo.c +++ b/sv_demo.c @@ -1,6 +1,8 @@ #include "quakedef.h" #include "sv_demo.h" +extern cvar_t sv_autodemo_perclient_discardable; + void SV_StartDemoRecording(client_t *client, const char *filename, int forcetrack) { char name[MAX_QPATH]; @@ -13,7 +15,10 @@ void SV_StartDemoRecording(client_t *client, const char *filename, int forcetrac Con_Printf("Recording demo for # %d (%s) to %s\n", PRVM_NUM_FOR_EDICT(client->edict), client->netaddress, name); - client->sv_demo_file = FS_Open(name, "wb", false, false); + // Reset discardable flag for every new demo. + PRVM_serveredictfloat(client->edict, discardabledemo) = 0; + + client->sv_demo_file = FS_OpenRealFile(name, "wb", false); if(!client->sv_demo_file) { Con_Print("ERROR: couldn't open.\n"); @@ -27,17 +32,19 @@ void SV_WriteDemoMessage(client_t *client, sizebuf_t *sendbuffer, qboolean clien { int len, i; float f; + int temp; if(client->sv_demo_file == NULL) return; if(sendbuffer->cursize == 0) return; - len = LittleLong(sendbuffer->cursize | (clienttoserver ? DEMOMSG_CLIENT_TO_SERVER : 0)); + temp = sendbuffer->cursize | (clienttoserver ? DEMOMSG_CLIENT_TO_SERVER : 0); + len = LittleLong(temp); FS_Write(client->sv_demo_file, &len, 4); for(i = 0; i < 3; ++i) { - f = LittleFloat(client->edict->fields.server->v_angle[i]); + f = LittleFloat(PRVM_serveredictvector(client->edict, v_angle)[i]); FS_Write(client->sv_demo_file, &f, 4); } FS_Write(client->sv_demo_file, sendbuffer->data, sendbuffer->cursize); @@ -57,9 +64,16 @@ void SV_StopDemoRecording(client_t *client) MSG_WriteByte(&buf, svc_disconnect); SV_WriteDemoMessage(client, &buf, false); + if (sv_autodemo_perclient_discardable.integer && PRVM_serveredictfloat(client->edict, discardabledemo)) + { + FS_RemoveOnClose(client->sv_demo_file); + Con_Printf("Stopped recording discardable demo for # %d (%s)\n", PRVM_NUM_FOR_EDICT(client->edict), client->netaddress); + } + else + Con_Printf("Stopped recording demo for # %d (%s)\n", PRVM_NUM_FOR_EDICT(client->edict), client->netaddress); + FS_Close(client->sv_demo_file); client->sv_demo_file = NULL; - Con_Printf("Stopped recording demo for # %d (%s)\n", PRVM_NUM_FOR_EDICT(client->edict), client->netaddress); } void SV_WriteNetnameIntoDemo(client_t *client)