r3779 - in trunk/data/qcsrc: client common server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Jul 6 08:17:47 EDT 2008


Author: blub0
Date: 2008-07-06 08:17:47 -0400 (Sun, 06 Jul 2008)
New Revision: 3779

Modified:
   trunk/data/qcsrc/client/Main.qc
   trunk/data/qcsrc/client/View.qc
   trunk/data/qcsrc/client/main.qh
   trunk/data/qcsrc/client/sbar.qc
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/keyhunt.qc
Log:
Changed keyhunt keystates to use a stat var instead of sending cvars.


Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/client/Main.qc	2008-07-06 12:17:47 UTC (rev 3779)
@@ -22,6 +22,7 @@
 {
 	float i;
 
+	drawfont = 0;
 	menu_visible = FALSE;
 	menu_show = menu_show_error;
 	menu_action = menu_sub_null;
@@ -45,8 +46,6 @@
 // CSQC_Shutdown : Called every time the CSQC code is shutdown (changing maps, quitting, etc)
 void CSQC_Shutdown(void)
 {
-	entity next;
-	
 	buf_del(databuf);
 }
 
@@ -128,7 +127,7 @@
 // The only parameter reflects if the entity is "new" to the client, meaning it just came into the client's PVS.
 void(float bIsNewEntity) CSQC_Ent_Update =
 {
-	float tmp, plnum, msg;
+	float msg;
 	self.enttype = ReadByte();
 	if(self.enttype == ENT_CLIENT_ENTCS)
 	{
@@ -141,7 +140,7 @@
 			case ENTCS_MSG_ONS: ReadONS(bIsNewEntity); break;
 			default:
 				error("unknown ENTCS_MSG type\n");
-			};
+			}
 		}
 	}
 	else

Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/client/View.qc	2008-07-06 12:17:47 UTC (rev 3779)
@@ -107,9 +107,13 @@
 	string kh_carrying, kh_outline;
 	vector red_pos, blue_pos, yellow_pos, pink_pos, kh_size;
 	vector red, blue, yellow, pink;
-	
+
+	/*
 	kh_keys = cvar("kh_keys");  // set in keyhunt.qc
 	kh_keys_status = cvar("kh_keys_status");  // set in keyhunt.qc
+	*/
+	kh_keys = getstati(STAT_KH_KEYS);
+	kh_keys_status = kh_keys / 256;
 	kh_teams_set = cvar("_teams_available");  // set in keyhunt.qc
 
 //	kh_margin_x = 10;

Modified: trunk/data/qcsrc/client/main.qh
===================================================================
--- trunk/data/qcsrc/client/main.qh	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/client/main.qh	2008-07-06 12:17:47 UTC (rev 3779)
@@ -7,7 +7,7 @@
 void() menu_show_error;
 void() menu_sub_null;
 
-void() menu_show; // ptr
+void() menu_show;
 float menu_visible;
 
 float(float bInputType, float nPrimary, float nSecondary) menu_action;
@@ -18,7 +18,6 @@
 void() ctf_menu_show;
 string ctf_temp_1;
 
-
 // --------------------------------------------------------------------------
 // Onslaught
 
@@ -32,6 +31,8 @@
 // --------------------------------------------------------------------------
 // General stuff
 
+float drawfont;
+
 float gametype;
 entity gps_start;
 
@@ -40,8 +41,8 @@
 //float sorted_teams;
 
 // Defs
-.float ctf_state;
-.float health;
+//.float ctf_state;
+//.float health;
 
 // Constants
 const float COLOR_TEAM_RED = 64;
@@ -52,3 +53,6 @@
 const float COLOR_TEAM3       = 12; // yellow
 const float COLOR_TEAM4       = 9; // pink
 const float COLOR_SPECTATOR = 1337;
+
+#define FONT_DEFAULT 0
+#define FONT_USER 8

Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/client/sbar.qc	2008-07-06 12:17:47 UTC (rev 3779)
@@ -12,6 +12,11 @@
 
 void Sbar_FinaleOverlay()
 {
+	vector pos;
+	pos_x = (vid_conwidth - 1)/2;
+	pos_y = 16;
+	pos_z = 0;
+	drawpic(pos, "gfx/finale", '0 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
 }
 
 void Sbar_DrawWeapon(float nr, float fade, float active)
@@ -251,15 +256,17 @@
 
 	str = ftos(tm.sb_frags);
 	tmp_x = 4*8 - strlen(str) * 8;
-	drawstring(pos + tmp, str, '8 8 0', rgb, 1, 0);
+	drawstring(pos + tmp, str, '8 8 0', '1 1 1', 1, 0);
 
+	rgb += '0.3 0.3 0.3';
+	rgb = normalize(rgb * 5);
 	drawstring(pos + '48 0 0', name, '8 8 0', rgb, 1, 0);
 }
 
 void Sbar_DrawScoreboard()
 {
 	// Assume: frags are already sorted
-	float xmin, xmax, ymin, ymax;
+	float xmin, xmax, ymin, ymax, plcount;
 	vector pos, teammin, teammax, rgb;
 	entity pl, tm;
 	float specs;
@@ -267,46 +274,61 @@
 
 	xmin = vid_conwidth / 4;
 	xmax = vid_conwidth - xmin;
-	ymin = 64;
+	ymin = 48 - 26;
 	ymax = vid_conheight - 50;
 
-	pos_x = xmin;
 	pos_y = ymin;
 	pos_z = 0;
 
 	teammin = teammax = '0 0 0';
 	teammin_x = xmin - 2;
 	teammax_x = xmax - 2;
-	
+
+	pos_x = 0.5 * (xmin + xmax) - (24*5);
+	drawfont = FONT_USER+0;
+	drawstring(pos, "Scoreboard", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
+	drawfont = 0;
+	pos_x = xmin;
+	pos_y += 26;
+
 	drawstring(pos, "ping", '8 8 0', '1 1 1', 1, 0);
 	drawstring(pos + '48 0 0', "frags", '8 8 0', '1 1 1', 1, 0);
 	drawstring(pos + '104 0 0', "name", '8 8 0', '1 1 1', 1, 0);
-	pos += '0 16 0';
+	pos_y += 16;
 	
 	if(teamplay)
 	{
-		//for(t = 0; t < 4; ++t)
+		/*teampos_z = 0;
+		teampos_y = pos_y - 40;
+		teampos_x = (vid_conwidth * 0.5) - (numteams*6*12);*/
 		for(tm = sortedTeams.sort_next; tm; tm = tm.sort_next)
 		{
 			if(!tm.sb_player || tm.sb_team == COLOR_SPECTATOR) // no players in it?
 				continue;
 
+			//Sbar_DrawXNum(teampos-sbar, tm.sb_frags, -4, 24, GetTeamRGB(tm.sb_team), 1, DRAWFLAG_NORMAL);
+			//teampos_x += 6*24;
+			Sbar_DrawXNum(pos-'106 0 0'-sbar, tm.sb_frags, 4, 24, GetTeamRGB(tm.sb_team), 1, DRAWFLAG_NORMAL);
+
 			teammin_y = pos_y - 2;
-			teammax_y = pos_y + 2 + 10 * (tm.sb_player+1);
+			teammax_y = pos_y + 2 + 10 * (tm.sb_player);
 			rgb = GetTeamRGB(tm.sb_team);
 			drawfill(teammin, teammax - teammin, rgb, 0.2, DRAWFLAG_NORMAL);
-			Sbar_PrintScoreboardTeamItem(pos, tm, rgb, GetTeamName(tm.sb_team));
-			pos += '0 12 0';
+			/*Sbar_PrintScoreboardTeamItem(pos, tm, rgb, GetTeamName(tm.sb_team));
+			pos_y += 12;*/
 			//for(i = 0; i < maxclients; ++i)
+			plcount = 0;
 			for(pl = sortedPlayers.sort_next; pl; pl = pl.sort_next)
 			{
 				if(pl.sb_team != tm.sb_team)
 					continue;
 				Sbar_PrintScoreboardItem(pos, pl, (pl.sb_player == player_localentnum - 1), 0);
-				pos += '0 10 0';
+				pos_y += 10;
+				++plcount;
 			}
-			
-			pos += '0 12 0';
+			pos_y += 12;
+			if(plcount < 2)
+				pos_y += 12;
 		}
 
 		// rgb := tempvector :)
@@ -508,7 +530,7 @@
 
 void Sbar_MiniDeathmatchOverlay(vector pos)
 {
-	float i, numlines, up, down;
+	float numlines, up, down;
 	entity me, tm, pl;
 	float miniscoreboard_size;
 	miniscoreboard_size = cvar("sbar_miniscoreboard_size");

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/common/constants.qh	2008-07-06 12:17:47 UTC (rev 3779)
@@ -1,10 +1,3 @@
-
-const float STAT_CTF_STATE = 32;
-
-const float CTF_STATE_ATTACK = 1;
-const float CTF_STATE_DEFEND = 2;
-const float CTF_STATE_COMMANDER = 3;
-
 // probably put these in common/
 // so server/ and client/ can be synced better
 const float GAME_DEATHMATCH		= 1;
@@ -160,3 +153,11 @@
 const float TE_CSQC_PING = 100;
 
 const float TE_CSQC_END = 100;
+
+const float STAT_KH_KEYS = 32;
+
+const float STAT_CTF_STATE = 33;
+const float CTF_STATE_ATTACK = 1;
+const float CTF_STATE_DEFEND = 2;
+const float CTF_STATE_COMMANDER = 3;
+

Modified: trunk/data/qcsrc/server/keyhunt.qc
===================================================================
--- trunk/data/qcsrc/server/keyhunt.qc	2008-07-05 19:00:16 UTC (rev 3778)
+++ trunk/data/qcsrc/server/keyhunt.qc	2008-07-06 12:17:47 UTC (rev 3779)
@@ -23,8 +23,12 @@
 
 string kh_Controller_Waitmsg;
 
+// kh_state
+//     bits 0-7: player's key status
+//     bits 8-15: general key status
+.float kh_state;
 .float siren_time;  //  time delay the siren
-.float stuff_time;  //  time delay to stuffcmd a cvar
+//.float stuff_time;  //  time delay to stuffcmd a cvar
 
 float test[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
 //test[0] = status of dropped keys, test[1 - 16] = player #
@@ -209,9 +213,10 @@
 	test[key.owner.playerid] = i;
 
 	kh_show_temp();
+	if(key.owner)
+		key.owner.kh_state = (key.owner.kh_state | 255) - 255 + test[key.owner.playerid];
+	//key.owner.kh_state += test[key.owner.playerid];
 
-	stuffcmd(key.owner, strcat("set kh_keys ", ftos(test[key.owner.playerid]), "\n"));  // send to current player
-
 #ifdef KH_PLAYER_USE_ATTACHMENT
 	entity first;
 	first = key.owner.kh_next;
@@ -296,10 +301,6 @@
 				i += 8;
 		test[key.owner.playerid] = i;
 
-		kh_show_temp();
-
-		stuffcmd(player, strcat("set kh_keys ", ftos(test[key.owner.playerid]), "\n"));  // send to current player
-
 		kh_Key_Attach(key);
 
 		if(key.kh_next == world)
@@ -310,7 +311,12 @@
 			player.waypointsprite_attachedforcarrier.team = player.team;
 		}
 	}
-
+	
+	// moved that here, also update if there's no player
+	kh_show_temp();
+	if(key.owner)
+		key.owner.kh_state = (key.owner.kh_state | 255) - 255 + test[key.owner.playerid];
+		
 	key.pusher = world;
 }
 
@@ -434,12 +440,8 @@
 	key.kh_dropperteam = 0;
 	bprint(player.netname, "^7 picked up the ", key.netname, "\n");
 
-	kh_show_temp();
+	kh_Key_AssignTo(key, player); // this also updates .kh_state
 
-	stuffcmd(player, strcat("set kh_keys ", ftos(test[key.owner.playerid]), "\n"));  // send to current player
-
-	kh_Key_AssignTo(key, player);
-
 	if(kh_Key_AllOwnedByWhichTeam() != -1)
 	{
 		kh_interferemsg_time = time + 0.2;
@@ -493,18 +495,19 @@
 void kh_Key_Think()  // runs all the time
 {
 	entity head;
-	entity player;  // needed by FOR_EACH_PLAYER
+	//entity player;  // needed by FOR_EACH_PLAYER
 
 	if(intermission_running)
 		return;
-
+	/*
 	if(time > self.stuff_time)
 	{
 		FOR_EACH_PLAYER(player)
-			stuffcmd(player, strcat("set kh_keys_status ", ftos(test[0]), "\n"));  // send key status to all players
+			player.kh_state = test[0]*256 + (player.kh_state&255);
 
 		self.stuff_time = time + 1;  // repeat in 1 second
 	}
+	*/
 
 #ifdef KH_KEY_ATTACHMENT_DEBUG
 	if(self.kh_prev == self.owner)
@@ -946,6 +949,8 @@
 	setmodel(kh_controller, "models/sprites/keycarrier-yellow.sp2");
 	kh_sprite_yellow = kh_controller.modelindex;
 	setmodel(kh_controller, "");
+
+	addstat(STAT_KH_KEYS, AS_INT, kh_state);
 }
 
 void kh_finalize()
@@ -956,34 +961,23 @@
 	kh_controller = world;
 }
 
+/**
+ * kh_show_temp originally by victim.
+ * changed it to use the kh_state stat var
+ * Updates the general key stat bits for each player
+ */
 void kh_show_temp()
 {
 	entity player;
 	float i, j;
 
-	switch(kh_teams)
-	{
-		case 2:
-			j = 3;
-			break;
-		case 3:
-			j = 7;
-			break;
-		case 4:
-			j = 15;
-			break;
-		case 5:
-			j = 31;
-			break;
-	}
-
 	j = 0;  // reset/blank j
 	for(i=1; i<17; ++i)  // replace 17 with cvar("maxplayers"); !!!!!!!!!
 		j += test[i];
 
 	test[0] = j;
 
+	j *= 256;
 	FOR_EACH_PLAYER(player)
-		stuffcmd(player, strcat("set kh_keys_status ", ftos(test[0]), "\n"));  // send key status to all players
-
-}
\ No newline at end of file
+		player.kh_state = j + (player.kh_state & 255); // update the general key bits
+}




More information about the nexuiz-commits mailing list