diff --git a/src/zr/cvars.inc b/src/zr/cvars.inc index f5432d3..b6decf2 100644 --- a/src/zr/cvars.inc +++ b/src/zr/cvars.inc @@ -104,6 +104,7 @@ enum CvarsList Handle:CVAR_INFECT_SPAWNTIME_MIN, Handle:CVAR_INFECT_SPAWNTIME_MAX, Handle:CVAR_INFECT_CONSECUTIVE_BLOCK, + Handle:CVAR_INFECT_ROUND_ROBIN, Handle:CVAR_INFECT_WEAPONS_DROP, Handle:CVAR_INFECT_KNIFE_COOLDOWN, Handle:CVAR_INFECT_MAX_DISTANCE, @@ -335,6 +336,7 @@ CvarsCreate() g_hCvarsList[CVAR_INFECT_SPAWNTIME_MIN] = CreateConVar("zr_infect_spawntime_min", "30.0", "Minimum time from the start of the round until picking the mother zombie(s)."); g_hCvarsList[CVAR_INFECT_SPAWNTIME_MAX] = CreateConVar("zr_infect_spawntime_max", "50.0", "Maximum time from the start of the round until picking the mother zombie(s)."); g_hCvarsList[CVAR_INFECT_CONSECUTIVE_BLOCK] = CreateConVar("zr_infect_consecutive_block", "1", "Prevent a player from being chosen as mother zombie two rounds in a row."); + g_hCvarsList[CVAR_INFECT_ROUND_ROBIN] = CreateConVar("zr_infect_round_robin", "1", "Use randomized round-robin (with SteamID cache) for mother zombie infection."); g_hCvarsList[CVAR_INFECT_WEAPONS_DROP] = CreateConVar("zr_infect_weapons_drop", "1", "Force player to drop all weapons on infect, disabling this will strip weapons instead."); g_hCvarsList[CVAR_INFECT_KNIFE_COOLDOWN] = CreateConVar("zr_infect_knife_cooldown", "1.0", "Time in seconds during which knife can not be used after becoming a zombie."); g_hCvarsList[CVAR_INFECT_MAX_DISTANCE] = CreateConVar("zr_infect_max_distance", "80.0", "The maximum allowed distance between a client and an attacker for a successful infection. [0.0 = Disabled]"); diff --git a/src/zr/infect.inc b/src/zr/infect.inc index e5be2f4..4af55d6 100644 --- a/src/zr/infect.inc +++ b/src/zr/infect.inc @@ -537,6 +537,7 @@ public Action:InfectMotherZombie(Handle:timer) } } + new bool:infectroundrobin = GetConVarBool(g_hCvarsList[CVAR_INFECT_ROUND_ROBIN]); new candidatesMain = 0; new candidatesAlt = 0; new Handle:aCandidatesMain = CreateArray(); @@ -550,7 +551,7 @@ public Action:InfectMotherZombie(Handle:timer) if (!g_bInfectMotherLast[client]) { // If client hasn't been chosen this cycle, put into aCandidatesMain array. - if (!SteamidCacheClientExists(g_hInfectMotherCycle, client)) + if (!infectroundrobin || !SteamidCacheClientExists(g_hInfectMotherCycle, client)) { PushArrayCell(aCandidatesMain, client); candidatesMain++; @@ -597,7 +598,7 @@ public Action:InfectMotherZombie(Handle:timer) else { // No main candidates, reset the mother zombie cycle now before infecting anyone else. - if (!resetcycle) + if (infectroundrobin && !resetcycle) { resetcycle = true; // Clear mother zombie round-robin cycle storage. @@ -750,19 +751,14 @@ InfectHumanToZombie(client, attacker = -1, bool:motherinfect = false, bool:respa // Check if consecutive infection protection is enabled. new bool:infectconsecutiveblock = GetConVarBool(g_hCvarsList[CVAR_INFECT_CONSECUTIVE_BLOCK]); - if (infectconsecutiveblock) + new bool:infectroundrobin = GetConVarBool(g_hCvarsList[CVAR_INFECT_ROUND_ROBIN]); + + // If this is a mother infect, update the mother zombie protection status + if (motherinfect) { - // If this is a mother infect, update the mother zombie protection status - if (motherinfect) - { - g_bInfectMotherLast[client] = true; + g_bInfectMotherLast[client] = infectconsecutiveblock; + if(infectroundrobin) SteamidCacheAddClient(g_hInfectMotherCycle, client); - } - } - else - { - // Consecutive infection protection is disabled. No immunity. - g_bInfectMotherLast[client] = false; } // Apply effects.