sm-plugins/_InfectionExploitFix/scripting/InfectionExploitFix.sp

78 lines
1.9 KiB
SourcePawn
Raw Normal View History

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