#pragma semicolon 1
bool
bHumans,
bNades;
int
iOffset;
public Plugin myinfo =
{
name = "NoBlock",
author = "Otstrel.ru Team, Xines",
description = "Removes player collisions!",
version = "2.0 (rewritten by Grey83)"
}
public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
if((iOffset = FindSendPropInfo("CBaseEntity", "m_CollisionGroup")) > 0)
return APLRes_Success;
FormatEx(error, err_max, "Unable toi find offset CBaseEntity::m_CollisionGroup!");
return APLRes_Failure;
}
public void OnPluginStart()
{
ConVar cvar;
cvar = CreateConVar("sm_noblock", "1", "Removes player vs. player collisions", _, true, _, true, 1.0);
cvar.AddChangeHook(CVarChange_Humans);
CVarChange_Humans(cvar, "", "");
cvar = CreateConVar("sm_noblock_nade", "1", "Removes player vs. nade collisions", FCVAR_NOTIFY, true, _, true, 1.0);
bNades = cvar.BoolValue;
cvar.AddChangeHook(CVarChange_Nades);
AutoExecConfig(true, "noblock_v2");
}
public void CVarChange_Humans(ConVar cvar, const char[] oldValue, const char[] newValue)
{
bHumans = cvar.BoolValue;
static bool hooked;
if(hooked == bHumans) return;
if(!(hooked = !hooked))
UnhookEvent("player_spawn", Event_Spawn);
else HookEvent("player_spawn", Event_Spawn);
for(int i = 1, val = bHumans ? 2 : 5; i <= MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i)) SetEntData(i, iOffset, val, 4, true);
}
public void CVarChange_Nades(ConVar cvar, const char[] oldValue, const char[] newValue)
{
bNades = cvar.BoolValue;
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
if(client && IsPlayerAlive(client)) SetEntData(client, iOffset, 2, 4, true);
}
public void OnEntityCreated(int entity, const char[] cls)
{
if(bHumans && bNades && (!strcmp(cls, "hegrenade_projectile")
|| !strcmp(cls, "flashbang_projectile") || !strcmp(cls, "smokegrenade_projectile")))
SetEntData(entity, iOffset, 2, 4, true);
}