#include <sdktools>
// Время между телепортацией и до отключения защиты
static const float fTime = 1.0;
// Текст при включении защиты
static const char sProtectOn[] = "[\x0EAnti-Telekill\x01] \x04You are protected for \x03%0.1f \x04second(s)!",
// Текст при отключении защиты
sProtectOff[] = "[\x0EAnti-Telekill\x01] \x04You are no longer \x03protected \x04from any damage!";
bool InGodMode[MAXPLAYERS+1];
public Plugin myinfo =
{
name = "Telekill Protection",
author = "Hallucinogenic Troll",
description = "A Simple Teleport Protection, to prevent kills right after going through a teleport",
version = "1.4.1_redux",
url = "http://ptfun.net/newsite/"
};
public void OnPluginStart()
{
HookEvent("round_start", Event_RoundBounds, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_RoundBounds, EventHookMode_PostNoCopy);
}
public void OnClientConnected(int client)
{
InGodMode[client] = false;
}
public void Event_RoundBounds(Handle event, const char[] name, bool dontBroadcast)
{
if(name[6] == 'e')
{
UnhookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
for(int i = 1; i <= MaxClients; i++) if(InGodMode[i] && IsClientInGame(i)) ToggleGodMode(i);
}
else HookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
}
public void Output_TeleStartTouch(const char[] output, int caller, int activator, float delay)
{
if(activator < 1 || MaxClients < activator || InGodMode[activator]) return;
ToggleGodMode(activator);
CreateTimer(fTime, Timer_GodMode, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_GodMode(Handle timer, any client)
{
if((client = GetClientOfUserId(client)) && InGodMode[client]) ToggleGodMode(client);
}
stock void ToggleGodMode(client)
{
InGodMode[client] = !InGodMode[client]
if(InGodMode[client])
{
SetEntProp(client, Prop_Data, "m_takedamage", 0, 1);
PrintToChat(client, sProtectOn, fTime);
return;
}
SetEntProp(client, Prop_Data, "m_takedamage", 2, 1);
PrintToChat(client, sProtectOff);
}