Subb98, Проверил твой вариант
- Код: Выделить всё
const OFFSET_PAINSHOCK = 108
new bool:g_is_alive[33]
new in_air[33], old_in_air[33]
new origin1[33][3], origin2[33][3]
public plugin_init()
{
register_plugin("BHOP BLOCK", "1.6test", "Leo_[BH]")
RegisterHam(Ham_Player_Jump, "player", "fw_PlayerJump")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
}
public client_putinserver(id)
{
g_is_alive[id] = false
in_air[id] = 0
old_in_air[id] = 0
}
public fw_PlayerJump(id)
{
if(!g_is_alive[id]) return HAM_IGNORED
old_in_air[id] = in_air[id]
if(pev(id, pev_flags) & (FL_ONGROUND | FL_CONVEYOR))
{
in_air[id] = 0
}
else
{
in_air[id] = 1
}
if(!old_in_air[id] && in_air[id]) {
get_user_origin(id, origin1[id])
client_print(id, print_chat, "Ты прыгнул!")
}
if(old_in_air[id] && !in_air[id]) {
get_user_origin(id, origin2[id])
client_print(id, print_chat, "Ты приземлился!")
if(get_distance(origin1[id], origin2[id]) > JUMP_DISTANCE)
{
set_pdata_float(id, OFFSET_PAINSHOCK, BHOP_SPEED_X)
client_print(id, print_chat, "Мы тебя тормозим")
}
}
return HAM_IGNORED
}
public fw_PlayerSpawn_Post(id)
{
if(is_user_alive(id))
{
g_is_alive[id] = true
}
}
public fw_PlayerKilled(victim, attacker)
{
g_is_alive[victim] = false
in_air[victim] = 0
old_in_air[victim] = 0
}
Он будет работать только в случае, если у игрока будет зажата клавиша прыжка от начала его исполнения и до конца. Иначе, вызывается только "Ты прыгнул" (см. тест код выше).
Соответственно момент приземления мы не отлавливаем в подавляющем большинстве случаев.
(А кто ведь зажимает пробел от начала прыжка и до конца? И тем более многие пользуются колесиком)
Добавлено спустя 16 минут 21 секунду:Обновил плагин до последней версии
1.8 Ключевые изменения:
Добавлены переменные для настройки плагина: bhop_distance / bhop_speed_x / bhop_jumps
Добавлена возможность сделать несколько прыжков игроку, перед тем, как он будет замедлен.
(Настраивается кваром bhop_jumps)