X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Frace.qc;h=9817b3b0e1afaa45675b4755f45989da50afe0d6;hb=25a047405c94dd9872325e83718e17082c6d459a;hp=faeaba930073cb9cc36bcf6f764b015369de6f9f;hpb=d561f76342a7e8060a5a1aae4bab3f2bf56c17aa;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/race.qc b/qcsrc/server/race.qc index faeaba930..9817b3b0e 100644 --- a/qcsrc/server/race.qc +++ b/qcsrc/server/race.qc @@ -167,22 +167,18 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e) // if we didn't hit a return yet, we have a new record! + // if the player does not have a UID we can unfortunately not store the record, as the rankings system relies on UIDs + if(myuid == "") + { + bprint(mynetname, "^1 scored a new record with ^7", TIME_ENCODED_TOSTRING(t), "^1, but lacks a UID, so the record will unfortunately be lost.\n"); + return; + } + oldrec = race_readTime(GetMapname(), newpos); oldrec_holder = race_readName(GetMapname(), newpos); - - // move other rankings out of the way - if (player_prevpos) { // player improved his existing record, only have to iterate on ranks between new and old recs - for (i = player_prevpos; i > newpos; --i) { - race_writeTime(GetMapname(), race_readTime(GetMapname(), i-1), race_readUID(GetMapname(), i-1), i); - } - } else { // player has no ranked record yet - for (i = RANKINGS_CNT; i > newpos; --i) { - race_writeTime(GetMapname(), race_readTime(GetMapname(), i-1), race_readUID(GetMapname(), i-1), i); - } - } // store new ranking - race_writeTime(GetMapname(), t, myuid, 0); // 0 = autodetect pos + race_writeTime(GetMapname(), t, myuid); if (newpos == 1) { write_recordmarker(e, time - TIME_DECODE(t), TIME_DECODE(t)); @@ -281,8 +277,8 @@ void race_SendTime(entity e, float cp, float t, float tvalid) PlayerScore_Add(e, SP_RACE_TIME, snew - s); l = PlayerTeamScore_Add(e, SP_RACE_LAPS, ST_RACE_LAPS, 1); - if(cvar("fraglimit")) - if(l >= cvar("fraglimit")) + if(autocvar_fraglimit) + if(l >= autocvar_fraglimit) race_StartCompleting(); if(race_completing) @@ -310,9 +306,9 @@ void race_SendTime(entity e, float cp, float t, float tvalid) if(cp == race_timed_checkpoint) { race_setTime(GetMapname(), t, e.crypto_idfp, e.netname, e); - if(g_cts && cvar("g_cts_finish_kill_delay")) + if(g_cts && autocvar_g_cts_finish_kill_delay) { - CTS_ClientKill(cvar("g_cts_finish_kill_delay")); + CTS_ClientKill(e); } } if(t < recordtime || recordtime == 0) @@ -746,11 +742,21 @@ void trigger_race_checkpoint_verify() for(trigger = world; (trigger = find(trigger, classname, "trigger_multiple")); ) for(targ = world; (targ = find(targ, targetname, trigger.target)); ) if (targ.classname == "target_checkpoint" || targ.classname == "target_startTimer" || targ.classname == "target_stopTimer") { - targ.wait = -2; + trigger.wait = 0; + trigger.delay = 0; + targ.wait = 0; targ.delay = 0; - setsize(targ, trigger.mins, trigger.maxs); - setorigin(targ, trigger.origin); + // These just make the game crash on some maps with oddly shaped triggers. + // (on the other hand they used to fix the case when two players ran through a checkpoint at once, + // and often one of them just passed through without being registered. Hope it's fixed in a better way now. + // (happened on item triggers too) + // + //targ.wait = -2; + //targ.delay = 0; + + //setsize(targ, trigger.mins, trigger.maxs); + //setorigin(targ, trigger.origin); //remove(trigger); } }