r3907 - in trunk/data/qcsrc: common server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Jul 25 09:10:09 EDT 2008


Author: div0
Date: 2008-07-25 09:10:08 -0400 (Fri, 25 Jul 2008)
New Revision: 3907

Modified:
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/arena.qc
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/domination.qc
   trunk/data/qcsrc/server/g_damage.qc
   trunk/data/qcsrc/server/g_world.qc
   trunk/data/qcsrc/server/keyhunt.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/scores.qc
   trunk/data/qcsrc/server/scores.qh
   trunk/data/qcsrc/server/teamplay.qc
Log:
add much more stuff. REALLY need to initialize the scoring for the other game modes now!
Also added lots of TODOs especially for Last Man Camping, which currently is VERY broken.


Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/common/constants.qh	2008-07-25 13:10:08 UTC (rev 3907)
@@ -222,8 +222,12 @@
 
 #define SP_CTF_CAPS 4
 #define SP_CTF_RETURNS 5
+#define SP_CTF_CARRIERKILLS 6
 #define ST_CTF_CAPS 1
 
+#define ST_DOM_DOMPOINTS 1
+#define SP_DOM_DOMPOINTS 4
+
 #define SP_KH_COLLECT 4
 #define SP_KH_LOSEKEY 5
 #define SP_KH_CAPS 6

Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/arena.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -128,6 +128,8 @@
 				{
 					//NEW: changed behaviour so that it prevents that previous spectators/observers suddenly spawn as players
 					if (self.classname == "player") {
+						PlayerScore_Clear(self);
+						// FIXME decide what LMS does in the new scoring system!
 						self.frags = (g_lms)?LMS_NewPlayerLives():0;
 						self.deaths = 0;
 						self.killcount = 0;

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -372,14 +372,8 @@
 		DropFlag(self.flagcarried);
 
 	WaypointSprite_PlayerDead();
-
-	DistributeFragsAmongTeam(self, self.team, 1);
-	if(g_ctf)
-	{
-		self.captures = 0;
-		ctf_UpdateCaptures(MSG_BROADCAST);
-	}
-
+	
+	// FIXME LMS needs the new scoring system
 	if(self.frags <= 0 && self.frags > -666 && g_lms && self.killcount != -666)
 		bprint ("^4", self.netname, "^4 has no more lives left\n");
 	else if(self.killcount != -666)
@@ -548,6 +542,7 @@
 	}
 
 	// player is dead and becomes observer
+	// FIXME fix LMS scoring for new system
 	if(g_lms && self.frags < 1)
 		self.classname = "observer";
 
@@ -665,19 +660,9 @@
 		self.BUTTON_ATCK = self.BUTTON_JUMP = self.BUTTON_ATCK2 = 0;
 
 		if(self.killcount == -666) {
+			PlayerScore_Clear(self);
 			self.killcount = 0;
-			if(!g_arena)
-			if(!g_lms)
-				self.frags = 0;
-			if(g_ctf)
-			{
-				self.captures = 0;
-				self.returns = 0;
-				ctf_UpdateCaptures(MSG_BROADCAST);
-				ctf_UpdateReturns(MSG_BROADCAST);
-			}
-			self.deaths = 0;
-			net_UpdateDeaths(MSG_BROADCAST);
+			self.frags = 0;
 		}
 
 		self.cnt = WEP_LASER;
@@ -1113,6 +1098,7 @@
 
 	if(g_lms)
 	{
+		// FIXME fix LMS lives for new system
 		self.frags = LMS_NewPlayerLives();
 		if(!self.frags)
 			self.frags = -666;
@@ -1130,9 +1116,7 @@
 	if(entcs_start)
 		attach_entcs();
 
-#ifdef CSQCSCORES
 	PlayerScore_Attach(self);
-#endif
 
 	bot_relinkplayerlist();
 
@@ -1212,13 +1196,6 @@
 	if(self.flagcarried)
 		DropFlag(self.flagcarried);
 
-	DistributeFragsAmongTeam(self, self.team, 1);
-	if(g_ctf)
-	{
-		self.captures = 0;
-		ctf_UpdateCaptures(MSG_BROADCAST);
-	}
-
 	save = self.flags;
 	self.flags = self.flags - (self.flags & FL_CLIENT);
 	bot_relinkplayerlist();
@@ -1240,9 +1217,7 @@
 	}
 	*/
 
-#ifdef CSQCSCORES
 	PlayerScore_Detach(self);
-#endif
 
 	if(self.netname_previous)
 		strunzone(self.netname_previous);

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/clientcommands.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -219,7 +219,6 @@
 				DropFlag(self.flagcarried);
 			kh_Key_DropAll(self, TRUE);
 			WaypointSprite_PlayerDead();
-			DistributeFragsAmongTeam(self, self.team, 1.0);
 			self.classname = "observer";
 			if(blockSpectators)
 				sprint(self, strcat("^7You have to become a player within the next ", ftos(cvar("g_maxplayers_spectator_blocktime")), " seconds, otherwise you will be kicked, because spectators aren't allowed at this time!\n"));
@@ -233,7 +232,7 @@
 		{
 			if(isJoinAllowed()) {
 				self.classname = "player";
-				self.frags = 0;
+				PlayerScore_Clear(self);
 				bprint ("^4", self.netname, "^4 is playing now\n");
 				PutClientInServer();
 			}

Modified: trunk/data/qcsrc/server/domination.qc
===================================================================
--- trunk/data/qcsrc/server/domination.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/domination.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -120,15 +120,14 @@
 		waittime = self.wait;
 	self.delay = time + waittime;
 
-	// give credit to all players of the team (rewards large teams)
+	// give credit to the team
 	// NOTE: this defaults to 0
 	if (self.goalentity.netname)
 	{
 		teamfragamt = cvar("g_domination_point_teamamt");
-
-		FOR_EACH_PLAYER(head)
-			if (head.team == self.goalentity.team)
-				UpdateFrags(head, teamfragamt);
+		if(!teamfragamt)
+			teamfragamt = self.frags;
+		TeamScore_AddToTeam(self.goalentity.team, ST_DOM_DOMPOINTS, teamfragamt);
 	}
 
 	// if the player left the game, changed teams or became spectator, we have to find another player on the same team to give credit to
@@ -154,6 +153,7 @@
 		if(!individualfragamt)
 			individualfragamt = self.frags;
 		UpdateFrags(self.enemy, individualfragamt);
+		PlayerScore_Add(self.enemy, SP_DOM_DOMPOINTS, individualfragamt);
 	}
 };
 

Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/g_damage.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -42,11 +42,6 @@
 
 void UpdateFrags(entity player, float f)
 {
-#ifndef CSQCSCORES
-	// TODO remove this, make callers route through PlayerScores instead
-	player.frags += f;
-	player.totalfrags += f;
-#endif
 	PlayerTeamScore_AddScore(player, f);
 }
 
@@ -59,6 +54,7 @@
 		if(cvar("g_arena_roundbased"))
 			return;
 
+	// FIXME fix the mess this is (we have REAL points now!)
 	if(g_domination)
 	{
 		if(cvar("g_domination_disable_frags"))
@@ -76,6 +72,7 @@
 	}
 	else if(g_lms)
 	{
+		// FIXME fix LMS mode for new scoreboard
 		// count remaining lives, not frags in lms
 		targ.frags -= 1;
 		// keep track of the worst players lives
@@ -197,6 +194,7 @@
 				{
 					LogDeath("suicide", deathtype, targ, targ);
 					PlayerScore_Add(attacker, SP_SUICIDES, 1);
+					PlayerScore_Add(attacker, SP_DEATHS, 1);
 					GiveFrags(attacker, targ, -1);
 				}
 				if (targ.killcount > 2)
@@ -228,7 +226,8 @@
 				if(deathtype != DEATH_TEAMCHANGE)
 				{
 					LogDeath("suicide", deathtype, targ, targ);
-					PlayerScore_Add(attacker, SP_SUICIDES, 1);
+					PlayerScore_Add(targ, SP_SUICIDES, 1);
+					PlayerScore_Add(targ, SP_DEATHS, 1);
 					GiveFrags(attacker, targ, -1);
 				}
 				if (targ.killcount > 2)
@@ -247,7 +246,7 @@
 					bprint ("^1", a, "^1 mows down a teammate\n");
 				}
 				GiveFrags(attacker, targ, -1);
-				PlayerScore_Add(attacker, SP_KILLS, -1); // teamkills DO cound as -1 kill right?
+				PlayerScore_Add(attacker, SP_KILLS, -1); // teamkills DO cound as -1 kill right? or make separate teamkill counter?
 				if (targ.killcount > 2) {
 					if(sv_gentle)
 						bprint ("^1",s,"'s ^1",ftos(targ.killcount)," scoring spree was ended by a teammate!\n");
@@ -329,9 +328,13 @@
 						bprint ("^1",s, "^1 was fragged by ", a, "\n");
 				}
 				if(g_ctf && targ.flagcarried)
+				{
 					GiveFrags(attacker, targ, cvar("g_ctf_flagscore_kill"));
+					PlayerScore_Add(attacker, SP_CTF_CARRIERKILLS, 1);
+				}
 				else
 					GiveFrags(attacker, targ, 1);
+				PlayerScore_Add(attacker, SP_KILLS, 1);
 				if (targ.killcount > 2) {
 					if(sv_gentle)
 						bprint ("^1",s,"'s ^1", ftos(targ.killcount), " scoring spree was ended by ", a, "\n");
@@ -450,7 +453,9 @@
 				else
 					bprint ("^1",s, "^1 died\n");
 			GiveFrags(targ, targ, -1);
+			PlayerScore_Add(targ, SP_SUICIDES, 1);
 			PlayerScore_Add(targ, SP_DEATHS, 1);
+			// FIXME move this into winning condition checking? or allow READING of the scores?
 			if(targ.frags == -5) {
 				announce(targ, "announcer/male/botlike.ogg");
 			}

Modified: trunk/data/qcsrc/server/g_world.qc
===================================================================
--- trunk/data/qcsrc/server/g_world.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/g_world.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -976,6 +976,7 @@
 
 	FOR_EACH_CLIENT(other)
 	{
+		// FIXME make this use the new score system
 		if ((clienttype(other) == CLIENTTYPE_REAL) || (clienttype(other) == CLIENTTYPE_BOT && cvar("sv_logscores_bots")))
 		{
 			s = strcat(":player:", ftos(other.frags), ":");
@@ -1205,6 +1206,7 @@
 // clear frags for all players but the team given (when they ran out of spawnpoints)
 void ClearFragsForEveryoneBut(.float field, float value)
 {
+	// FIXME make this use the new score system (probably not needed any more, can just send this as an event)
 	entity head;
 	FOR_EACH_PLAYER(head)
 		if(head.field != value)
@@ -1333,6 +1335,7 @@
 // limit.
 float WinningCondition_LMS()
 {
+	// FIXME make this use the new score system
 	entity head;
 	float have_player;
 	float have_players;
@@ -1422,6 +1425,7 @@
 // breaks the time limit.
 float WinningCondition_MaxIndividualScore(float fraglimit)
 {
+	// FIXME kill this
 	float checkrules_oldleaderfrags;
 	entity head;
 
@@ -1460,6 +1464,7 @@
 
 float WinningConditionBase_Teamplay(float fraglimit)
 {
+	// FIXME kill this
 	tdm_old_score = tdm_max_score;
 	tdm_max_score = max4(team1_score, team2_score, team3_score, team4_score);
 
@@ -1506,6 +1511,7 @@
 // case also breaks the time limit.
 float WinningCondition_MaxTeamSum(float fraglimit)
 {
+	// FIXME kill this
 	entity head;
 
 	team1_score = team2_score = team3_score = team4_score = 0;
@@ -1530,6 +1536,7 @@
 // maximum score. The latter case also breaks the time limit.
 float WinningCondition_MaxTeamMax(float fraglimit)
 {
+	// FIXME kill this
 	entity head;
 
 	team1_score = team2_score = team3_score = team4_score = 0;
@@ -1563,6 +1570,7 @@
 
 float WinningCondition_CTF(float capturelimit, float fraglimit)
 {
+	// FIXME kill this
 	if(cvar("g_ctf_win_mode") == 2)
 		return WinningCondition_MaxTeamSum(fraglimit);
 	
@@ -1588,6 +1596,7 @@
 
 void PrintScoreboardFor(entity e, string name, string colorcode, float whichteam)
 {
+	// FIXME kill this, or make it support the new scoring system
 	entity head;
 	float v;
 	float teamvalue;
@@ -1628,6 +1637,7 @@
 
 void PrintScoreboard(entity e)
 {
+	// FIXME kill this, or make it support the new scoring system
 	print_to(e, strcat("Time:      ", ftos(time / 60)));
 	print_to(e, strcat("Timelimit: ", ftos(cvar("timelimit"))));
 	print_to(e, strcat("Fraglimit: ", ftos(cvar("fraglimit"))));
@@ -1696,6 +1706,20 @@
 	cvar_set("g_maplist", result);
 }
 
+float WinningCondition_Scores(float limit)
+{
+	// TODO make everything use THIS winning condition (except LMS perhaps, but... better even LMS)
+	WinningConditionHelper();
+	
+	ClearWinners();
+	if(WinningConditionHelper_winner)
+		WinningConditionHelper_winner.winning = 1;
+	if(WinningConditionHelper_winnerteam >= 0)
+		SetWinners(team, WinningConditionHelper_winnerteam);
+	
+	return GetWinningCode(WinningConditionHelper_topscore >= limit, WinningConditionHelper_equality);
+}
+
 float WinningCondition_RanOutOfSpawns()
 {
 	entity head;

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/keyhunt.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -128,17 +128,9 @@
 	if(intermission_running)
 		return;
 	if(frags_player)
-	{
-		PlayerTeamScore_AddScore(player, frags_player);
-		// FIXME we soon don't use .frags or UpdateFrags any more...
 		UpdateFrags(player, frags_player);
-	}
 	if(key && key.owner && frags_owner)
-	{
-		PlayerTeamScore_AddScore(player, frags_player);
-		// FIXME we soon don't use .frags or UpdateFrags any more...
 		UpdateFrags(key.owner, frags_owner);
-	}
 	if(!cvar("sv_eventlog"))  //output extra info to the console or text file
 		return;
 	s = strcat(":keyhunt:", what, ":", ftos(player.playerid));
@@ -981,7 +973,6 @@
 
 	addstat(STAT_KH_KEYS, AS_INT, kh_state);
 
-#ifdef CSQCSCORES
 	ScoreInfo_Init(kh_teams);
 	ScoreInfo_SetLabel_TeamScore  (ST_SCORE,        "score",     SFL_SORT_PRIO_PRIMARY);
 	ScoreInfo_SetLabel_TeamScore  (ST_KH_CAPS,      "caps",      SFL_SORT_PRIO_MED);
@@ -995,7 +986,6 @@
 	ScoreInfo_SetLabel_PlayerScore(SP_KH_PUSH,      "push",      0);
 	ScoreInfo_SetLabel_PlayerScore(SP_KH_DESTROYED, "destroyed", SFL_DECREASING);
 	ScoreInfo_SetLabel_PlayerScore(SP_KH_KCFRAG,    "kcfrag",    0);
-#endif
 }
 
 void kh_finalize()

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -533,6 +533,7 @@
 	cvar_set("developer", ftos(dev));
 }
 
+#if 0
 void DistributeFragsAmongTeam(entity p, float targetteam, float factor)
 {
 	float nTeam;
@@ -570,6 +571,7 @@
 			if(head.team == targetteam)
 				head.frags = head.frags + DistributeEvenly_Get(1);
 }
+#endif
 
 string Team_ColorCode(float teamid)
 {

Modified: trunk/data/qcsrc/server/scores.qc
===================================================================
--- trunk/data/qcsrc/server/scores.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/scores.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -68,17 +68,22 @@
 	++teamscores_entities_count;
 }
 
-void TeamScore_Add(entity player, float scorefield, float score)
+void TeamScore_AddToTeam(float t, float scorefield, float score)
 {
 	entity s;
 	if(!scores_initialized) return; // FIXME remove this when everything uses this system
-	s = teamscorekeepers[player.team];
+	s = teamscorekeepers[t];
 	if(!s)
 		error("Adding score to unknown team!");
 	s.(teamscores[scorefield]) += score;
 	s.Version += 1;
 }
 
+void TeamScore_Add(entity player, float scorefield, float score)
+{
+	TeamScore_AddToTeam(player.team, scorefield, score);
+}
+
 float TeamScore_Compare(entity t1, entity t2)
 {
 	if(!t1 || !t2) return (!t2) - !t1;

Modified: trunk/data/qcsrc/server/scores.qh
===================================================================
--- trunk/data/qcsrc/server/scores.qh	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/scores.qh	2008-07-25 13:10:08 UTC (rev 3907)
@@ -30,6 +30,12 @@
 void TeamScore_Add(entity player, float scorefield, float score);
 
 /**
+ * Adds a score to the given team.
+ * NEVER call this if team has not been set yet!
+ */
+void TeamScore_AddToTeam(float t, 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);

Modified: trunk/data/qcsrc/server/teamplay.qc
===================================================================
--- trunk/data/qcsrc/server/teamplay.qc	2008-07-25 11:59:41 UTC (rev 3906)
+++ trunk/data/qcsrc/server/teamplay.qc	2008-07-25 13:10:08 UTC (rev 3907)
@@ -25,17 +25,6 @@
 
 void TeamchangeFrags(entity e)
 {
-#ifndef CSQCSCORES
-	if(g_ctf)
-	{
-		e.captures = 0;
-	}
-	if(e.classname == "player")
-	{
-		// reduce frags during a team change
-		DistributeFragsAmongTeam(e, (e.clientcolors & 0x0F) + 1, 1 - cvar("g_changeteam_fragtransfer") / 100);
-	}
-#endif
 	PlayerScore_Clear(e);
 }
 
@@ -373,6 +362,7 @@
 	{
 		if(self.classname == "observer")
 		{
+			// FIXME this is broken for LMS, fix it
 			if(g_lms && self.frags <= 0 && self.frags > -666)
 				return centerprint_atprio(self, CENTERPRIO_SPAM, strcat(NEWLINES, "^1You have no more lives left\nwait for next round\n\n\n^7press attack to spectate other players"));
 			else if(g_lms && self.frags == -666)
@@ -380,6 +370,7 @@
 		}
 		else if(self.classname == "spectator")
 		{
+			// FIXME this is broken for LMS, fix it
 			if ((g_lms && self.frags < 1) || g_arena)
 				return centerprint_atprio(self, CENTERPRIO_SPAM, strcat(NEWLINES, "spectating ", self.enemy.netname, "\n\n\n^7press attack for next player\npress attack2 for free fly mode"));
 			else {
@@ -1105,6 +1096,7 @@
 	lowest_player_score = 999999999;
 
 	// find the lowest-scoring player & bot of that team
+	// FIXME this is broken in new scoring system, add a helper to find the worst bot of a team
 	FOR_EACH_PLAYER(head)
 	{
 		if(head.team == steam)




More information about the nexuiz-commits mailing list