Отслеживание нажатия кнопки SourcePawn

Тема в разделе "Программирование / Скриптинг", создана пользователем yarik2oo9, 9 янв 2012.

  1. yarik2oo9

    yarik2oo9

    Сообщения:
    14
    Симпатии:
    0
    Необходимо отследить нажатие кнопки, и при true выполнить функцию...
     
  2. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    можно определять лишь нажатия вперед, назад, лево, право, стрельба1 (ЛКМ), стрельба2 (ПКМ), приседание, прыжок, использование и хотьбу
     
    Vit_ amin нравится это.
  3. NagarD

    NagarD

    Сообщения:
    412
    Симпатии:
    170
    это Е?
    Можешь подсказать код?
     
  4. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    PHP:
    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon)
    {
        static 
    iPrevButtons[MAXPLAYERS+1];
        
        if ((
    buttons IN_USE) && !(iPrevButtons[client] & IN_USE))
        {
            if (
    OnButtonUsePress(client) != Plugin_Continue)
            {
                
    buttons &= ~IN_USE;
            }
        }
        else if (!(
    buttons IN_USE) && (iPrevButtons[client] & IN_USE))
        {
            
    OnButtonUseReleased(client);
        }
        
    iPrevButtons[client] = buttons;
        return 
    Plugin_Continue;
    }

    Action:OnButtonUsePress(client)
    {
        
    // Игрок нажал на кнопку Е
        // return Plugin_Changed, Plugin_Handled, Plugin_Stop, чтобы запретить игроку нажатие кнопки Е
    }

    OnButtonUseReleased(client)
    {
        
    // Игрок отпустил кнопку Е
    }
    можно ещё отслеживать нажатие кнопки TAB

    код который поможет определить отдельную кнопку
    PHP:
    public Action:OnPlayerRunCmd(client, &buttons, &impulseFloat:vel[3], Float:angles[3], &weapon)
    {
        static 
    iPrevButtons[MAXPLAYERS+1];
        
        
    decl button;
        for (new 
    0MAX_BUTTONSi++)
        {
            
    button = (<< i);
            
            if (
    buttons button)
            {
                if (!(
    iPrevButtons[client] & button))
                {
                    if (
    OnButtonPress(clientbutton) != Plugin_Continue)
                    {
                        
    buttons &= ~button;
                    }
                }
            }
            else if (
    iPrevButtons[client] & button)
            {
                
    OnButtonRelease(clientbutton);
            }
        }
        
        
    iPrevButtons[client] = buttons;
        return 
    Plugin_Continue;
    }

    Action:OnButtonPress(clientbutton)
    {
        
    }

    OnButtonRelease(clientbutton)
    {

    }
    доступные кнопки, кнопки не только ксс, так что некоторые могут не работать
    PHP:
    #define IN_ATTACK      (1 << 0)
    #define IN_JUMP   (1 << 1)
    #define IN_DUCK   (1 << 2)
    #define IN_FORWARD    (1 << 3)
    #define IN_BACK   (1 << 4)
    #define IN_USE      (1 << 5)
    #define IN_CANCEL      (1 << 6)
    #define IN_LEFT   (1 << 7)
    #define IN_RIGHT        (1 << 8)
    #define IN_MOVELEFT  (1 << 9)
    #define IN_MOVERIGHT        (1 << 10)
    #define IN_ATTACK2    (1 << 11)
    #define IN_RUN      (1 << 12)
    #define IN_RELOAD      (1 << 13)
    #define IN_ALT1   (1 << 14)
    #define IN_ALT2   (1 << 15)
    #define IN_SCORE        (1 << 16)       // Used by client.dll for when scoreboard is held down
    #define IN_SPEED        (1 << 17)   // Player is holding the speed key
    #define IN_WALK   (1 << 18)    // Player holding walk key
    #define IN_ZOOM   (1 << 19)    // Zoom key for HUD zoom
    #define IN_WEAPON1    (1 << 20) // weapon defines these bits
    #define IN_WEAPON2    (1 << 21) // weapon defines these bits
    #define IN_BULLRUSH  (1 << 22)
    #define IN_GRENADE1  (1 << 23)    // grenade 1
    #define IN_GRENADE2  (1 << 24)    // grenade 2 
     
    Последнее редактирование: 10 янв 2012
    san911, R1KO, Andrey и 4 другим нравится это.