X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Frace.qc;h=0cac389aaf753368f18ce4e52b23a5fb6357d5a1;hb=f34e36384aea3cb5e6c6818de704e6da2ee125b5;hp=fbf1eaa185af29a2b6a5d3ab61b72410e6763e6c;hpb=a97b89297fa91ae42b9d56c262662eb34ede3e45;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/race.qc b/qcsrc/server/race.qc index fbf1eaa18..0cac389aa 100644 --- a/qcsrc/server/race.qc +++ b/qcsrc/server/race.qc @@ -1,5 +1,4 @@ #include "race.qh" -#include "_all.qh" #include "cl_client.qh" #include "portals.qh" @@ -8,10 +7,20 @@ #include "bot/waypoints.qh" #include "bot/navigation.qh" #include "command/getreplies.qh" -#include "../common/deathtypes.qh" +#include "../common/deathtypes/all.qh" #include "../common/notifications.qh" #include "../common/mapinfo.qh" -#include "../warpzonelib/util_server.qh" +#include "../common/triggers/subs.qh" +#include "../lib/warpzone/util_server.qh" +#include "../lib/warpzone/common.qh" +#include "../common/mutators/mutator/waypoints/waypointsprites.qh" + +void race_InitSpectator() +{ + if(g_race_qualifying) + if(msg_entity.enemy.race_laptime) + race_SendNextCheckpoint(msg_entity.enemy, 1); +} void W_Porto_Fail(float failhard); @@ -162,9 +171,8 @@ void race_SendNextCheckpoint(entity e, float spec) // qualifying only if(!spec) msg_entity = e; - WRITESPECTATABLE_MSG_ONE({ - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); if(spec) { WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_NEXT_SPEC_QUALIFYING); @@ -182,8 +190,7 @@ void race_SendNextCheckpoint(entity e, float spec) // qualifying only void race_send_recordtime(float msg) { // send the server best time - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_RACE); + WriteHeader(msg, TE_CSQC_RACE); WriteByte(msg, RACE_NET_SERVER_RECORD); WriteInt24_t(msg, race_readTime(GetMapname(), 1)); } @@ -192,8 +199,7 @@ void race_send_recordtime(float msg) void race_send_speedaward(float msg) { // send the best speed of the round - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_RACE); + WriteHeader(msg, TE_CSQC_RACE); WriteByte(msg, RACE_NET_SPEED_AWARD); WriteInt24_t(msg, floor(speedaward_speed+0.5)); WriteString(msg, speedaward_holder); @@ -202,8 +208,7 @@ void race_send_speedaward(float msg) void race_send_speedaward_alltimebest(float msg) { // send the best speed - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_RACE); + WriteHeader(msg, TE_CSQC_RACE); WriteByte(msg, RACE_NET_SPEED_AWARD_BEST); WriteInt24_t(msg, floor(speedaward_alltimebest+0.5)); WriteString(msg, speedaward_alltimebest_holder); @@ -211,8 +216,7 @@ void race_send_speedaward_alltimebest(float msg) void race_SendRankings(float pos, float prevpos, float del, float msg) { - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_RACE); + WriteHeader(msg, TE_CSQC_RACE); WriteByte(msg, RACE_NET_SERVER_RANKINGS); WriteShort(msg, pos); WriteShort(msg, prevpos); @@ -232,9 +236,8 @@ void race_SendStatus(float id, entity e) else msg = MSG_ALL; msg_entity = e; - WRITESPECTATABLE_MSG_ONE_VARNAME(dummy3, { - WriteByte(msg, SVC_TEMPENTITY); - WriteByte(msg, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(msg, TE_CSQC_RACE); WriteByte(msg, RACE_NET_SERVER_STATUS); WriteShort(msg, id); WriteString(msg, e.netname); @@ -332,8 +335,8 @@ void race_deleteTime(string map, float pos) { if (i == RANKINGS_CNT) { - db_put(ServerProgsDB, strcat(map, rr, "time", ftos(i)), string_null); - db_put(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i)), string_null); + db_remove(ServerProgsDB, strcat(map, rr, "time", ftos(i))); + db_remove(ServerProgsDB, strcat(map, rr, "crypto_idfp", ftos(i))); } else { @@ -354,7 +357,6 @@ void race_deleteTime(string map, float pos) void race_SendTime(entity e, float cp, float t, float tvalid) { float snew, l; - entity p; if(g_race_qualifying) t += e.race_penalty_accumulator; @@ -414,10 +416,7 @@ 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 && autocvar_g_cts_finish_kill_delay) - { - CTS_ClientKill(e); - } + MUTATOR_CALLHOOK(Race_FinalCheckpoint, e); } if(t < recordtime || recordtime == 0) { @@ -427,9 +426,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid) race_checkpoint_recordholders[cp] = strzone(e.netname); if(g_race_qualifying) { - FOR_EACH_REALPLAYER(p) - if(p.race_checkpoint == cp) - race_SendNextCheckpoint(p, 0); + FOREACH_CLIENT(IS_PLAYER(it) && IS_REAL_CLIENT(it) && it.race_checkpoint == cp, LAMBDA(race_SendNextCheckpoint(it, 0))); } } } @@ -447,9 +444,8 @@ void race_SendTime(entity e, float cp, float t, float tvalid) msg_entity = e; if(g_race_qualifying) { - WRITESPECTATABLE_MSG_ONE_VARNAME(dummy1, { - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_QUALIFYING); WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at WriteInt24_t(MSG_ONE, t); // time to that intermediate @@ -476,9 +472,8 @@ void race_SendTime(entity e, float cp, float t, float tvalid) if(IS_REAL_CLIENT(e)) { msg_entity = e; - WRITESPECTATABLE_MSG_ONE_VARNAME(dummy2, { - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_RACE); WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at if(e == oth) @@ -503,9 +498,8 @@ void race_SendTime(entity e, float cp, float t, float tvalid) if(IS_REAL_CLIENT(oth)) { msg_entity = oth; - WRITESPECTATABLE_MSG_ONE_VARNAME(dummy3, { - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_HIT_RACE_BY_OPPONENT); WriteByte(MSG_ONE, race_CheckpointNetworkID(cp)); // checkpoint the player now is at if(e == oth) @@ -537,9 +531,8 @@ void race_ClearTime(entity e) return; msg_entity = e; - WRITESPECTATABLE_MSG_ONE({ - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_CHECKPOINT_CLEAR); // next }); } @@ -672,7 +665,7 @@ void checkpoint_passed() other.race_checkpoint = race_NextCheckpoint(self.race_checkpoint); other.race_started = 1; - race_SendTime(other, self.race_checkpoint, other.race_movetime, !!other.race_laptime); + race_SendTime(other, self.race_checkpoint, other.race_movetime, boolean(other.race_laptime)); if(!self.race_checkpoint) // start line { @@ -704,7 +697,7 @@ void checkpoint_passed() else { if(self.spawnflags & 4) - Damage (other, self, self, 10000, DEATH_HURTTRIGGER, other.origin, '0 0 0'); + Damage (other, self, self, 10000, DEATH_HURTTRIGGER.m_id, other.origin, '0 0 0'); } } @@ -747,7 +740,7 @@ void trigger_race_checkpoint_verify() qual = g_race_qualifying; setself(spawn()); - self.classname = "player"; + self.classname = STR_PLAYER; if(g_race) { @@ -941,7 +934,7 @@ spawnfunc(trigger_race_checkpoint) self.touch = checkpoint_touch; o = (self.absmin + self.absmax) * 0.5; - tracebox(o, PL_MIN, PL_MAX, o - '0 0 1' * (o.z - self.absmin.z), MOVE_NORMAL, self); + tracebox(o, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), o - '0 0 1' * (o.z - self.absmin.z), MOVE_NORMAL, self); waypoint_spawnforitem_force(self, trace_endpos); self.nearestwaypointtimeout = time + 1000000000; @@ -990,7 +983,7 @@ spawnfunc(target_checkpoint) // defrag entity self.touch = checkpoint_touch; o = (self.absmin + self.absmax) * 0.5; - tracebox(o, PL_MIN, PL_MAX, o - '0 0 1' * (o.z - self.absmin.z), MOVE_NORMAL, self); + tracebox(o, STAT(PL_MIN, NULL), STAT(PL_MAX, NULL), o - '0 0 1' * (o.z - self.absmin.z), MOVE_NORMAL, self); waypoint_spawnforitem_force(self, trace_endpos); self.nearestwaypointtimeout = time + 1000000000; @@ -1034,11 +1027,8 @@ void race_AbandonRaceCheck(entity p) void race_StartCompleting() { - entity p; race_completing = 1; - FOR_EACH_PLAYER(p) - if(p.deadflag != DEAD_NO) - race_AbandonRaceCheck(p); + FOREACH_CLIENT(IS_PLAYER(it) && IS_DEAD(it), LAMBDA(race_AbandonRaceCheck(it))); } void race_PreparePlayer() @@ -1083,13 +1073,11 @@ void race_ClearRecords() race_checkpoint_recordholders[i] = string_null; } - entity e; - FOR_EACH_CLIENT(e) - { - float p = e.race_place; - WITH(entity, self, e, race_PreparePlayer()); - e.race_place = p; - } + FOREACH_CLIENT(true, LAMBDA( + float p = it.race_place; + WITH(entity, self, it, race_PreparePlayer()); + it.race_place = p; + )); } void race_ImposePenaltyTime(entity pl, float penalty, string reason) @@ -1100,9 +1088,8 @@ void race_ImposePenaltyTime(entity pl, float penalty, string reason) if(IS_REAL_CLIENT(pl)) { msg_entity = pl; - WRITESPECTATABLE_MSG_ONE({ - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_PENALTY_QUALIFYING); WriteShort(MSG_ONE, TIME_ENCODE(penalty)); WriteString(MSG_ONE, reason); @@ -1115,9 +1102,8 @@ void race_ImposePenaltyTime(entity pl, float penalty, string reason) if(IS_REAL_CLIENT(pl)) { msg_entity = pl; - WRITESPECTATABLE_MSG_ONE_VARNAME(dummy, { - WriteByte(MSG_ONE, SVC_TEMPENTITY); - WriteByte(MSG_ONE, TE_CSQC_RACE); + WRITESPECTATABLE_MSG_ONE(msg_entity, { + WriteHeader(MSG_ONE, TE_CSQC_RACE); WriteByte(MSG_ONE, RACE_NET_PENALTY_RACE); WriteShort(MSG_ONE, TIME_ENCODE(penalty)); WriteString(MSG_ONE, reason); @@ -1143,6 +1129,9 @@ void penalty_use() spawnfunc(trigger_race_penalty) { + // TODO: find out why this wasnt done: + //if(!g_cts && !g_race) { remove(self); return; } + EXACTTRIGGER_INIT; self.use = penalty_use;