From aafe6ec8a5ca9a6f2a18e9b2922657264b28ac56 Mon Sep 17 00:00:00 2001
From: Rudolf Polzer <divverent@alientrap.org>
Date: Fri, 14 Jan 2011 23:27:48 +0100
Subject: [PATCH] playerstats: properly handle different ways of match ending

---
 qcsrc/server/g_world.qc     | 14 ++++++++------
 qcsrc/server/playerstats.qc |  9 ++++++---
 qcsrc/server/playerstats.qh |  2 +-
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc
index b01d8515b8..67fb91fc2b 100644
--- a/qcsrc/server/g_world.qc
+++ b/qcsrc/server/g_world.qc
@@ -1523,11 +1523,6 @@ void DumpStats(float final)
 		fputs(file, ":end\n");
 		fclose(file);
 	}
-
-	// send statistics
-	FOR_EACH_CLIENT(e)
-		PlayerStats_AddGlobalInfo(e);
-	PlayerStats_Shutdown();
 }
 
 void FixIntermissionClient(entity e)
@@ -1595,7 +1590,13 @@ void NextLevel()
 	VoteReset();
 
 	DumpStats(TRUE);
-	PlayerStats_EndMatch();
+
+	// send statistics
+	entity e;
+	PlayerStats_EndMatch(1);
+	FOR_EACH_CLIENT(e)
+		PlayerStats_AddGlobalInfo(e);
+	PlayerStats_Shutdown();
 
 	if(autocvar_sv_eventlog)
 		GameLogEcho(":gameover");
@@ -2941,6 +2942,7 @@ void SV_Shutdown()
 		print("Saving persistent data...\n");
 		Ban_SaveBans();
 
+		PlayerStats_EndMatch(0);
 		FOR_EACH_CLIENT(e)
 			PlayerStats_AddGlobalInfo(e);
 		PlayerStats_Shutdown();
diff --git a/qcsrc/server/playerstats.qc b/qcsrc/server/playerstats.qc
index a8efa82c8e..2d1e219120 100644
--- a/qcsrc/server/playerstats.qc
+++ b/qcsrc/server/playerstats.qc
@@ -179,13 +179,16 @@ void PlayerStats_AddGlobalInfo(entity p)
 	p.playerstats_id = string_null;
 }
 
-void PlayerStats_EndMatch()
+void PlayerStats_EndMatch(float finished)
 {
 	entity p;
 	FOR_EACH_PLAYER(p)
 	{
 		PlayerScore_PlayerStats(p);
-		PlayerStats_Event(p, PLAYERSTATS_WINS, p.winning);
-		PlayerStats_Event(p, PLAYERSTATS_MATCHES, 1);
+		if(finished)
+		{
+			PlayerStats_Event(p, PLAYERSTATS_WINS, p.winning);
+			PlayerStats_Event(p, PLAYERSTATS_MATCHES, 1);
+		}
 	}
 }
diff --git a/qcsrc/server/playerstats.qh b/qcsrc/server/playerstats.qh
index 1dea13ce7e..5f765e2112 100644
--- a/qcsrc/server/playerstats.qh
+++ b/qcsrc/server/playerstats.qh
@@ -30,4 +30,4 @@ void PlayerStats_Sent_URI_Get_Callback(float id, float status, string data);
 void PlayerStats_AddGlobalInfo(entity p);
 
 // call this at the end of the match
-void PlayerStats_EndMatch()
+void PlayerStats_EndMatch(float finished);
-- 
2.39.5