Попробуйте этот
Код:
#include <amxmodx>
#include <fakemeta>
#define TASKID 367280
new bool:g_bSolid[33]
new bool:g_bHasSemiclip[33]
new Float:g_fOrigin[33][3]
new g_Time
new g_Work
new const Float:size[][3] =
{
{0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
{0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
{0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
{0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
{0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}
public plugin_init()
{
register_plugin("AntiBlock", "1.2", "pic")
g_Time = register_cvar("antiblock_time", "5.0")
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink")
register_forward(FM_PlayerPostThink, "fwdPlayerPostThink")
register_forward(FM_AddToFullPack, "fwdAddToFullPack_Post", 1)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
}
public event_round_start()
{
if (task_exists(TASKID))
remove_task(TASKID)
g_Work = true
set_task(get_pcvar_float(g_Time), "reset_state", TASKID)
}
public reset_state()
{
g_Work = false
checkstuck
}
public checkstuck()
{
static players[32], num, player
get_players(players, num, "ach")
static Float:origin[3]
static Float:mins[3]
static Float:vec[3]
static o,i
for(i=0; i<num; i++)
{
player = players[i]
pev(player, pev_origin, origin)
if (!is_hull_vacant(origin, player))
{
pev(player, pev_mins, mins)
for (o=0; o < sizeof size; ++o)
{
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_user_alive(player) && is_hull_vacant(vec, player))
{
engfunc(EngFunc_SetOrigin, player, vec)
o = sizeof size
}
}
}
}
}
public fwdPlayerPreThink(plr)
{
if(!g_Work)
return FMRES_IGNORED
static i, players[32], num, player, last_think
get_players(players, num, "ach")
if(last_think > plr)
{
for(i=0; i<num; i++)
{
player = players[i]
if(is_user_alive(player))
{
g_bSolid[player] = pev(player, pev_solid) == SOLID_SLIDEBOX ? true : false
pev(player, pev_origin, g_fOrigin[player])
}
else
g_bSolid[player] = false
}
}
last_think = plr
if(g_bSolid[plr])
{
for(i=0; i<num; i++)
{
player = players[i]
if(g_bSolid[player] && player != plr && get_user_team(player) == get_user_team(plr))
{
set_pev(player, pev_solid, SOLID_NOT)
g_bHasSemiclip[player] = true
}
}
}
return FMRES_IGNORED
}
public fwdPlayerPostThink(plr)
{
if(!g_Work)
return
static i, players[32], num, player
get_players(players, num, "ach")
for(i=0; i<num; i++)
{
player = players[i]
if(g_bHasSemiclip[player])
{
set_pev(player, pev_solid, SOLID_SLIDEBOX)
g_bHasSemiclip[player] = false
}
}
}
public fwdAddToFullPack_Post(es_handle, e, ent, host, hostflags, player, pset)
{
if(player && g_Work)
{
if(g_bSolid[host] && g_bSolid[ent])
set_es(es_handle, ES_Solid, SOLID_NOT)
}
return FMRES_IGNORED
}
public plugin_end()
{
if(task_exists(TASKID))
remove_task(TASKID)
g_Work = false
}
stock bool:is_hull_vacant(const Float:origin[3],id)
{
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true
return false
}
Установлю и настрою FreshBans, DopBan.
Писать в ЛС.