X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fgamemodes%2Fgamemode%2Fcts%2Fsv_cts.qc;h=45457d1a4d8adb895ea40b39e4ad89b458d2b495;hb=c54fc38822d3642085daf5300dedfbb7b15e7e02;hp=84b35bbf67ffcf07f35c385747fef12d71d55b51;hpb=1444d1344376531d3e57839c9ec829105875698e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc b/qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc index 84b35bbf6..45457d1a4 100644 --- a/qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc +++ b/qcsrc/common/gamemodes/gamemode/cts/sv_cts.qc @@ -1,7 +1,13 @@ #include "sv_cts.qh" +#include #include -#include +#include +#include +#include +#include +#include +#include float autocvar_g_cts_finish_kill_delay; bool autocvar_g_cts_selfdamage; @@ -50,7 +56,6 @@ void cts_ScoreRules() GameRules_score_enabled(false); GameRules_scoring(0, 0, 0, { if (g_race_qualifying) { - field(SP_CTS_STRAFE, "strafe", 0); field(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME); } else { field(SP_RACE_LAPS, "laps", SFL_SORT_PRIO_PRIMARY); @@ -135,7 +140,6 @@ MUTATOR_HOOKFUNCTION(cts, PlayerPhysics) CS(player).movement_y = -M_SQRT1_2 * wishspeed; } } - calculate_strafe_efficiency(player, CS(player).movement); } MUTATOR_HOOKFUNCTION(cts, reset_map_global) @@ -145,12 +149,9 @@ MUTATOR_HOOKFUNCTION(cts, reset_map_global) Score_NicePrint(NULL); race_ClearRecords(); - PlayerScore_Sort(race_place, 0, 1, 0); + PlayerScore_Sort(race_place, 0, true, false); FOREACH_CLIENT(true, { - it.strafe_efficiency_best = -2; - PlayerScore_Set(it, SP_CTS_STRAFE, it.strafe_efficiency_best * 10000); - if(it.race_place) { s = GameRules_scoring_add(it, RACE_FASTEST, 0); @@ -178,30 +179,7 @@ MUTATOR_HOOKFUNCTION(cts, ClientConnect) race_PreparePlayer(player); player.race_checkpoint = -1; - if(IS_REAL_CLIENT(player)) - { - string rr = CTS_RECORD; - - msg_entity = player; - race_send_recordtime(MSG_ONE); - race_send_speedaward(MSG_ONE); - - speedaward_alltimebest = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"))); - speedaward_alltimebest_holder = uid2name(db_get(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp"))); - race_send_speedaward_alltimebest(MSG_ONE); - - float i; - int m = min(RANKINGS_CNT, autocvar_g_cts_send_rankings_cnt); - race_send_rankings_cnt(MSG_ONE); - for (i = 1; i <= m; ++i) - { - race_SendRankings(i, 0, 0, MSG_ONE); - } - - player.strafe_efficiency_average = player.strafe_efficiency_tics = 0; - player.strafe_efficiency_best = -2; - PlayerScore_Set(player, SP_CTS_STRAFE, player.strafe_efficiency_best * 10000); - } + race_SendAll(player, false); } MUTATOR_HOOKFUNCTION(cts, AbortSpeedrun) @@ -215,6 +193,7 @@ MUTATOR_HOOKFUNCTION(cts, AbortSpeedrun) MUTATOR_HOOKFUNCTION(cts, MakePlayerObserver) { entity player = M_ARGV(0, entity); + if(GameRules_scoring_add(player, RACE_FASTEST, 0)) player.frags = FRAGS_PLAYER_OUT_OF_GAME; else @@ -256,6 +235,13 @@ MUTATOR_HOOKFUNCTION(cts, PutClientInServer) } } +MUTATOR_HOOKFUNCTION(cts, PlayerDamaged) +{ + int frag_deathtype = M_ARGV(5, int); + if (frag_deathtype == DEATH_KILL.m_id) + return true; // forbid logging damage +} + MUTATOR_HOOKFUNCTION(cts, PlayerDies) { entity frag_target = M_ARGV(2, entity); @@ -263,8 +249,6 @@ MUTATOR_HOOKFUNCTION(cts, PlayerDies) frag_target.respawn_flags |= RESPAWN_FORCE; race_AbandonRaceCheck(frag_target); - frag_target.strafe_efficiency_average = frag_target.strafe_efficiency_tics = 0; - if(autocvar_g_cts_removeprojectiles) { IL_EACH(g_projectiles, it.owner == frag_target && (it.flags & FL_PROJECTILE), @@ -286,42 +270,8 @@ MUTATOR_HOOKFUNCTION(cts, GetPressedKeys) { entity player = M_ARGV(0, entity); - if(CS(player).cvar_cl_allow_uidtracking == 1 && CS(player).cvar_cl_allow_uid2name == 1) - { - if (!player.stored_netname) - player.stored_netname = strzone(uid2name(player.crypto_idfp)); - if(player.stored_netname != player.netname) - { - db_put(ServerProgsDB, strcat("/uid2name/", player.crypto_idfp), player.netname); - strcpy(player.stored_netname, player.netname); - } - } - - if (!IS_OBSERVER(player)) - { - if(vdist(player.velocity - player.velocity_z * '0 0 1', >, speedaward_speed)) - { - speedaward_speed = vlen(player.velocity - player.velocity_z * '0 0 1'); - speedaward_holder = player.netname; - speedaward_uid = player.crypto_idfp; - speedaward_lastupdate = time; - } - if (speedaward_speed > speedaward_lastsent && time - speedaward_lastupdate > 1) - { - string rr = CTS_RECORD; - race_send_speedaward(MSG_ALL); - speedaward_lastsent = speedaward_speed; - if (speedaward_speed > speedaward_alltimebest && speedaward_uid != "") - { - speedaward_alltimebest = speedaward_speed; - speedaward_alltimebest_holder = speedaward_holder; - speedaward_alltimebest_uid = speedaward_uid; - db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/speed"), ftos(speedaward_alltimebest)); - db_put(ServerProgsDB, strcat(GetMapname(), rr, "speed/crypto_idfp"), speedaward_alltimebest_uid); - race_send_speedaward_alltimebest(MSG_ALL); - } - } - } + race_checkAndWriteName(player); + race_SpeedAwardFrame(player); } MUTATOR_HOOKFUNCTION(cts, ForbidThrowCurrentWeapon) @@ -390,13 +340,6 @@ MUTATOR_HOOKFUNCTION(cts, ClientKill) MUTATOR_HOOKFUNCTION(cts, Race_FinalCheckpoint) { entity player = M_ARGV(0, entity); - float strafe_efficiency_current = player.strafe_efficiency_average / player.strafe_efficiency_tics; - - if(player.strafe_efficiency_best < strafe_efficiency_current) - { - player.strafe_efficiency_best = strafe_efficiency_current; - PlayerScore_Set(player, SP_CTS_STRAFE, player.strafe_efficiency_best * 10000); - } // useful to prevent cheating by running back to the start line and starting out with more speed if(autocvar_g_cts_finish_kill_delay) @@ -429,5 +372,6 @@ MUTATOR_HOOKFUNCTION(cts, ForbidDropCurrentWeapon) void cts_Initialize() { + record_type = CTS_RECORD; cts_ScoreRules(); }