diff --git a/InfectionExploitFix/scripting/InfectionExploitFix.sp b/InfectionExploitFix/scripting/InfectionExploitFix.sp new file mode 100644 index 0000000..9f04939 --- /dev/null +++ b/InfectionExploitFix/scripting/InfectionExploitFix.sp @@ -0,0 +1,78 @@ +#include +#include +#include + +public Plugin myinfo = +{ + name = "InfectionExploitFix", + author = "zaCade & Neon", + description = "Fixes Infection Dodge Exploit", + version = "1.0", + url = "" +} + +#pragma semicolon 1 +#pragma newdecls required + +bool g_bZombieSpawned = false; +bool g_bCriticalWindow = false; + +Handle g_hTimerHandle = INVALID_HANDLE; + +public void OnPluginStart() +{ + HookEvent("player_spawn", OnPlayerSpawn, EventHookMode_Post); + HookEvent("round_freeze_end", OnRoundStart, EventHookMode_PostNoCopy); + HookEvent("round_end", OnRoundEnd, EventHookMode_PostNoCopy); +} + +public void OnMapStart() +{ + g_bZombieSpawned = false; + g_bCriticalWindow = false; +} + +public void OnRoundStart(Event event, const char[] name, bool dontBroadcast) +{ + g_hTimerHandle = CreateTimer(20.0, PreventSpawnExploitStop, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); + + g_bZombieSpawned = false; + g_bCriticalWindow = true; +} + +public void OnRoundEnd(Event event, const char[] name, bool dontBroadcast) +{ + if (g_hTimerHandle != INVALID_HANDLE && KillTimer(g_hTimerHandle)) + g_hTimerHandle = INVALID_HANDLE; + + g_bZombieSpawned = false; + g_bCriticalWindow = false; +} + +public void OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast) +{ + int client = GetClientOfUserId(event.GetInt("userid")); + + if (g_bZombieSpawned && g_bCriticalWindow && GetClientTeam(client) >= CS_TEAM_T) + RequestFrame(OnPlayerSpawnPost, client); +} + +public void OnPlayerSpawnPost(int client) +{ + if (IsClientInGame(client) && IsPlayerAlive(client)) + ZR_InfectClient(client); +} + +public Action ZR_OnClientInfect(int &client, int &attacker, bool &motherInfect, bool &respawnOverride, bool &respawn) +{ + if (!g_bZombieSpawned && motherInfect) + g_bZombieSpawned = true; +} + +public Action PreventSpawnExploitStop(Handle timer) +{ + if (g_hTimerHandle != INVALID_HANDLE) + g_hTimerHandle = INVALID_HANDLE; + + g_bCriticalWindow = false; +} \ No newline at end of file