r3897 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Jul 24 08:42:00 EDT 2008


Author: div0
Date: 2008-07-24 08:42:00 -0400 (Thu, 24 Jul 2008)
New Revision: 3897

Modified:
   trunk/data/qcsrc/server/gamecommand.qc
   trunk/data/qcsrc/server/keyhunt.qc
   trunk/data/qcsrc/server/scores.qc
   trunk/data/qcsrc/server/scores.qh
Log:
keyhunt sends scores


Modified: trunk/data/qcsrc/server/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/server/gamecommand.qc	2008-07-24 12:14:23 UTC (rev 3896)
+++ trunk/data/qcsrc/server/gamecommand.qc	2008-07-24 12:42:00 UTC (rev 3897)
@@ -208,6 +208,10 @@
 			print("Client not found\n");
 		return;
 	}
+	if (argv(0) == "sdp")
+	{
+		Score_DebugPrint();
+	}
 
 	print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
 }

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2008-07-24 12:14:23 UTC (rev 3896)
+++ trunk/data/qcsrc/server/keyhunt.qc	2008-07-24 12:42:00 UTC (rev 3897)
@@ -436,7 +436,11 @@
 	sound(player, CHAN_AUTO, kh_sound_collect, 1, ATTN_NORM);
 
 	if(key.kh_dropperteam != player.team)
+	{
 		kh_Scores_Event(player, key, "collect", cvar("g_balance_keyhunt_score_collect"), 0);
+		PlayerTeamScore_Add(player, ST_SCORE, ST_SCORE, cvar("g_balance_keyhunt_score_collect"));
+		PlayerScore_Add(player, SP_KH_COLLECT, 1);
+	}
 	key.kh_dropperteam = 0;
 	bprint(player.netname, "^7 picked up the ", key.netname, "\n");
 
@@ -462,6 +466,7 @@
 		while((key = player.kh_next))
 		{
 			kh_Scores_Event(player, key, "losekey", 0, 0);
+			PlayerScore_Add(player, SP_KH_LOSEKEY, 1);
 			bprint(player.netname, "^7 died and lost the ", key.netname, "\n");
 			kh_Key_AssignTo(key, world);
 			makevectors('-1 0 0' * (45 + 45 * random()) + '0 360 0' * random());
@@ -599,7 +604,13 @@
 	// twice the score for 3 team games, three times the score for 4 team games!
 	// note: for a win by destroying the key, this should NOT be applied
 	FOR_EACH_KH_KEY(key)
-		kh_Scores_Event(key.owner, key, "capture", DistributeEvenly_Get(1), 0);
+	{
+		float f;
+		f = DistributeEvenly_Get(1);
+		kh_Scores_Event(key.owner, key, "capture", f, 0);
+		PlayerTeamScore_Add(key.owner, SP_KH_CAPS, ST_KH_CAPS, 1);
+		PlayerTeamScore_AddScore(key.owner, f);
+	}
 
 	first = TRUE;
 	FOR_EACH_KH_KEY(key)
@@ -645,6 +656,7 @@
 	entity player, key, attacker;
 	float players;
 	float keys;
+	float f;
 
 	attacker = world;
 	if(lostkey.pusher)
@@ -660,6 +672,8 @@
 			kh_Scores_Event(lostkey.kh_previous_owner, world, "pushed", 0, -cvar("g_balance_keyhunt_score_push"));
 			// don't actually GIVE him the -nn points, just log
 		kh_Scores_Event(attacker, world, "push", cvar("g_balance_keyhunt_score_push"), 0);
+		PlayerScore_Add(attacker, SP_KH_PUSH, 1);
+		PlayerTeamScore_AddScore(attacker, cvar("g_balance_keyhunt_score_push"));
 		centerprint(attacker, "Your push is the best!\n\n\n");
 		bprint("The ", ColoredTeamName(teem), "^7 could not take care of the ", lostkey.netname, "^7 when ", attacker.netname, "^7 came\n");
 	}
@@ -680,11 +694,17 @@
 			kh_Scores_Event(lostkey.kh_previous_owner, world, "destroyed", 0, -cvar("g_balance_keyhunt_score_destroyed"));
 			// don't actually GIVE him the -nn points, just log
 
+		PlayerScore_Add(lostkey.kh_previous_owner, SP_KH_DESTROYED, 1);
+
 		DistributeEvenly_Init(cvar("g_balance_keyhunt_score_destroyed"), keys * of + players);
 
 		FOR_EACH_KH_KEY(key)
 			if(key.owner && key.team != teem)
-				kh_Scores_Event(key.owner, world, "destroyed_holdingkey", DistributeEvenly_Get(of), 0);
+			{
+				f = DistributeEvenly_Get(of);
+				kh_Scores_Event(key.owner, world, "destroyed_holdingkey", f, 0);
+				PlayerTeamScore_AddScore(key.owner, f);
+			}
 
 		fragsleft = DistributeEvenly_Get(players);
 
@@ -707,7 +727,11 @@
 
 			FOR_EACH_PLAYER(player)
 				if(player.team == thisteam)
-					kh_Scores_Event(player, world, "destroyed", DistributeEvenly_Get(1), 0);
+				{
+					f = DistributeEvenly_Get(1);
+					kh_Scores_Event(player, world, "destroyed", f, 0);
+					PlayerTeamScore_AddScore(key.owner, f);
+				}
 
 			--j;
 		}
@@ -880,10 +904,14 @@
 			for(k = targ.kh_next; k != world; k = k.kh_next)
 				++nk;
 			kh_Scores_Event(attacker, targ.kh_next, "carrierfrag", -nk * cvar("g_balance_keyhunt_score_collect"), 0);
+			PlayerTeamScore_AddScore(attacker, -nk * cvar("g_balance_keyhunt_score_collect"));
 		}
 		else
 		{
 			kh_Scores_Event(attacker, targ.kh_next, "carrierfrag", cvar("g_balance_keyhunt_score_carrierfrag")-1, 0);
+			PlayerTeamScore_AddScore(attacker, cvar("g_balance_keyhunt_score_carrierfrag") - 1);
+			PlayerScore_Add(attacker, SP_KH_KCFRAG, 1);
+			// the frag gets added later
 		}
 	}
 

Modified: trunk/data/qcsrc/server/scores.qc
===================================================================
--- trunk/data/qcsrc/server/scores.qc	2008-07-24 12:14:23 UTC (rev 3896)
+++ trunk/data/qcsrc/server/scores.qc	2008-07-24 12:42:00 UTC (rev 3897)
@@ -10,6 +10,7 @@
 float teamscores_entities_count;
 var .float scores_primary;
 var .float teamscores_primary;
+float scores_initialized;
 
 .float Version;
 .float(entity to) SendEntity;
@@ -60,6 +61,7 @@
 void TeamScore_Add(entity player, float scorefield, float score)
 {
 	entity s;
+	if(!scores_initialized) return; // FIXME remove this when everything uses this system
 	s = teamscorekeepers[player.team];
 	if(!s)
 		error("Adding score to unknown team!");
@@ -116,6 +118,7 @@
 
 void ScoreInfo_Init(float teams)
 {
+	scores_initialized = 1;
 	if(teams >= 1)
 		TeamScore_Spawn(COLOR_TEAM1, "Red");
 	if(teams >= 2)
@@ -205,6 +208,7 @@
 void PlayerScore_Add(entity player, float scorefield, float score)
 {
 	entity s;
+	if(!scores_initialized) return; // FIXME remove this when everything uses this system
 	s = player.scorekeeper;
 	if(!s)
 		error("Adding score to unknown player!");
@@ -212,6 +216,12 @@
 	s.Version += 1;
 }
 
+void PlayerTeamScore_Add(entity player, float pscorefield, float tscorefield, float score)
+{
+	PlayerScore_Add(player, pscorefield, score);
+	TeamScore_Add(player, tscorefield, score);
+}
+
 float PlayerScore_Compare(entity t1, entity t2)
 {
 	if(!t1 || !t2) return (!t2) - !t1;
@@ -273,3 +283,38 @@
 		WinningConditionHelper_winnerteam = -1;
 	}
 }
+
+void Score_DebugPrint()
+{
+	entity p, sk;
+	float i, t;
+
+	print("netname");
+	for(i = 0; i < MAX_SCORE; ++i)
+		print(":", scores_label[i]);
+	print("\n");
+	FOR_EACH_PLAYER(p)
+	{
+		sk = p.scorekeeper;
+		print(p.netname);
+		for(i = 0; i < MAX_SCORE; ++i)
+			print(":", ftos(sk.(scores[i])));
+		print("\n");
+	}
+
+	print("teamname");
+	for(i = 0; i < MAX_SCORE; ++i)
+		print(":", scores_label[i]);
+	print("\n");
+	for(t = 0; t < 16; ++t)
+	{
+		sk = teamscorekeepers[t];
+		if(sk)
+		{
+			print(ftos(t));
+			for(i = 0; i < MAX_TEAMSCORE; ++i)
+				print(":", ftos(sk.(teamscores[i])));
+			print("\n");
+		}
+	}
+}

Modified: trunk/data/qcsrc/server/scores.qh
===================================================================
--- trunk/data/qcsrc/server/scores.qh	2008-07-24 12:14:23 UTC (rev 3896)
+++ trunk/data/qcsrc/server/scores.qh	2008-07-24 12:42:00 UTC (rev 3897)
@@ -1,4 +1,4 @@
-#define MAX_SCORE 9
+#define MAX_SCORE 10
 #define MAX_TEAMSCORE 2
 
 /**
@@ -33,6 +33,16 @@
 void TeamScore_Add(entity player, float scorefield, float score);
 
 /**
+ * Adds a score to both the player and the team.
+ */
+void PlayerTeamScore_Add(entity player, float pscorefield, float tscorefield, float score);
+
+/**
+ * Adds to the generic score fields for both the player and the team.
+ */
+#define PlayerTeamScore_AddScore(p,s) PlayerTeamScore_Add(p, SP_SCORE, ST_SCORE, s)
+
+/**
  * Initialize the scores info for the given number of teams.
  * Immediately set all labels afterwards.
  */
@@ -54,6 +64,11 @@
 void Score_ClearAll();
 
 /**
+ * Prints the scores (ugly!) to the console.
+ */
+void Score_DebugPrint();
+
+/**
  * Lower scores are better (e.g. deaths)
  */
 #define SFL_DECREASING         1
@@ -80,16 +95,16 @@
 #define SP_DEATHS 1
 #define SP_SUICIDES 2
 #define SP_SCORE 3 // personal score, game modes can set it their own way
+#define ST_SCORE 0
 
 #define SP_CTF_CAPS 4
 #define SP_CTF_RETURNS 5
-#define ST_CTF_CAPS 0
-#define ST_CTF_SCORE 1
+#define ST_CTF_CAPS 1
 
 #define SP_KH_COLLECT 4
 #define SP_KH_LOSEKEY 5
-#define SP_KH_CAPTURE 6
+#define SP_KH_CAPS 6
 #define SP_KH_PUSH 7
 #define SP_KH_DESTROYED 8
-#define ST_KH_CAPS 0
-#define ST_KH_SCORE 1
+#define SP_KH_KCFRAG 9
+#define ST_KH_CAPS 1




More information about the nexuiz-commits mailing list