IN_RUN [ SHIFT ]

Сообщения
1,546
Реакции
1,545
Помог
2 раз(а)
Работает
pev(id, pev_button) & IN_DUCK
Не работает
pev(id, pev_button) & IN_RUN

Как отследить ,что игрок идёт на шифте?

Я так понял по этому огрызку - что нужно задать эту самую скорость на шифте,а затем уже делать то,что тебе нужно?

Код:
    static Float:maxspeed, Float:walkspeed

    pev(id, pev_maxspeed, maxspeed)

    if(!inwalk[id])
    {
        if(g_speedlose>0.0 && newspeed[id] != maxspeed)
        {
            if(newspeed[id]<1.0)
                newspeed[id]=1.0
   
            set_pev(id, pev_maxspeed, newspeed[id])
        }
    }else{
        if(maxspeed != (walkspeed = 0.5*newspeed[id]))
            set_pev(id, pev_maxspeed, walkspeed)
    }

    if((pev(id, pev_button) & (IN_FORWARD|IN_BACK|IN_MOVELEFT|IN_MOVERIGHT)))
    {
        static Float:Vel[3], Float:playerspeed, Float:steptime
        pev(id, pev_velocity, Vel)
        playerspeed = vector_length(Vel)

        if(playerspeed>50.0)
        {
// Убиваем игрока )))
Или же вот так?
 
Последнее редактирование:
Сообщения
673
Реакции
242
Помог
11 раз(а)
как то так)),

Код:
#include <amxmodx>
#include <fakemeta>

public plugin_init()
{
    register_forward(FM_PlayerPreThink, "client_prethink");
}

public client_prethink( id)
{
    static buttons, sequence;
    buttons = pev(id, pev_button);
    sequence = pev(id, pev_gaitsequence);
 
    static Float:gCurTime, Float:g_iUserFloatTime; gCurTime = get_gametime();
 
    if(buttons & IN_FORWARD && g_iUserFloatTime <= gCurTime)
    {
        if(sequence == 3)
        server_print("walking");
        else server_print("running");
     
        g_iUserFloatTime = gCurTime + 0.2;
    }
}
 
Последнее редактирование:
Сообщения
1,546
Реакции
1,545
Помог
2 раз(а)
Вообщем сделал по методу,что выше ссылку кидал на Олени

При шифте не слышно звуков шагов ,которые я подменил + сделал проверку,что-бы когда упёрся в стенку ( это при обычной ходьбе ) - то и там глушить их

Но есть вот такой вот странный момент
Нажал шифт и зажал к примеру влево,и не отпуская эти клавиши,нажимаешь вправо по несколько раз и проскакивает звук шагов
Также если зажать шифт и не отпуская быстро нажимать движения влево-вправо | вперёд-вниз - то звуки слышно также
Прошу помощи закрыть этот момент,если предоставляется возможным

Вот как всё было )

С Оленей это взял
Код:
public Step_Walk(id, uc_handle, randseed)
{
        if(!is_user_alive(id))
            return FMRES_IGNORED;
   
    new Float:fmove, Float:smove, Float:umove;
    get_uc(uc_handle, UC_ForwardMove, fmove);
    get_uc(uc_handle, UC_SideMove, smove);
    get_uc(uc_handle, UC_UpMove, umove);
   
    new Float:maxspeed;
    pev(id, pev_maxspeed, maxspeed);
    fmove = floatabs( fmove );
    smove = floatabs( smove );
    new Float:maxwalkspeed = what_is_higher((maxspeed*0.52), 22500.0);
   
    static Float:oldspeed[33];
   
    if(((fmove*fmove)+(smove*smove)+(umove*umove))>maxwalkspeed)
    {
        Shift_Walk[id] = false;
    }
    else if(fmove || smove || umove)
    {
        new Float:velocity[3];
        pev(id, pev_velocity, velocity);
        oldspeed[id] = ((velocity[0]*velocity[0])+(velocity[1]*velocity[1])+(velocity[2]*velocity[2])+1.0);
        Shift_Walk[id] = true;
    }
    else if(Shift_Walk[id])
    {
        new Float:velocity[3], Float:speed;
        pev(id, pev_velocity, velocity);
        speed = ((velocity[0]*velocity[0])+(velocity[1]*velocity[1])+(velocity[2]*velocity[2]));
       
        if(speed>maxwalkspeed)
        {
            Shift_Walk[id] = false;
        }
        else if(!speed)
        {
            Shift_Walk[id] = false;
        }
        else if(speed>=oldspeed[id])
        {
            Shift_Walk[id] = false;
        }  
        oldspeed[id] = speed;
    }
    return FMRES_IGNORED;
}
И сама функция звуков шагов
Код:
public Snow_Sound(id)
{
    if(!is_user_alive(id))
        return FMRES_IGNORED;

    static Float:gStepTime, Float:afVelocity[3], Float:BlockStepSpeed[33];
    gStepTime = get_gametime();
    pev(id, pev_velocity, afVelocity)
    BlockStepSpeed[id] = vector_length(afVelocity)

    if(g_Step[id] < gStepTime)
    {
        if(fm_get_user_speed(id) && !(pev(id, pev_button) & IN_DUCK) && (pev(id, pev_flags) & FL_ONGROUND) && is_user_outside(id))
        {
            if(BlockStepSpeed[id] > 50.0 && (pev(id, pev_button) & (IN_FORWARD|IN_BACK|IN_MOVELEFT|IN_MOVERIGHT)))
            {
                    if(!Shift_Walk[id] == true)
                    {
                    static origin[3];
                    get_user_origin(id, origin);
   
                    message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
                    write_byte(TE_SPRITE);
                    write_coord(origin[0]);
                    write_coord(origin[1]);
                    write_coord(origin[2]-=30);
                    write_short(g_steam);
                    write_byte(2);
                    write_byte(255);
                    message_end();

                    set_pev(id, pev_flTimeStepSound, 999);

                    engfunc(EngFunc_EmitSound, id, CHAN_AUTO, snow_step_sound[random_num(0, sizeof snow_step_sound - 1)], 0.5, ATTN_NORM, 0, PITCH_NORM);
           
                    g_Step[id] = gStepTime + SNOW_STEP_DELAY;
                }
                    else if(Shift_Walk[id] == false)
                        set_pev(id, pev_velocity, BlockStepSpeed)
            }
        }
    }
    return FMRES_IGNORED;
}
 
Последнее редактирование:

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

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