#include <sdkhooks>
public Plugin myinfo =
{
name = "NoBlock_LCTRL",
author = "AlmazON | Psychologist21 & Drumanid",
description = "NoBlock - Подсадка Игроков через L-CTRL",
version = "1.2 fix",
}
new bool:g_bBlock[MAXPLAYERS+1], g_offsCollisionGroup;
public OnPluginStart()
{
if((g_offsCollisionGroup = FindSendPropOffs("CBaseEntity", "m_CollisionGroup")) == -1) SetFailState("Offset \"m_CollisionGroup\" not found!");
HookEvent("round_start", round_start);
//HookEvent("player_spawn", player_spawn); // Для surf/mg/deathmatch и другие... (Где игрок возрождается после смерти). Раскоминтируйте строку и public player_spawn, если хотите чтобы плагин корректно работал.
}
public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
for (new i = 1; i <= GetMaxClients(); i++)
{
CreateTimer(0.1, PlayerBlock, i);
}
}
/*public player_spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
for (new i = 1; i <= GetMaxClients(); i++)
{
CreateTimer(0.1, PlayerBlock, i);
}
}*/
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
if(buttons & IN_DUCK && g_bBlock[client] == false)
{
SDKHook(client, SDKHook_Touch, PlayerTouch);
SetEntData(client, g_offsCollisionGroup, 5, 4, true);
CreateTimer(0.5, PlayerBlock, client);
g_bBlock[client] = true;
}
return Plugin_Continue;
}
public Action:PlayerTouch(client, entity)
{
if(0 < entity <= MaxClients && g_bBlock[entity] == false)
{
SetEntData(entity, g_offsCollisionGroup, 2, 4, true);
CreateTimer(0.1, PlayerBlock, entity);
g_bBlock[entity] = true;
}
return Plugin_Continue;
}
public Action:PlayerBlock(Handle:timer, any:client)
{
g_bBlock[client] = false;
SDKUnhook(client, SDKHook_Touch, PlayerTouch);
if(IsClientInGame(client)) SetEntData(client, g_offsCollisionGroup, 2, 4, true);
return Plugin_Stop;
}