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

Сообщения
23
Реакции
1
Добрый день, как отловить например нажатие кнопки "F" когда у игрока нож в руках и запустить таймер CreateTimer
Буду благодарен
 

eXtensiON

Дизайнер
Сообщения
133
Реакции
87
@ВарСимЭдуаДимир, а какое действие привязано к кнопке F ?
Если CS:GO - осмотр оружия
Если CS:S - фонарик (вкл/выкл)

@ВарСимЭдуаДимир у меня имеется код на отлов клавиши N, но опять же - это меню
C-подобный:
public OnPluginStart()
{
    SetMenuTitle(hMBC=CreateMenu(MC), "[ Меню сервера ]\n ");
    for(new i, size = sizeof(sCommand); i < size; i++) AddMenuItem(hMBC, "", sDisplay[i]);
    AddCommandListener(BL, "nightvision");
}

public OnClientPostAdminCheck(C) DisplayMenu(hMBC, C,60);

public Action:BL(C, String:N[], A)
{
    if(C) OnClientPostAdminCheck(C);
    return Plugin_Continue;
}

public Action:OnClientSayCommand(C, const String:N[], const String:T[])
{
    if(strcmp(T[1], "menu",false) && strcmp(T[1], "меню")) return Plugin_Continue;
    OnClientPostAdminCheck(C);
    return Plugin_Handled;
}
 
Сообщения
23
Реакции
1
сам писал? или скуловский код взял?
--- Добавлено позже ---
название темы просто топ "Отлов нажатия кпопки"
можно ли посчитать 2 ваших сообщения оффтопами, ибо они не несут смысловой нагрузки

и думаю название темы, должно интересовать в последнюю очередь
 

Хан

Участник
Сообщения
310
Реакции
99
можно ли посчитать 2 ваших сообщения оффтопами, ибо они не несут смысловой нагрузки

и думаю название темы, должно интересовать в последнюю очередь
первое сообщение ещё какой смысл несет
--- Добавлено позже ---
что то толковое хочешь узнать то AlliedModders - AlliedModders точно подскажу)
 

eXtensiON

Дизайнер
Сообщения
133
Реакции
87
сам писал? или скуловский код взял?
--- Добавлено позже ---
название темы просто топ "Отлов нажатия кпопки"
К сожалению ZSchool написан расширением и там совершенно другой код.
А этот код AlmazON, немного переделанный вроде, код не мой.
А вы уже надоели просто так набивать сообщения оффтопами, больше не буду отвечать на ваши оффтопы.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Добрый день, как отловить например нажатие кнопки "F" когда у игрока нож в руках и запустить таймер CreateTimer
Буду благодарен
Попробуй так:
PHP:
public void OnPluginStart()
{
    RegConsoleCmd("impulse", Callback);
}

public Action Callback(int iClient, int iArgs) // реагирует на все impulse
{
    static char sWeapon[12];
    GetClientWeapon(iClient, sWeapon, sizeof(sWeapon));
  
    if(!strcmp("knife", sWeapon[7]))
    {
        CreateTimer(...);
    }
  
    sWeapon[0] = '\0';
  
    return Plugin_Handled;
}

Или так:

Должен реагировать только на фонарик.
PHP:
public void OnPlayerRunCmdPost(int iClient, int iButtons, int iImpulse, const float fVel[3], const float fAngles[3], int iWeapon, int iSubtype, int iCmdnum, int iTickcount, int iSeed, const int iMouse[2])
{
    if(iImpulse == 100)
    {
        static char sWeapon[12];
        GetEntityClassname(iWeapon, sWeapon, sizeof(sWeapon));
        
        if(!strcmp("knife", sWeapon[7]))
        {
            CreateTimer(...);
        }
        
        sWeapon[0] = '\0';
    }
}
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
а почему не просто вот так?
--- Добавлено позже ---
да и вообще обнулять строковую переменную в этой функции вообще нет смысла: ты же не используешь Format(sWeapon, sizeof(sWeapon), "%s любой текст", sWeapon);
GetEntityClassname() в любом случае что-то там пропишет
да и
Return Value
True on success, false if there is no classname set.
В общем лучше вот так:
PHP:
public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float vel[3], const float angles[3], int weapon, int subtype, int cmdnum, int tickcount, int seed, const int mouse[2])
{
    static char sWeapon[12];
    if(impulse == 100 && GetEntityClassname(weapon, sWeapon, sizeof(sWeapon)) && !strcmp("knife", sWeapon[7]))
        CreateTimer(...);
}
 
Последнее редактирование:

Someone

Участник
Сообщения
1,933
Реакции
1,653
да и вообще обнулять строковую переменную в этой функции вообще нет смысла: ты же не используешь Format(sWeapon, sizeof(sWeapon), "%s любой текст"
Вот только это хранится в памяти после использования, так как это static.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Вот только это хранится в памяти после использования
и что с того? Создание локальной static переменной равнозначно созданию глобальной переменной. Разве что эта переменная не будет видна вне функции.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Someone, я к тому что это не имеет никакого значения и обнулять значение переменной не нужно, т.к. это не даст вообще ничего полезного. Просто лишняя операция в коде.
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
@Someone, я к тому что это не имеет никакого значения и обнулять значение переменной не нужно, т.к. это не даст вообще ничего полезного. Просто лишняя операция в коде.
А как же освобождение памяти ?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Someone, для освобождения памяти не используй static. Но при каждом вызове OnPlayerRunCmdPost() место снова будет занято.
Присвоение первой ячейке значения 0 не освобождает место занятое переменной. Только указывает, что длина строки равна 0 (не размер строковой переменной).
Просто натрави на переменную strlen и sizeof (strlen после присвоения первой ячейке значения 0 будет так же выдавать 0, а вот sizeof как до, так и после выдаст 12)
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #16
Вот только это хранится в памяти после использования, так как это static.
12 байт? серьезно? т.е. выделять её каждый фрейм (условно) для каждого игрока это оптимально, а выделить 12 байт на постоянной основе это дофига. тут как бы не high load система где нужно давиться за каждый байт памяти и каждый использованный тик каждого ядра cpu
 
Сверху Снизу