X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Frace.qc;h=603b32a80c288803f949da637c6ebd32436750e4;hb=8d6f21900d200a9f7941803cb308f483e818dda4;hp=8804063dc6e5c918cb64e1b2912c2a27e99b8771;hpb=d01c567581179df7cc68bcdc8dce58efad911bc4;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/race.qc b/qcsrc/server/race.qc index 8804063dc..603b32a80 100644 --- a/qcsrc/server/race.qc +++ b/qcsrc/server/race.qc @@ -14,7 +14,9 @@ #include #include #include -#include "../common/triggers/subs.qh" +#include +#include "../common/mapobjects/subs.qh" +#include #include "../lib/warpzone/util_server.qh" #include "../lib/warpzone/common.qh" #include "../common/mutators/mutator/waypoints/waypointsprites.qh" @@ -29,8 +31,6 @@ void race_InitSpectator() race_SendNextCheckpoint(msg_entity.enemy, 1); } -void W_Porto_Fail(entity this, float failhard); - float race_readTime(string map, float pos) { string rr = ((g_cts) ? CTS_RECORD : ((g_ctf) ? CTF_RECORD : RACE_RECORD)); @@ -84,8 +84,11 @@ void race_writeTime(string map, float t, string myuid) // player has no ranked record yet for (i = RANKINGS_CNT; i > newpos; --i) { - db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(race_readTime(map, i - 1))); - db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1)); + float other_time = race_readTime(map, i - 1); + if (other_time) { + db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), ftos(other_time)); + db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), race_readUID(map, i - 1)); + } } } @@ -104,8 +107,6 @@ string race_readName(string map, float pos) const float MAX_CHECKPOINTS = 255; -spawnfunc(target_checkpoint); - .float race_penalty; .float race_penalty_accumulator; .string race_penalty_reason; @@ -224,6 +225,14 @@ void race_send_speedaward_alltimebest(float msg) WriteString(msg, speedaward_alltimebest_holder); } +void race_send_rankings_cnt(float msg) +{ + WriteHeader(msg, TE_CSQC_RACE); + WriteByte(msg, RACE_NET_RANKINGS_CNT); + int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt); + WriteByte(msg, m); +} + void race_SendRankings(float pos, float prevpos, float del, float msg) { WriteHeader(msg, TE_CSQC_RACE); @@ -316,9 +325,7 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e, } race_SendRankings(newpos, player_prevpos, 0, MSG_ALL); - if(rankings_reply) - strunzone(rankings_reply); - rankings_reply = strzone(getrankings()); + strcpy(rankings_reply, getrankings()); if(newpos == player_prevpos) { @@ -366,9 +373,7 @@ void race_deleteTime(string map, float pos) if(pos == 1) race_send_recordtime(MSG_ALL); - if(rankings_reply) - strunzone(rankings_reply); - rankings_reply = strzone(getrankings()); + strcpy(rankings_reply, getrankings()); } void race_SendTime(entity e, float cp, float t, float tvalid) @@ -442,9 +447,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid) if(t < recordtime || recordtime == 0) { race_checkpoint_records[cp] = t; - if(race_checkpoint_recordholders[cp]) - strunzone(race_checkpoint_recordholders[cp]); - race_checkpoint_recordholders[cp] = strzone(e.netname); + strcpy(race_checkpoint_recordholders[cp], e.netname); if(g_race_qualifying) FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && it.race_checkpoint == cp, { race_SendNextCheckpoint(it, 0); }); } @@ -1089,9 +1092,7 @@ void race_ClearRecords() for(int j = 0; j < MAX_CHECKPOINTS; ++j) { race_checkpoint_records[j] = 0; - if(race_checkpoint_recordholders[j]) - strunzone(race_checkpoint_recordholders[j]); - race_checkpoint_recordholders[j] = string_null; + strfree(race_checkpoint_recordholders[j]); } FOREACH_CLIENT(true, {