From 199ffff3f296bdac2e8cd7fc2468e833d8f28d96 Mon Sep 17 00:00:00 2001 From: fruitiex Date: Tue, 13 Oct 2009 18:43:02 +0000 Subject: [PATCH] speed awards for CTS! git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8120 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/Defs.qc | 2 ++ data/qcsrc/client/Main.qc | 4 ++++ data/qcsrc/client/sbar.qc | 7 ++++++- data/qcsrc/common/constants.qh | 1 + data/qcsrc/server/cl_client.qc | 2 ++ data/qcsrc/server/cl_physics.qc | 27 +++++++++++++++++++++++++++ 6 files changed, 42 insertions(+), 1 deletion(-) diff --git a/data/qcsrc/client/Defs.qc b/data/qcsrc/client/Defs.qc index 5340abda8..9295bf8ad 100644 --- a/data/qcsrc/client/Defs.qc +++ b/data/qcsrc/client/Defs.qc @@ -193,6 +193,8 @@ float race_penaltyeventtime; // time when the player got the penalty float race_penaltytime; // duration of penalty time, in tenths string race_penaltyreason; // reason for penalty float race_server_record; // server record +float race_speed_award; +string race_speed_award_holder; // RACE float race_mycheckpoint; diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index 72cd9998d..95334cae5 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -1031,6 +1031,10 @@ void Net_ReadRace() case RACE_NET_SERVER_RECORD: race_server_record = ReadInt24_t(); break; + case RACE_NET_SPEED_AWARD: + race_speed_award = ReadShort(); + race_speed_award_holder = strzone(ReadString()); + break; } } diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index 34a1b47f0..e194bde13 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -1210,9 +1210,14 @@ void Sbar_DrawScoreboard() } } + if(gametype == GAME_CTS && race_speed_award) { + drawcolorcodedstring(pos, strcat("Speed award: ", ftos(race_speed_award), " (", race_speed_award_holder, ")"), sbar_fontsize, sbar_scoreboard_alpha_fg, DRAWFLAG_NORMAL); + pos_y += 1.25 * sbar_fontsize_y; + } + tmp = pos + '0 1.5 0' * sbar_fontsize_y; pos_y += 3 * sbar_fontsize_y; - + // List spectators float specs; specs = 0; diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index 820ed031f..1515e0132 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -60,6 +60,7 @@ const float RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING = 5; // byte nextcheckpoint const float RACE_NET_PENALTY_RACE = 6; // byte penaltytime, string reason const float RACE_NET_PENALTY_QUALIFYING = 7; // byte penaltytime, string reason const float RACE_NET_SERVER_RECORD = 8; // server record, sent to client +const float RACE_NET_SPEED_AWARD = 9; // speed award, sent to client const float ENT_CLIENT = 0; const float ENT_CLIENT_DEAD = 1; diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index b97e3aae7..cf8ce415d 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1466,6 +1466,8 @@ void ClientConnect (void) t = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time"))); race_send_recordtime(t); + if (g_cts) + race_send_speedaward(); } } diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index b604346bc..3073d477a 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -512,6 +512,22 @@ void SpecialCommand() #endif } +float speedaward_speed; +string speedaward_holder; +void race_send_speedaward() +{ + // send the best speed of the round + WRITESPECTATABLE_MSG_ONE({ + WriteByte(MSG_ONE, SVC_TEMPENTITY); + WriteByte(MSG_ONE, TE_CSQC_RACE); + WriteByte(MSG_ONE, RACE_NET_SPEED_AWARD); + WriteShort(MSG_ONE, floor(speedaward_speed+0.5)); + WriteString(MSG_ONE, speedaward_holder); +}); +} + +float speedaward_lastupdate; +float speedaward_lastsent; void SV_PlayerPhysics() { local vector wishvel, wishdir, v; @@ -1157,6 +1173,17 @@ void SV_PlayerPhysics() } } + if(g_cts && self.classname != "observer") { + if(vlen(self.velocity - self.velocity_z * '0 0 1') > speedaward_speed) { + speedaward_speed = vlen(self.velocity - self.velocity_z * '0 0 1'); + speedaward_holder = self.netname; + speedaward_lastupdate = time; + } + if(speedaward_speed > speedaward_lastsent && time - speedaward_lastupdate > 1) { + race_send_speedaward(); + speedaward_lastsent = speedaward_speed; + } + } :end if(self.flags & FL_ONGROUND) self.lastground = time; -- 2.39.2