#include <common/net_linked.qh>
#include <common/net_notice.qh>
#include <common/scores.qh>
-#include <common/triggers/include.qh>
+#include <common/mapobjects/_mod.qh>
#include <common/vehicles/all.qh>
#include <lib/csqcmodel/cl_model.qh>
#include <lib/csqcmodel/interpolate.qh>
strcpy(race_speedaward_alltimebest_holder, ReadString());
strcpy(race_speedaward_alltimebest_unit, GetSpeedUnit(autocvar_hud_panel_physics_speed_unit));
break;
+ case RACE_NET_RANKINGS_CNT:
+ RANKINGS_DISPLAY_CNT = ReadByte();
+ break;
case RACE_NET_SERVER_RANKINGS:
float prevpos, del;
int pos = ReadShort();
// move other rankings out of the way
int i;
if (prevpos) {
- for (i=prevpos-1;i>pos-1;--i) {
+ int m = min(prevpos, RANKINGS_DISPLAY_CNT);
+ for (i=m-1; i>pos-1; --i) {
grecordtime[i] = grecordtime[i-1];
strcpy(grecordholder[i], grecordholder[i-1]);
}
} else if (del) { // a record has been deleted by the admin
- for (i=pos-1; i<= RANKINGS_CNT-1; ++i) {
- if (i == RANKINGS_CNT-1) { // clear out last record
+ for (i=pos-1; i<= RANKINGS_DISPLAY_CNT-1; ++i) {
+ if (i == RANKINGS_DISPLAY_CNT-1) { // clear out last record
grecordtime[i] = 0;
strfree(grecordholder[i]);
}
}
}
} else { // player has no ranked record yet
- for (i=RANKINGS_CNT-1;i>pos-1;--i) {
+ for (i=RANKINGS_DISPLAY_CNT-1;i>pos-1;--i) {
grecordtime[i] = grecordtime[i-1];
strcpy(grecordholder[i], grecordholder[i-1]);
}
}
+ if (grecordtime[RANKINGS_DISPLAY_CNT]) {
+ // kick off the player who fell from the last displayed position
+ grecordtime[RANKINGS_DISPLAY_CNT] = 0;
+ strfree(grecordholder[RANKINGS_DISPLAY_CNT]);
+ }
+
// store new ranking
strcpy(grecordholder[pos-1], ReadString());
grecordtime[pos-1] = ReadInt24_t();