diff --git a/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg b/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg index 94d1f2d..f01ac0e 100644 --- a/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg +++ b/cstrike/cfg/sourcemod/zombiereloaded/zombiereloaded.cfg @@ -324,12 +324,16 @@ zr_damage_block_blast "1" // Suicide Intercept // Intercept suicide commands attempted by zombies. +// Default: "0" +zr_damage_suicide_zombie "0" + +// Intercept suicide commands attempted by mother zombies. // Default: "1" -zr_damage_suicide_zombie "1" +zr_damage_suicide_mzombie "1" // Intercept suicide commands attempted by humans. -// Default: "1" -zr_damage_suicide_human "1" +// Default: "0" +zr_damage_suicide_human "0" // List of client commands to intercept as suicide attempts. [Delimiter: ", "] // Default: "kill, spectate, jointeam" diff --git a/src/zr/cvars.inc b/src/zr/cvars.inc index 99b14de..c6fa464 100644 --- a/src/zr/cvars.inc +++ b/src/zr/cvars.inc @@ -73,6 +73,7 @@ enum CvarsList Handle:CVAR_DAMAGE_BLOCK_FF, Handle:CVAR_DAMAGE_BLOCK_BLAST, Handle:CVAR_DAMAGE_SUICIDE_ZOMBIE, + Handle:CVAR_DAMAGE_SUICIDE_MZOMBIE, Handle:CVAR_DAMAGE_SUICIDE_HUMAN, Handle:CVAR_DAMAGE_SUICIDE_CMDS, Handle:CVAR_SAYHOOKS_QUIET, @@ -307,8 +308,9 @@ CvarsCreate() g_hCvarsList[CVAR_DAMAGE_BLOCK_BLAST] = CreateConVar("zr_damage_block_blast", "1", "Block blast damage inflicted on self or teammates."); // Suicide Intercept - g_hCvarsList[CVAR_DAMAGE_SUICIDE_ZOMBIE] = CreateConVar("zr_damage_suicide_zombie", "1", "Intercept suicide commands attempted by zombies."); - g_hCvarsList[CVAR_DAMAGE_SUICIDE_HUMAN] = CreateConVar("zr_damage_suicide_human", "1", "Intercept suicide commands attempted by humans."); + g_hCvarsList[CVAR_DAMAGE_SUICIDE_ZOMBIE] = CreateConVar("zr_damage_suicide_zombie", "0", "Intercept suicide commands attempted by zombies."); + g_hCvarsList[CVAR_DAMAGE_SUICIDE_MZOMBIE] = CreateConVar("zr_damage_suicide_mzombie", "1", "Intercept suicide commands attempted by mother zombies."); + g_hCvarsList[CVAR_DAMAGE_SUICIDE_HUMAN] = CreateConVar("zr_damage_suicide_human", "0", "Intercept suicide commands attempted by humans."); g_hCvarsList[CVAR_DAMAGE_SUICIDE_CMDS] = CreateConVar("zr_damage_suicide_cmds", "kill, spectate, jointeam", "List of client commands to intercept as suicide attempts. [Delimiter: \", \"]"); diff --git a/src/zr/damage.inc b/src/zr/damage.inc index 0c5e650..37e1a24 100644 --- a/src/zr/damage.inc +++ b/src/zr/damage.inc @@ -48,6 +48,11 @@ new g_iDamageTraceAttackHookID[MAXPLAYERS + 1] = {-1, ...}; */ new g_iDamageOnTakeDamageHookID[MAXPLAYERS + 1] = {-1, ...}; +/** + * Array to keep track of normal/mother zombies. + */ +new bool:g_bDamageMotherZombie[MAXPLAYERS + 1]; + /** * Hook commands related to damage here. */ @@ -106,6 +111,18 @@ DamageOnClientDisconnect(client) } } +/** + * A client was infected. + * + * @param client The client index. + * @param motherinfect True if the zombie is mother, false if not. + */ +DamageOnClientInfected(client, bool:motherinfect) +{ + // Update if client is a mother zombie or not. + g_bDamageMotherZombie[client] = motherinfect; +} + /** * Hook: TraceAttack * Called right before the bullet enters a client. @@ -317,18 +334,29 @@ public Action:DamageSuicideIntercept(client, argc) return Plugin_Continue; } - // Get zombie flag on client. - new bool:clientzombie = InfectIsClientInfected(client); - // Get cvar values for suicide interception. new bool:suicidezombie = GetConVarBool(g_hCvarsList[CVAR_DAMAGE_SUICIDE_ZOMBIE]); + new bool:suicidezombiemother = GetConVarBool(g_hCvarsList[CVAR_DAMAGE_SUICIDE_MZOMBIE]); new bool:suicidehuman = GetConVarBool(g_hCvarsList[CVAR_DAMAGE_SUICIDE_HUMAN]); - // Determine whether to block suicide based off of the client's zombie flag and cvar values. - new bool:blocksuicide = clientzombie ? suicidezombie : suicidehuman; + // Check if client is a zombie. + if (InfectIsClientInfected(client)) + { + // If client is a normal zombie, and suicide intercept is disabled for zombies, then let command go. + if (!g_bDamageMotherZombie[client] && !suicidezombie) + { + return Plugin_Continue; + } + + // If client is a mother zombie, and suicide intercept is disabled for mother zombies, then let command go. + if (g_bDamageMotherZombie[client] && !suicidezombiemother) + { + return Plugin_Continue; + } + } - // If cvar for this team is disabled, then stop. - if (!blocksuicide) + // If client is a human, and suicide intercept is disabled for humans, then let command go. + if (InfectIsClientHuman(client) && !suicidehuman) { return Plugin_Continue; } diff --git a/src/zr/infect.inc b/src/zr/infect.inc index 758fb67..939fc56 100644 --- a/src/zr/infect.inc +++ b/src/zr/infect.inc @@ -669,6 +669,7 @@ InfectHumanToZombie(client, attacker = -1, bool:motherinfect = false, bool:respa // Forward event to modules. ClassOnClientInfected(client, motherinfect); RoundEndOnClientInfected(); + DamageOnClientInfected(client, motherinfect); SEffectsOnClientInfected(client); ZTeleOnClientInfected(client); ZHPOnClientInfected(client);