Как сделать открытие sm_guns на букву G ?

theeldarka

Участник
Сообщения
76
Реакции
16
Операционная система
Windows
Текст ошибки
-
Список мета-модулей
-
Список плагинов SM
-
Список расширений SM
-
Есть такая фича, что если нажать на заданную клавишу (К примеру "G"), то от имени игрока выполнится команда (К примеру sm_guns)
Как это реализовать?
 

KonveeR

Hanzo hasashi
Сообщения
1,639
Реакции
667
Есть такая фича, что если нажать на заданную клавишу (К примеру "G"), то от имени игрока выполнится команда (К примеру sm_guns)
Как это реализовать?
Никак (если на клавишу G не завязано какое либо игровое действие "rebuy" к примеру).
Такие бинды привязываются не к клавишам , а к игровому действию. Пример:

C++:
public OnPluginStart() AddCommandListener(OtherCommandListener, "rebuy");

public Action:OtherCommandListener(client, const String:name[], args)
{
    if (client) FakeClientCommand(client, "sm_menu");
    return Plugin_Continue;
}
В данном случае , на кнопку (по дефолту) f4 , будет выполнятся команда sm_menu
 
  • Мне нравится
Реакции: AD4M

Z-RAY-Z

Участник
Сообщения
775
Реакции
243
Это возможно, видел сегодня на сервере одном. Просто нажимаю G и открывается, также закрывается
На G по-умолчанию назначено выбросить оружие - drop
Ищи на форуме плагин для показа меню на F3 и переделай под свои нужды.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,921
  • Команда форума
  • #6
Значит, у Вас что-то на кнопке G висит. Посмотрите через ввод команды bind G, в ответ выведет команду, которая там висит. И её подставьте в AddCommandListener(), в исходнике выше.
 

KonveeR

Hanzo hasashi
Сообщения
1,639
Реакции
667
Есть такая фича, что если нажать на заданную клавишу (К примеру "G"), то от имени игрока выполнится команда (К примеру sm_guns)
Как это реализовать?

C++:
public OnPluginStart() AddCommandListener(OtherCommandListener, "drop");

public Action:OtherCommandListener(client, const String:name[], args)
{
    if (client) FakeClientCommand(client, "sm_guns");
    return Plugin_Continue;
}
Попробуй вот так
 
  • Мне нравится
Реакции: AD4M

xek

Рыба клоун
Сообщения
1,652
Реакции
636
А как закрытие этого же меню сделать по той же кнопке?
 

xtance

Участник
Сообщения
513
Реакции
743
А как закрытие этого же меню сделать по той же кнопке?
C-подобный:
if (GetClientMenu(iClient) != MenuSource_None) {
  CancelClientMenu(iClient,true);
} else {
  //никакое меню не открыто, открываем sm_guns
  if (iClient) FakeClientCommand(iClient, "sm_guns");
}
return Plugin_Continue;
Правда, закрывать будет любые менюшки, не только эту. Чтобы только эту, можно отслеживать открытие/закрытие какой-нибудь переменной. (так ли это важно?)
 
  • Мне нравится
Реакции: AD4M

Kruzya

Участник
Сообщения
12,970
Реакции
10,921
  • Команда форума
  • #11
Странно, что проверка iClient производится только при открытии меню...
 
  • Мне нравится
Реакции: AD4M

xek

Рыба клоун
Сообщения
1,652
Реакции
636
C-подобный:
if (GetClientMenu(iClient) != MenuSource_None) {
  CancelClientMenu(iClient,true);
} else {
  //никакое меню не открыто, открываем sm_guns
  if (iClient) FakeClientCommand(iClient, "sm_guns");
}
return Plugin_Continue;
Правда, закрывать будет любые менюшки, не только эту. Чтобы только эту, можно отслеживать открытие/закрытие какой-нибудь переменной. (так ли это важно?)
Вот так? Если да, то не компилирует
Код:
public OnPluginStart() AddCommandListener(OtherCommandListener, "drop");

public Action:OtherCommandListener(client, const String:name[], args)
{
    if (GetClientMenu(iClient) != MenuSource_None) {
      CancelClientMenu(iClient,true);
    } else {
      //никакое меню не открыто, открываем sm_guns
      if (iClient) FakeClientCommand(iClient, "sm_guns");
    }
    return Plugin_Continue;
}
 

xtance

Участник
Сообщения
513
Реакции
743
Вот так? Если да, то не компилирует
Код:
public OnPluginStart() AddCommandListener(OtherCommandListener, "drop");

public Action:OtherCommandListener(client, const String:name[], args)
{
    if (GetClientMenu(iClient) != MenuSource_None) {
      CancelClientMenu(iClient,true);
    } else {
      //никакое меню не открыто, открываем sm_guns
      if (iClient) FakeClientCommand(iClient, "sm_guns");
    }
    return Plugin_Continue;
}
Потому что в описании функции client а не iClient
Привычка, извини
C-подобный:
public OnPluginStart() AddCommandListener(OtherCommandListener, "drop");

public Action:OtherCommandListener(iClient, const String:name[], args)
{
    if (iClient){
        if (GetClientMenu(iClient) != MenuSource_None) {
          CancelClientMenu(iClient,true);
        } else {
          //никакое меню не открыто, открываем sm_guns
          FakeClientCommand(iClient, "sm_guns");
        }
    }
    return Plugin_Continue;
}
 

xek

Рыба клоун
Сообщения
1,652
Реакции
636
Потому что в описании функции client а не iClient
Привычка, извини
C-подобный:
public OnPluginStart() AddCommandListener(OtherCommandListener, "drop");

public Action:OtherCommandListener(iClient, const String:name[], args)
{
    if (iClient){
        if (GetClientMenu(iClient) != MenuSource_None) {
          CancelClientMenu(iClient,true);
        } else {
          //никакое меню не открыто, открываем sm_guns
          FakeClientCommand(iClient, "sm_guns");
        }
    }
    return Plugin_Continue;
}
Оно как бы после повторного нажатия не работает, но вот не пропадает само меню, хотя уже пункты в меню не активны и после нажатия на них - пропадает. Может быть после повторного открывать какое то пустое меню, оно вроде очень маленькое и почти незаметное.
 
Сверху Снизу