#include <sdktools>
float fProtectTime;
bool bHooked;
public Plugin myinfo =
{
name = "EazySpawnProtector",
description = "Spawn protection",
author = "DUCK (vk.com/geliydaun)",
version = "1.0.2",
url = "http://crystals.pw/"
};
public void OnPluginStart()
{
ConVar cvar;
(cvar = CreateConVar("sm_spawnprotect_time", "7", "Время защиты с начала раунда, сек.", FCVAR_NOTIFY, true, _)).AddChangeHook(CVarChanged_ProtectTime);
fProtectTime = cvar.FloatValue;
HookEvent("round_start", Event_RoundStart)
HookEvent("round_end", Event_RoundEnd)
}
public void CVarChanged_ProtectTime(ConVar cvar, char[] oldValue, char[] newValue)
{
fProtectTime = cvar.FloatValue;
}
public void OnMapStart()
{
if(fProtectTime) bHooked = HookEventEx("player_spawn", Event_PlayerSpawn);
}
public void OnMapEnd()
{
if(bHooked) UnhookEvent("player_spawn", Event_PlayerSpawn);
bHooked = false;
}
public void Event_RoundStart(Handle hEvent, char[] name, bool dbc)
{
if(!fProtectTime || !bHooked) return;
PrintToChatAll(" \x04[SpawnProtection] \x01Все игроки защищены от урона на\x04 %i \x01сек.", fProtectTime);
CreateTimer(fProtectTime, StopProtectTimer, _, TIMER_FLAG_NO_MAPCHANGE);
}
public Action StopProtectTimer(Handle timer)
{
UnhookEvent("player_spawn", Event_PlayerSpawn);
PrintToChatAll(" \x04[SpawnProtection] \x01Защита от урона снята!");
for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && IsPlayerAlive(i)) SetEntProp(i, Prop_Data, "m_takedamage", 2);
}
public void Event_RoundEnd(Handle hEvent, char[] name, bool dbc)
{
if(fProtectTime) bHooked = HookEventEx("player_spawn", Event_PlayerSpawn);
}
public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
static int client;
if((client = GetClientOfUserId(event.GetInt("userid")))) SetEntProp(client, Prop_Data, "m_takedamage", 0);
}