From 7ba966fb094d14fdf9ec69fd2a76436526e0ffb7 Mon Sep 17 00:00:00 2001 From: fruitiex Date: Wed, 14 Oct 2009 10:40:08 +0000 Subject: [PATCH] Fix the race server best and speed award by sending to all clients when neccessary, and add a all time fastest speed award git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8128 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/Defs.qc | 6 ++++-- data/qcsrc/client/Main.qc | 8 +++++-- data/qcsrc/client/sbar.qc | 12 ++++++++--- data/qcsrc/common/constants.qh | 1 + data/qcsrc/server/cl_client.qc | 11 ++++++---- data/qcsrc/server/cl_physics.qc | 38 ++++++++++++++++++++++++--------- data/qcsrc/server/constants.qh | 4 ++-- data/qcsrc/server/race.qc | 16 ++++++-------- 8 files changed, 64 insertions(+), 32 deletions(-) diff --git a/data/qcsrc/client/Defs.qc b/data/qcsrc/client/Defs.qc index 9295bf8ad..7fc96aae0 100644 --- a/data/qcsrc/client/Defs.qc +++ b/data/qcsrc/client/Defs.qc @@ -193,8 +193,10 @@ 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; +float race_speedaward; +string race_speedaward_holder; +float race_speedaward_alltimebest; +string race_speedaward_alltimebest_holder; // RACE float race_mycheckpoint; diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index 95334cae5..b34b8b264 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -1032,8 +1032,12 @@ void Net_ReadRace() race_server_record = ReadInt24_t(); break; case RACE_NET_SPEED_AWARD: - race_speed_award = ReadShort(); - race_speed_award_holder = strzone(ReadString()); + race_speedaward = ReadShort(); + race_speedaward_holder = strzone(ReadString()); + break; + case RACE_NET_SPEED_AWARD_BEST: + race_speedaward_alltimebest = ReadShort(); + race_speedaward_alltimebest_holder = strzone(ReadString()); break; } } diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index 1f634d5ad..1e8bd1b7d 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -1211,9 +1211,15 @@ 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; + if(gametype == GAME_CTS || gametype == GAME_RACE) { + if(race_speedaward) { + drawcolorcodedstring(pos, strcat("Speed award: ", ftos(race_speedaward), " (", race_speedaward_holder, ")"), sbar_fontsize, sbar_scoreboard_alpha_fg, DRAWFLAG_NORMAL); + pos_y += 1.25 * sbar_fontsize_y; + } + if(race_speedaward_alltimebest) { + drawcolorcodedstring(pos, strcat("All-time fastest: ", ftos(race_speedaward_alltimebest), " (", race_speedaward_alltimebest_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; diff --git a/data/qcsrc/common/constants.qh b/data/qcsrc/common/constants.qh index 1515e0132..2106825f3 100644 --- a/data/qcsrc/common/constants.qh +++ b/data/qcsrc/common/constants.qh @@ -61,6 +61,7 @@ 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 RACE_NET_SPEED_AWARD_BEST = 10; // all time best 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 cf8ce415d..73dec0cc0 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -1,4 +1,4 @@ -void race_send_recordtime(float t); +void race_send_recordtime(float t, float msg); float ClientData_Send(entity to, float sf) { @@ -1465,9 +1465,12 @@ void ClientConnect (void) rr = RACE_RECORD; t = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time"))); - race_send_recordtime(t); - if (g_cts) - race_send_speedaward(); + race_send_recordtime(t, MSG_ONE); + race_send_speedaward(MSG_ONE); + + speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), "bestspeed"))); + speedaward_alltimebest_holder = db_get(ServerProgsDB, strcat(GetMapname(), "bestspeed_holder")); + race_send_speedaward_alltimebest(MSG_ONE); } } diff --git a/data/qcsrc/server/cl_physics.qc b/data/qcsrc/server/cl_physics.qc index 3073d477a..9e3969521 100644 --- a/data/qcsrc/server/cl_physics.qc +++ b/data/qcsrc/server/cl_physics.qc @@ -514,18 +514,29 @@ void SpecialCommand() float speedaward_speed; string speedaward_holder; -void race_send_speedaward() +void race_send_speedaward(float msg) { // 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); -}); + WriteByte(msg, SVC_TEMPENTITY); + WriteByte(msg, TE_CSQC_RACE); + WriteByte(msg, RACE_NET_SPEED_AWARD); + WriteShort(msg, floor(speedaward_speed+0.5)); + WriteString(msg, speedaward_holder); } +float speedaward_alltimebest; +string speedaward_alltimebest_holder; +void race_send_speedaward_alltimebest(float msg) +{ + // send the best speed + WriteByte(msg, SVC_TEMPENTITY); + WriteByte(msg, TE_CSQC_RACE); + WriteByte(msg, RACE_NET_SPEED_AWARD_BEST); + WriteShort(msg, floor(speedaward_alltimebest+0.5)); + WriteString(msg, speedaward_alltimebest_holder); +} + +string GetMapname(void); float speedaward_lastupdate; float speedaward_lastsent; void SV_PlayerPhysics() @@ -1173,15 +1184,22 @@ void SV_PlayerPhysics() } } - if(g_cts && self.classname != "observer") { + if((g_cts || g_race) && 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(); + race_send_speedaward(MSG_ALL); speedaward_lastsent = speedaward_speed; + if (speedaward_speed > speedaward_alltimebest) { + speedaward_alltimebest = speedaward_speed; + speedaward_alltimebest_holder = speedaward_holder; + db_put(ServerProgsDB, strcat(GetMapname(), "bestspeed"), ftos(speedaward_alltimebest)); + db_put(ServerProgsDB, strcat(GetMapname(), "bestspeed_holder"), speedaward_alltimebest_holder); + race_send_speedaward_alltimebest(MSG_ALL); + } } } :end diff --git a/data/qcsrc/server/constants.qh b/data/qcsrc/server/constants.qh index 2c524f0b0..731eb2a5e 100644 --- a/data/qcsrc/server/constants.qh +++ b/data/qcsrc/server/constants.qh @@ -1,5 +1,5 @@ -string CVAR_CHECK_DEFAULT = "5d48426c72cdfbf78480870c75601f89"; -string CVAR_CHECK_BALANCE = "7f0cddd65617fa39bd3efb7942dceea9"; +string CVAR_CHECK_DEFAULT = "37cc3aae4b042acd9cf2b71135034bcf"; +string CVAR_CHECK_BALANCE = "1e423b95c67bac7998289473abe8feb1"; float FALSE = 0; float TRUE = 1; diff --git a/data/qcsrc/server/race.qc b/data/qcsrc/server/race.qc index d31e60667..6e4e7e6ad 100644 --- a/data/qcsrc/server/race.qc +++ b/data/qcsrc/server/race.qc @@ -93,15 +93,13 @@ void race_InitSpectator() race_SendNextCheckpoint(msg_entity.enemy, 1); } -void race_send_recordtime(float t) +void race_send_recordtime(float t, float msg) { // send the server best time - WRITESPECTATABLE_MSG_ONE({ - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); - WriteByte(MSG_ONE, RACE_NET_SERVER_RECORD); - WriteInt24_t(MSG_ONE, t); - }); + WriteByte(msg, SVC_TEMPENTITY); + WriteByte(msg, TE_CSQC_RACE); + WriteByte(msg, RACE_NET_SERVER_RECORD); + WriteInt24_t(msg, t); } void race_SendTime(entity e, float cp, float t, float tvalid) @@ -184,7 +182,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid) db_put(ServerProgsDB, strcat(GetMapname(), rr, "time"), ftos(t)); db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname"), e.netname); write_recordmarker(e, time - TIME_DECODE(t), TIME_DECODE(t)); - race_send_recordtime(t); + race_send_recordtime(t, MSG_ALL); } else if(t < grecordtime) { @@ -196,7 +194,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid) db_put(ServerProgsDB, strcat(GetMapname(), rr, "time"), ftos(t)); db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname"), e.netname); write_recordmarker(e, time - TIME_DECODE(t), TIME_DECODE(t)); - race_send_recordtime(t); + race_send_recordtime(t, MSG_ALL); } else { -- 2.39.2