Высокий прыжок

Сообщения
17
Реакции
0
Как можно сделать высокий прыжок? В интернете нашел что можно изменить скорость по z
C#:
new Float:velocity[3];
pev(id, pev_velocity, velocity)
velocity[2] += 250.0;
set_pev(id, pev_velocity, velocity)
Но как отследить прыжок?
13 Июн 2022
(без изменения гравитации)
 
Сообщения
27
Реакции
3
C++:
public plugin_init()
{
    register_forward(FM_PlayerPreThink, "FW_PlayerPreThink")
}

public FW_PlayerPreThink(iPlayer)
{
    new Float:flVelocity[3]
    pev(iPlayer, pev_velocity, flVelocity)
    if(flVelocity[2] >= 250.0)
        server_print("Player (%d) jumped", iPlayer)
}
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
Код:
public HC_CBasePlayer_PlayerJump_Post(const pId)
{
    if(!(get_entvar(pId, var_button) & IN_DUCK) && (get_entvar(pId, var_flags) & (FL_ONGROUND|FL_CONVEYOR)))
    {
        new Float:velocity[3];
        pev(id, pev_velocity, velocity)
        velocity[2] += 250.0;
        set_pev(id, pev_velocity, velocity)
    }
}
 
Сообщения
673
Реакции
242
Помог
11 раз(а)
@userplayer,без разницы
для hamsandwich
RegisterHam(Ham_Player_Jump, "player", "jumped")
для reapi
RegisterHookChain(RG_CBasePlayer_Jump, "HC_CBasePlayer_PlayerJump_Post", .post = true);
 
Сообщения
17
Реакции
0
Limbooc, а что делать с get_entvar? Он для реапи вроде ведь
13 Июн 2022
Xpym4uk76, кикает с причиной "reliable channel overflowed", если кто-то прыгнет
 
Сообщения
27
Реакции
3
Xpym4uk76, кикает с причиной "reliable channel overflowed", если кто-то прыгнет
Сделать проверку в FW_PlayerPreThink'e if(!is_user_alive(iPlayer)) return FMRES_IGNORED
13 Июн 2022
Limbooc, а что делать с get_entvar? Он для реапи вроде ведь
if(!(pev(pId, pev_button) & IN_DUCK) && (pev(pId, pev_flags) & (FL_ONGROUND|FL_CONVEYOR)))
 
Сообщения
494
Реакции
341
Помог
11 раз(а)
Сделать проверку в FW_PlayerPreThink'e if(!is_user_alive(iPlayer)) return FMRES_IGNORED
Выше уже дали более правильный вариант замены Think'а на хук, вызывающийся только при нажатии на соответствующую клавишу прыжка, зачем дальше предлагать такой вариант? К тому же проверка is_user_alive не поможет в данном случае, этот тут вообще не при чем касательно ошибки с забитием канала.

if(!(pev(pId, pev_button) & IN_DUCK) && (pev(pId, pev_flags) & (FL_ONGROUND|FL_CONVEYOR)))
-->
if(~pev(pId, pev_button) & IN_DUCK && pev(pId, pev_flags) & (FL_ONGROUND|FL_CONVEYOR))
Напрямую проверять бит на отрицание быстрее, чем на инверсию функции.
 
Сообщения
17
Реакции
0
Работает
C#:
public jumped(id)
{
    if(!(pev(id, pev_button) & IN_DUCK) && (pev(id, pev_flags) & (FL_ONGROUND|FL_CONVEYOR)) && highjumpstatus[id] == 1)
    {
        new Float:velocity[3];
        pev(id, pev_velocity, velocity)
        velocity[2] += 350.0;
        set_pev(id, pev_velocity, velocity)
    }
}
но при прыжке видно дерганье. Это можно как-то исправить?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу