X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=sv_demo.c;h=acea7b01ed37f2665ae102de1aeb2af941a296dd;hb=38946a1538b4072a131382a48716a4463194390f;hp=81f169bb64b067a7ee5a065d157e964f13284bd6;hpb=775c4993063d7673903a2dfaebeacd1a9c71cbf7;p=xonotic%2Fdarkplaces.git diff --git a/sv_demo.c b/sv_demo.c index 81f169bb..acea7b01 100644 --- a/sv_demo.c +++ b/sv_demo.c @@ -1,9 +1,12 @@ #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]; + prvm_eval_t *val; if(client->sv_demo_file != NULL) return; // we already have a demo @@ -13,6 +16,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); + // Reset discardable flag for every new demo. + if ((val = PRVM_EDICTFIELDVALUE(client->edict, prog->fieldoffsets.discardabledemo))) + val->_float = 0; + client->sv_demo_file = FS_OpenRealFile(name, "wb", false); if(!client->sv_demo_file) { @@ -49,6 +56,7 @@ void SV_StopDemoRecording(client_t *client) { sizebuf_t buf; unsigned char bufdata[64]; + prvm_eval_t *val; if(client->sv_demo_file == NULL) return; @@ -59,9 +67,16 @@ void SV_StopDemoRecording(client_t *client) MSG_WriteByte(&buf, svc_disconnect); SV_WriteDemoMessage(client, &buf, false); + if (sv_autodemo_perclient_discardable.integer && (val = PRVM_EDICTFIELDVALUE(client->edict, prog->fieldoffsets.discardabledemo)) && val->_float) + { + 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)