2018-07-23 12:58:21 +02:00
|
|
|
#include <sourcemod>
|
|
|
|
#include <cstrike>
|
|
|
|
#include <zombiereloaded>
|
|
|
|
|
2018-07-23 17:06:03 +02:00
|
|
|
public Plugin myinfo =
|
2018-07-23 12:58:21 +02:00
|
|
|
{
|
2018-07-23 17:06:03 +02:00
|
|
|
name = "InfectionExploitFix",
|
|
|
|
author = "zaCade & Neon",
|
2018-07-23 12:58:21 +02:00
|
|
|
description = "Fixes Infection Dodge Exploit",
|
2018-07-23 17:06:03 +02:00
|
|
|
version = "1.0",
|
|
|
|
url = ""
|
2018-07-23 12:58:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
#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;
|
|
|
|
}
|