set g_lms_leader_wp_max_relative 0.5 "show waypoints for leaders only if they are max this fraction of total players"
set g_lms_leader_wp_time 5 "show waypoints for leaders only for this amount of time"
set g_lms_leader_wp_time_repeat 30 "periodically show again waypoints for leaders after this amount of time"
+set g_lms_dynamic_respawn_delay 1 "increase player respawn delay based on the number of lives less than the leader (NOTE: delay doesn't increase when only 2 players are left alive)"
+set g_lms_dynamic_respawn_delay_base 2 "base player respawn delay"
+set g_lms_dynamic_respawn_delay_increase 3 "increase base player respawn delay by this amount of time for each life less than the leader"
// =========
float autocvar_g_lms_leader_wp_max_relative;
float autocvar_g_lms_leader_wp_time;
float autocvar_g_lms_leader_wp_time_repeat;
+float autocvar_g_lms_dynamic_respawn_delay;
+float autocvar_g_lms_dynamic_respawn_delay_base;
+float autocvar_g_lms_dynamic_respawn_delay_increase;
.float lms_wp_time;
}
}
+MUTATOR_HOOKFUNCTION(lms, CalculateRespawnTime)
+{
+ entity player = M_ARGV(0, entity);
+ player.respawn_flags |= RESPAWN_FORCE;
+
+ if (autocvar_g_lms_dynamic_respawn_delay <= 0)
+ return false;
+
+ int pl_lives = GameRules_scoring_add(player, LMS_LIVES, 0);
+ int max_lives = 0;
+ int pl_cnt = 0;
+ FOREACH_CLIENT(it != player && IS_PLAYER(it) && it.frags != FRAGS_PLAYER_OUT_OF_GAME, {
+ int lives = GameRules_scoring_add(it, LMS_LIVES, 0);
+ if (lives > max_lives)
+ max_lives = lives;
+ pl_cnt++;
+ });
+
+ // min delay with only 2 players
+ if (pl_cnt == 1) // player wasn't counted
+ max_lives = 0;
+
+ player.respawn_time = time + autocvar_g_lms_dynamic_respawn_delay_base +
+ autocvar_g_lms_dynamic_respawn_delay_increase * max(0, max_lives - pl_lives);
+ return true;
+}
+
MUTATOR_HOOKFUNCTION(lms, ForbidSpawn)
{
entity player = M_ARGV(0, entity);
return false;
}
-MUTATOR_HOOKFUNCTION(lms, PlayerDies)
-{
- entity frag_target = M_ARGV(2, entity);
-
- frag_target.respawn_flags |= RESPAWN_FORCE;
-}
-
void lms_RemovePlayer(entity player)
{
static int quitters = 0;