const OFFSET_PAINSHOCK = 108
new in_air[33], old_in_air[33]
new origin1[33][3], origin2[33][3]
new pcvar_bhop_debug_mode, pcvar_jump_distance, pcvar_bhop_speed_x, pcvar_jumps_bhop
new debug_bhop_mode, bhop_dist, Float:bhop_speed_x, bhop_jumps
register_plugin("BHOP BLOCK", VERSION, "Leo_[BH]")
register_forward(FM_PlayerPreThink, "fw_clientPreThink", 0)
register_forward(FM_ClientDisconnect, "fw_ClientDisconnect")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
pcvar_bhop_debug_mode = register_cvar("bhop_debug", "0") // Режим отладки (будут показаны тестовые сообщения, например расстояние прыжка)
pcvar_jump_distance = register_cvar("bhop_distance", "180") // Минимальная дистанция, при которой происходит торможение
pcvar_bhop_speed_x = register_cvar("bhop_speed_x", "0.75") // Коэффициент торможения после приземления
pcvar_jumps_bhop = register_cvar("bhop_jumps", "3") // Разрешаемое количество прыжков
register_cvar("bhop_block_ver", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
public plugin_cfg() load_cvars()
public event_round_start() load_cvars()
debug_bhop_mode = get_pcvar_num(pcvar_bhop_debug_mode)
bhop_dist = get_pcvar_num(pcvar_jump_distance)
bhop_speed_x = get_pcvar_float(pcvar_bhop_speed_x)
bhop_jumps = get_pcvar_num(pcvar_jumps_bhop)
public fw_clientPreThink(id)
if(!g_is_alive[id]) return PLUGIN_CONTINUE
old_in_air[id] = in_air[id]
if(pev(id, pev_flags) & FL_ONGROUND)
if(!old_in_air[id] && in_air[id]) // Мгновение назад был на земле, а сейчас - в воздухе
get_user_origin(id, origin1[id])
if(old_in_air[id] && !in_air[id]) // Мгновение назад был в воздухе, а сейчас - на земле
get_user_origin(id, origin2[id])
new i_jump_distance = get_distance(origin1[id], origin2[id])
if(debug_bhop_mode) client_print(id, print_chat, "Расстояние прыжка: %d", i_jump_distance)
if(i_jump_distance > bhop_dist)
if(jumpsnum[id] < bhop_jumps * 2)
if(debug_bhop_mode) client_print(id, print_chat, "Прыгнул")
if(jumpsnum[id] > bhop_jumps)
set_pdata_float(id, OFFSET_PAINSHOCK, bhop_speed_x) // Тормозим игрока
if(debug_bhop_mode) client_print(id, print_chat, "Тормозим")
// client_print(id, print_center, "BHOP Запрещён") // Включите, кому нужно
remove_task(id + TASK_JUMP)
set_task(4.0, "jump_sec", id + TASK_JUMP, _, _, "b")
public fw_ClientDisconnect(id)
remove_task(id + TASK_JUMP)
public fw_PlayerSpawn_Post(id)
public fw_PlayerKilled(victim, attacker)
g_is_alive[victim] = false
remove_task(victim + TASK_JUMP)
new id = taskid - TASK_JUMP
// Автор плагина: Leo_[BH] - http://vk.com/id64427766
// Другие мои плагины: http://vk.com/cs_rain
// Написание плагинов на заказ: https://goo.gl/forms/7DwrBdaTnc0pJRqy2
// Создание сборки сервера под ключ: https://goo.gl/forms/GIyvSAw1IJ48szDn2
// Большой опыт по работе с модом Zombie Plague