Add option to disable random round-robin mother infection cycle

This commit is contained in:
BotoX 2020-12-06 18:43:19 +01:00
parent d15957de1b
commit f9193641d2
2 changed files with 11 additions and 13 deletions

View File

@ -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]");

View File

@ -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,20 +751,15 @@ 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)
{
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.
InfectFireEffects(client);