#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];
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");
{
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)
{
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)